From 20a99e50185e859d289eee156d78caeb20d98fd3 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Tue, 4 Aug 2020 09:14:32 +1000
Subject: [PATCH 001/284] Add FileTypes for cross project file options (#914)
* move BuildPhase
* add fileTypes
* update changelog
---
CHANGELOG.md | 3 +-
Docs/ProjectSpec.md | 10 ++
Sources/ProjectSpec/BuildPhaseSpec.swift | 148 +++++++++++++++++
Sources/ProjectSpec/FileType.swift | 114 +++++++++++++
Sources/ProjectSpec/SourceType.swift | 14 ++
Sources/ProjectSpec/SpecOptions.swift | 9 +
Sources/ProjectSpec/TargetSource.swift | 154 +-----------------
Sources/XcodeGenKit/PBXProjGenerator.swift | 8 +-
Sources/XcodeGenKit/SourceGenerator.swift | 107 ++++++------
.../Fixtures/TestProject/App_iOS/Resource.abc | 0
.../App_iOS/Resource.abcd/File.json | 0
.../Project.xcodeproj/project.pbxproj | 4 +
Tests/Fixtures/TestProject/project.yml | 5 +
Tests/ProjectSpecTests/SpecLoadingTests.swift | 13 ++
.../SourceGeneratorTests.swift | 81 +++++++--
15 files changed, 448 insertions(+), 222 deletions(-)
create mode 100644 Sources/ProjectSpec/BuildPhaseSpec.swift
create mode 100644 Sources/ProjectSpec/FileType.swift
create mode 100644 Sources/ProjectSpec/SourceType.swift
create mode 100644 Tests/Fixtures/TestProject/App_iOS/Resource.abc
create mode 100644 Tests/Fixtures/TestProject/App_iOS/Resource.abcd/File.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 14a06745d..1e8c39616 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,8 @@
## Next Version
#### Added
-- Add `onlyCopyFilesOnInstall` option to targets for the Embed Files build phase. [#912](https://github.com/yonaskolb/XcodeGen/pull/912) @jsorge
+- Added `options.fileTypes` which lets you set cross project defaults for certain file extensions [#914](https://github.com/yonaskolb/XcodeGen/pull/914) @yonaskolb
+- Added `onlyCopyFilesOnInstall` option to targets for the Embed Files build phase. [#912](https://github.com/yonaskolb/XcodeGen/pull/912) @jsorge
#### Fixed
- Treat all directories with known UTI as file wrapper. [#896](https://github.com/yonaskolb/XcodeGen/pull/896) @KhaosT
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index cfbe09878..9853d5cdb 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -123,6 +123,7 @@ Note that target names can also be changed by adding a `name` property to a targ
- [ ] **generateEmptyDirectories**: **Bool** - If this is `true` then empty directories will be added to project too else will be missed. Defaults to `false`.
- [ ] **findCarthageFrameworks**: **Bool** - When this is set to `true`, all the invididual frameworks for Carthage dependencies will automatically be found. This property can be overriden individually for each carthage dependency - for more details see See **findFrameworks** in the [Dependency](#dependency) section. Defaults to `false`.
- [ ] **localPackagesGroup**: **String** - The group name that local packages are put into. This defaults to `Packages`
+- [ ] **fileTypes**: **[String: [FileType](#filetype)]** - A list of default file options for specific file extensions across the project. Values in [Sources](#sources) will overwrite these settings.
- [ ] **preGenCommand**: **String** - A bash command to run before the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like generating resources files before the project is regenerated.
- [ ] **postGenCommand**: **String** - A bash command to run after the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like `pod install` only if the project is actually regenerated.
@@ -151,6 +152,15 @@ options:
In this example, we set up the order of two groups. First one is the main group, i.e. the project, note that in this case, we shouldn't set `pattern` option and the second group order is for groups whose names ends with `Screen`.
+### FileType
+Default settings for file extensions. See [Sources](#sources) for more documentation on properties. If you overwrite an extension that XcodeGen already provides by default, you will need to provide all the settings.
+
+- [ ] **file**: **Bool** - Whether this extension should be treated like a file. Defaults to true.
+- [ ] **buildPhase**: **String** - The default build phase.
+- [ ] **attributes**: **[String]** - Additional settings attributes that will be applied to any build files.
+- [ ] **resourceTags**: **[String]** - On Demand Resource Tags that will be applied to any resources. This also adds to the project attribute's knownAssetTags.
+- [ ] **compilerFlags**: **[String]** - A list of compiler flags to add.
+
### Configs
Each config maps to a build type of either `debug` or `release` which will then apply default build settings to the project. Any value other than `debug` or `release` (for example `none`), will mean no default build settings will be applied to the project.
diff --git a/Sources/ProjectSpec/BuildPhaseSpec.swift b/Sources/ProjectSpec/BuildPhaseSpec.swift
new file mode 100644
index 000000000..716e1bec8
--- /dev/null
+++ b/Sources/ProjectSpec/BuildPhaseSpec.swift
@@ -0,0 +1,148 @@
+//
+// File.swift
+//
+//
+// Created by Yonas Kolb on 1/5/20.
+//
+
+import Foundation
+import XcodeProj
+import JSONUtilities
+
+public enum BuildPhaseSpec: Equatable {
+ case sources
+ case headers
+ case resources
+ case copyFiles(CopyFilesSettings)
+ case none
+ // Not currently exposed as selectable options, but used internally
+ case frameworks
+ case runScript
+ case carbonResources
+
+ public struct CopyFilesSettings: Equatable, Hashable {
+ public static let xpcServices = CopyFilesSettings(
+ destination: .productsDirectory,
+ subpath: "$(CONTENTS_FOLDER_PATH)/XPCServices",
+ phaseOrder: .postCompile
+ )
+
+ public enum Destination: String {
+ case absolutePath
+ case productsDirectory
+ case wrapper
+ case executables
+ case resources
+ case javaResources
+ case frameworks
+ case sharedFrameworks
+ case sharedSupport
+ case plugins
+
+ public var destination: PBXCopyFilesBuildPhase.SubFolder? {
+ switch self {
+ case .absolutePath: return .absolutePath
+ case .productsDirectory: return .productsDirectory
+ case .wrapper: return .wrapper
+ case .executables: return .executables
+ case .resources: return .resources
+ case .javaResources: return .javaResources
+ case .frameworks: return .frameworks
+ case .sharedFrameworks: return .sharedFrameworks
+ case .sharedSupport: return .sharedSupport
+ case .plugins: return .plugins
+ }
+ }
+ }
+
+ public enum PhaseOrder: String {
+ /// Run before the Compile Sources phase
+ case preCompile
+ /// Run after the Compile Sources and post-compile Run Script phases
+ case postCompile
+ }
+
+ public var destination: Destination
+ public var subpath: String
+ public var phaseOrder: PhaseOrder
+
+ public init(
+ destination: Destination,
+ subpath: String,
+ phaseOrder: PhaseOrder
+ ) {
+ self.destination = destination
+ self.subpath = subpath
+ self.phaseOrder = phaseOrder
+ }
+ }
+
+ public var buildPhase: BuildPhase? {
+ switch self {
+ case .sources: return .sources
+ case .headers: return .headers
+ case .resources: return .resources
+ case .copyFiles: return .copyFiles
+ case .frameworks: return .frameworks
+ case .runScript: return .runScript
+ case .carbonResources: return .carbonResources
+ case .none: return nil
+ }
+ }
+}
+
+extension BuildPhaseSpec {
+
+ public init(string: String) throws {
+ switch string {
+ case "sources": self = .sources
+ case "headers": self = .headers
+ case "resources": self = .resources
+ case "copyFiles":
+ throw SpecParsingError.invalidSourceBuildPhase("copyFiles must specify a \"destination\" and optional \"subpath\"")
+ case "none": self = .none
+ default:
+ throw SpecParsingError.invalidSourceBuildPhase(string.quoted)
+ }
+ }
+}
+
+extension BuildPhaseSpec: JSONObjectConvertible {
+
+ public init(jsonDictionary: JSONDictionary) throws {
+ self = .copyFiles(try jsonDictionary.json(atKeyPath: "copyFiles"))
+ }
+}
+
+extension BuildPhaseSpec: JSONEncodable {
+ public func toJSONValue() -> Any {
+ switch self {
+ case .sources: return "sources"
+ case .headers: return "headers"
+ case .resources: return "resources"
+ case .copyFiles(let files): return ["copyFiles": files.toJSONValue()]
+ case .none: return "none"
+ case .frameworks: fatalError("invalid build phase")
+ case .runScript: fatalError("invalid build phase")
+ case .carbonResources: fatalError("invalid build phase")
+ }
+ }
+}
+
+extension BuildPhaseSpec.CopyFilesSettings: JSONObjectConvertible {
+
+ public init(jsonDictionary: JSONDictionary) throws {
+ destination = try jsonDictionary.json(atKeyPath: "destination")
+ subpath = jsonDictionary.json(atKeyPath: "subpath") ?? ""
+ phaseOrder = .postCompile
+ }
+}
+
+extension BuildPhaseSpec.CopyFilesSettings: JSONEncodable {
+ public func toJSONValue() -> Any {
+ [
+ "destination": destination.rawValue,
+ "subpath": subpath,
+ ]
+ }
+}
diff --git a/Sources/ProjectSpec/FileType.swift b/Sources/ProjectSpec/FileType.swift
new file mode 100644
index 000000000..bc535a1d2
--- /dev/null
+++ b/Sources/ProjectSpec/FileType.swift
@@ -0,0 +1,114 @@
+//
+// File.swift
+//
+//
+// Created by Yonas Kolb on 1/5/20.
+//
+
+import Foundation
+import JSONUtilities
+import enum XcodeProj.BuildPhase
+
+public struct FileType: Equatable {
+
+ public enum Defaults {
+ public static let file = true
+ }
+
+ public var file: Bool
+ public var buildPhase: BuildPhaseSpec?
+ public var attributes: [String]
+ public var resourceTags: [String]
+ public var compilerFlags: [String]
+
+ public init(
+ file: Bool = Defaults.file,
+ buildPhase: BuildPhaseSpec? = nil,
+ attributes: [String] = [],
+ resourceTags: [String] = [],
+ compilerFlags: [String] = []
+ ) {
+ self.file = file
+ self.buildPhase = buildPhase
+ self.attributes = attributes
+ self.resourceTags = resourceTags
+ self.compilerFlags = compilerFlags
+ }
+}
+
+extension FileType: JSONObjectConvertible {
+ public init(jsonDictionary: JSONDictionary) throws {
+ if let string: String = jsonDictionary.json(atKeyPath: "buildPhase") {
+ buildPhase = try BuildPhaseSpec(string: string)
+ } else if let dict: JSONDictionary = jsonDictionary.json(atKeyPath: "buildPhase") {
+ buildPhase = try BuildPhaseSpec(jsonDictionary: dict)
+ }
+ file = jsonDictionary.json(atKeyPath: "file") ?? Defaults.file
+ attributes = jsonDictionary.json(atKeyPath: "attributes") ?? []
+ resourceTags = jsonDictionary.json(atKeyPath: "resourceTags") ?? []
+ compilerFlags = jsonDictionary.json(atKeyPath: "compilerFlags") ?? []
+ }
+}
+
+extension FileType: JSONEncodable {
+ public func toJSONValue() -> Any {
+ var dict: [String: Any?] = [
+ "buildPhase": buildPhase?.toJSONValue(),
+ "attributes": attributes,
+ "resourceTags": resourceTags,
+ "compilerFlags": compilerFlags,
+ ]
+ if file != Defaults.file {
+ dict["file"] = file
+ }
+ return dict
+ }
+}
+
+extension FileType {
+
+ public static let defaultFileTypes: [String: FileType] = [
+ // resources
+ "bundle": FileType(buildPhase: .resources),
+ "xcassets": FileType(buildPhase: .resources),
+
+ // sources
+ "swift": FileType(buildPhase: .sources),
+ "m": FileType(buildPhase: .sources),
+ "mm": FileType(buildPhase: .sources),
+ "cpp": FileType(buildPhase: .sources),
+ "c": FileType(buildPhase: .sources),
+ "cc": FileType(buildPhase: .sources),
+ "S": FileType(buildPhase: .sources),
+ "xcdatamodeld": FileType(buildPhase: .sources),
+ "xcmappingmodel": FileType(buildPhase: .sources),
+ "intentdefinition": FileType(buildPhase: .sources),
+ "metal": FileType(buildPhase: .sources),
+ "mlmodel": FileType(buildPhase: .sources),
+ "rcproject": FileType(buildPhase: .sources),
+
+ // headers
+ "h": FileType(buildPhase: .headers),
+ "hh": FileType(buildPhase: .headers),
+ "hpp": FileType(buildPhase: .headers),
+ "ipp": FileType(buildPhase: .headers),
+ "tpp": FileType(buildPhase: .headers),
+ "hxx": FileType(buildPhase: .headers),
+ "def": FileType(buildPhase: .headers),
+
+ // frameworks
+ "framework": FileType(buildPhase: .frameworks),
+
+ // copyfiles
+ "xpc": FileType(buildPhase: .copyFiles(.xpcServices)),
+
+ // no build phase (not resources)
+ "xcconfig": FileType(buildPhase: BuildPhaseSpec.none),
+ "entitlements": FileType(buildPhase: BuildPhaseSpec.none),
+ "gpx": FileType(buildPhase: BuildPhaseSpec.none),
+ "lproj": FileType(buildPhase: BuildPhaseSpec.none),
+ "xcfilelist": FileType(buildPhase: BuildPhaseSpec.none),
+ "apns": FileType(buildPhase: BuildPhaseSpec.none),
+ "pch": FileType(buildPhase: BuildPhaseSpec.none),
+ ]
+}
diff --git a/Sources/ProjectSpec/SourceType.swift b/Sources/ProjectSpec/SourceType.swift
new file mode 100644
index 000000000..77ce4ffe7
--- /dev/null
+++ b/Sources/ProjectSpec/SourceType.swift
@@ -0,0 +1,14 @@
+//
+// File.swift
+//
+//
+// Created by Yonas Kolb on 1/5/20.
+//
+
+import Foundation
+
+public enum SourceType: String {
+ case group
+ case file
+ case folder
+}
diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift
index 237f2b56b..b2d35a9d7 100644
--- a/Sources/ProjectSpec/SpecOptions.swift
+++ b/Sources/ProjectSpec/SpecOptions.swift
@@ -27,6 +27,7 @@ public struct SpecOptions: Equatable {
public var transitivelyLinkDependencies: Bool
public var groupSortPosition: GroupSortPosition
public var groupOrdering: [GroupOrdering]
+ public var fileTypes: [String: FileType]
public var generateEmptyDirectories: Bool
public var findCarthageFrameworks: Bool
public var localPackagesGroup: String?
@@ -87,6 +88,7 @@ public struct SpecOptions: Equatable {
transitivelyLinkDependencies: Bool = transitivelyLinkDependenciesDefault,
groupSortPosition: GroupSortPosition = groupSortPositionDefault,
groupOrdering: [GroupOrdering] = [],
+ fileTypes: [String: FileType] = [:],
generateEmptyDirectories: Bool = generateEmptyDirectoriesDefault,
findCarthageFrameworks: Bool = findCarthageFrameworksDefault,
localPackagesGroup: String? = nil,
@@ -110,6 +112,7 @@ public struct SpecOptions: Equatable {
self.transitivelyLinkDependencies = transitivelyLinkDependencies
self.groupSortPosition = groupSortPosition
self.groupOrdering = groupOrdering
+ self.fileTypes = fileTypes
self.generateEmptyDirectories = generateEmptyDirectories
self.findCarthageFrameworks = findCarthageFrameworks
self.localPackagesGroup = localPackagesGroup
@@ -146,6 +149,11 @@ extension SpecOptions: JSONObjectConvertible {
localPackagesGroup = jsonDictionary.json(atKeyPath: "localPackagesGroup")
preGenCommand = jsonDictionary.json(atKeyPath: "preGenCommand")
postGenCommand = jsonDictionary.json(atKeyPath: "postGenCommand")
+ if jsonDictionary["fileTypes"] != nil {
+ fileTypes = try jsonDictionary.json(atKeyPath: "fileTypes")
+ } else {
+ fileTypes = [:]
+ }
}
}
@@ -169,6 +177,7 @@ extension SpecOptions: JSONEncodable {
"localPackagesGroup": localPackagesGroup,
"preGenCommand": preGenCommand,
"postGenCommand": postGenCommand,
+ "fileTypes": fileTypes
]
if settingPresets != SpecOptions.settingPresetsDefault {
diff --git a/Sources/ProjectSpec/TargetSource.swift b/Sources/ProjectSpec/TargetSource.swift
index 8c55b7875..2a75f3bf4 100644
--- a/Sources/ProjectSpec/TargetSource.swift
+++ b/Sources/ProjectSpec/TargetSource.swift
@@ -1,8 +1,6 @@
import Foundation
import JSONUtilities
import PathKit
-import enum XcodeProj.BuildPhase
-import class XcodeProj.PBXCopyFilesBuildPhase
public struct TargetSource: Equatable {
public static let optionalDefault = false
@@ -15,7 +13,7 @@ public struct TargetSource: Equatable {
public var includes: [String]
public var type: SourceType?
public var optional: Bool
- public var buildPhase: BuildPhase?
+ public var buildPhase: BuildPhaseSpec?
public var headerVisibility: HeaderVisibility?
public var createIntermediateGroups: Bool?
public var attributes: [String]
@@ -35,94 +33,6 @@ public struct TargetSource: Equatable {
}
}
- public enum BuildPhase: Equatable {
- case sources
- case headers
- case resources
- case copyFiles(CopyFilesSettings)
- case none
- // Not currently exposed as selectable options, but used internally
- case frameworks
- case runScript
- case carbonResources
-
- public struct CopyFilesSettings: Equatable, Hashable {
- public static let xpcServices = CopyFilesSettings(
- destination: .productsDirectory,
- subpath: "$(CONTENTS_FOLDER_PATH)/XPCServices",
- phaseOrder: .postCompile
- )
-
- public enum Destination: String {
- case absolutePath
- case productsDirectory
- case wrapper
- case executables
- case resources
- case javaResources
- case frameworks
- case sharedFrameworks
- case sharedSupport
- case plugins
-
- public var destination: PBXCopyFilesBuildPhase.SubFolder? {
- switch self {
- case .absolutePath: return .absolutePath
- case .productsDirectory: return .productsDirectory
- case .wrapper: return .wrapper
- case .executables: return .executables
- case .resources: return .resources
- case .javaResources: return .javaResources
- case .frameworks: return .frameworks
- case .sharedFrameworks: return .sharedFrameworks
- case .sharedSupport: return .sharedSupport
- case .plugins: return .plugins
- }
- }
- }
-
- public enum PhaseOrder: String {
- /// Run before the Compile Sources phase
- case preCompile
- /// Run after the Compile Sources and post-compile Run Script phases
- case postCompile
- }
-
- public var destination: Destination
- public var subpath: String
- public var phaseOrder: PhaseOrder
-
- public init(
- destination: Destination,
- subpath: String,
- phaseOrder: PhaseOrder
- ) {
- self.destination = destination
- self.subpath = subpath
- self.phaseOrder = phaseOrder
- }
- }
-
- public var buildPhase: XcodeProj.BuildPhase? {
- switch self {
- case .sources: return .sources
- case .headers: return .headers
- case .resources: return .resources
- case .copyFiles: return .copyFiles
- case .frameworks: return .frameworks
- case .runScript: return .runScript
- case .carbonResources: return .carbonResources
- case .none: return nil
- }
- }
- }
-
- public enum SourceType: String {
- case group
- case file
- case folder
- }
-
public init(
path: String,
name: String? = nil,
@@ -132,7 +42,7 @@ public struct TargetSource: Equatable {
includes: [String] = [],
type: SourceType? = nil,
optional: Bool = optionalDefault,
- buildPhase: BuildPhase? = nil,
+ buildPhase: BuildPhaseSpec? = nil,
headerVisibility: HeaderVisibility? = nil,
createIntermediateGroups: Bool? = nil,
attributes: [String] = [],
@@ -188,9 +98,9 @@ extension TargetSource: JSONObjectConvertible {
optional = jsonDictionary.json(atKeyPath: "optional") ?? TargetSource.optionalDefault
if let string: String = jsonDictionary.json(atKeyPath: "buildPhase") {
- buildPhase = try BuildPhase(string: string)
+ buildPhase = try BuildPhaseSpec(string: string)
} else if let dict: JSONDictionary = jsonDictionary.json(atKeyPath: "buildPhase") {
- buildPhase = try BuildPhase(jsonDictionary: dict)
+ buildPhase = try BuildPhaseSpec(jsonDictionary: dict)
}
createIntermediateGroups = jsonDictionary.json(atKeyPath: "createIntermediateGroups")
@@ -228,62 +138,6 @@ extension TargetSource: JSONEncodable {
}
}
-extension TargetSource.BuildPhase {
-
- public init(string: String) throws {
- switch string {
- case "sources": self = .sources
- case "headers": self = .headers
- case "resources": self = .resources
- case "copyFiles":
- throw SpecParsingError.invalidSourceBuildPhase("copyFiles must specify a \"destination\" and optional \"subpath\"")
- case "none": self = .none
- default:
- throw SpecParsingError.invalidSourceBuildPhase(string.quoted)
- }
- }
-}
-
-extension TargetSource.BuildPhase: JSONObjectConvertible {
-
- public init(jsonDictionary: JSONDictionary) throws {
- self = .copyFiles(try jsonDictionary.json(atKeyPath: "copyFiles"))
- }
-}
-
-extension TargetSource.BuildPhase: JSONEncodable {
- public func toJSONValue() -> Any {
- switch self {
- case .sources: return "sources"
- case .headers: return "headers"
- case .resources: return "resources"
- case .copyFiles(let files): return ["copyFiles": files.toJSONValue()]
- case .none: return "none"
- case .frameworks: fatalError("invalid build phase")
- case .runScript: fatalError("invalid build phase")
- case .carbonResources: fatalError("invalid build phase")
- }
- }
-}
-
-extension TargetSource.BuildPhase.CopyFilesSettings: JSONObjectConvertible {
-
- public init(jsonDictionary: JSONDictionary) throws {
- destination = try jsonDictionary.json(atKeyPath: "destination")
- subpath = jsonDictionary.json(atKeyPath: "subpath") ?? ""
- phaseOrder = .postCompile
- }
-}
-
-extension TargetSource.BuildPhase.CopyFilesSettings: JSONEncodable {
- public func toJSONValue() -> Any {
- [
- "destination": destination.rawValue,
- "subpath": subpath,
- ]
- }
-}
-
extension TargetSource: PathContainer {
static var pathProperties: [PathProperty] {
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 8049cdc1d..c0c61c74b 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -476,7 +476,7 @@ public class PBXProjGenerator {
return addObject(shellScriptPhase)
}
- func generateCopyFiles(targetName: String, copyFiles: TargetSource.BuildPhase.CopyFilesSettings, buildPhaseFiles: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {
+ func generateCopyFiles(targetName: String, copyFiles: BuildPhaseSpec.CopyFilesSettings, buildPhaseFiles: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {
let copyFilesBuildPhase = PBXCopyFilesBuildPhase(
dstPath: copyFiles.subpath,
dstSubfolderSpec: copyFiles.destination.destination,
@@ -644,7 +644,7 @@ public class PBXProjGenerator {
var dependencies: [PBXTargetDependency] = []
var targetFrameworkBuildFiles: [PBXBuildFile] = []
var frameworkBuildPaths = Set()
- var copyFilesBuildPhasesFiles: [TargetSource.BuildPhase.CopyFilesSettings: [PBXBuildFile]] = [:]
+ var copyFilesBuildPhasesFiles: [BuildPhaseSpec.CopyFilesSettings: [PBXBuildFile]] = [:]
var copyFrameworksReferences: [PBXBuildFile] = []
var copyResourcesReferences: [PBXBuildFile] = []
var copyBundlesReferences: [PBXBuildFile] = []
@@ -955,8 +955,8 @@ public class PBXProjGenerator {
return getBuildFilesForSourceFiles(filteredSourceFiles)
}
- func getBuildFilesForCopyFilesPhases() -> [TargetSource.BuildPhase.CopyFilesSettings: [PBXBuildFile]] {
- var sourceFilesByCopyFiles: [TargetSource.BuildPhase.CopyFilesSettings: [SourceFile]] = [:]
+ func getBuildFilesForCopyFilesPhases() -> [BuildPhaseSpec.CopyFilesSettings: [PBXBuildFile]] {
+ var sourceFilesByCopyFiles: [BuildPhaseSpec.CopyFilesSettings: [SourceFile]] = [:]
for sourceFile in sourceFiles {
guard case let .copyFiles(copyFilesSettings)? = sourceFile.buildPhase else { continue }
sourceFilesByCopyFiles[copyFilesSettings, default: []].append(sourceFile)
diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift
index 481ed3b9c..17255a904 100644
--- a/Sources/XcodeGenKit/SourceGenerator.swift
+++ b/Sources/XcodeGenKit/SourceGenerator.swift
@@ -8,7 +8,7 @@ struct SourceFile {
let path: Path
let fileReference: PBXFileElement
let buildFile: PBXBuildFile
- let buildPhase: TargetSource.BuildPhase?
+ let buildPhase: BuildPhaseSpec?
}
class SourceGenerator {
@@ -87,11 +87,22 @@ class SourceGenerator {
_ = try getSourceFiles(targetType: .none, targetSource: TargetSource(path: path), path: fullPath)
}
- func generateSourceFile(targetType: PBXProductType, targetSource: TargetSource, path: Path, buildPhase: TargetSource.BuildPhase? = nil, fileReference: PBXFileElement? = nil) -> SourceFile {
+ func getFileType(path: Path) -> FileType? {
+ if let fileExtension = path.extension {
+ return project.options.fileTypes[fileExtension] ?? FileType.defaultFileTypes[fileExtension]
+ } else {
+ return nil
+ }
+ }
+
+ func generateSourceFile(targetType: PBXProductType, targetSource: TargetSource, path: Path, buildPhase: BuildPhaseSpec? = nil, fileReference: PBXFileElement? = nil) -> SourceFile {
let fileReference = fileReference ?? fileReferencesByPath[path.string.lowercased()]!
var settings: [String: Any] = [:]
- var attributes: [String] = targetSource.attributes
- var chosenBuildPhase: TargetSource.BuildPhase?
+ let fileType = getFileType(path: path)
+ var attributes: [String] = targetSource.attributes + (fileType?.attributes ?? [])
+ var chosenBuildPhase: BuildPhaseSpec?
+ var compilerFlags: String = ""
+ let assetTags: [String] = targetSource.resourceTags + (fileType?.resourceTags ?? [])
let headerVisibility = targetSource.headerVisibility ?? .public
@@ -107,7 +118,7 @@ class SourceGenerator {
// Static libraries don't support the header build phase
// For public headers they need to be copied
if headerVisibility == .public {
- chosenBuildPhase = .copyFiles(TargetSource.BuildPhase.CopyFilesSettings(
+ chosenBuildPhase = .copyFiles(BuildPhaseSpec.CopyFilesSettings(
destination: .productsDirectory,
subpath: "include/$(PRODUCT_NAME)",
phaseOrder: .preCompile
@@ -123,16 +134,28 @@ class SourceGenerator {
attributes.append(headerVisibility.settingName)
}
}
- if chosenBuildPhase == .sources && targetSource.compilerFlags.count > 0 {
- settings["COMPILER_FLAGS"] = targetSource.compilerFlags.joined(separator: " ")
+
+ if let flags = fileType?.compilerFlags {
+ compilerFlags += flags.joined(separator: " ")
+ }
+
+ if !targetSource.compilerFlags.isEmpty {
+ if !compilerFlags.isEmpty {
+ compilerFlags += " "
+ }
+ compilerFlags += targetSource.compilerFlags.joined(separator: " ")
+ }
+
+ if chosenBuildPhase == .sources && !compilerFlags.isEmpty {
+ settings["COMPILER_FLAGS"] = compilerFlags
}
if !attributes.isEmpty {
settings["ATTRIBUTES"] = attributes
}
-
- if chosenBuildPhase == .resources && !targetSource.resourceTags.isEmpty {
- settings["ASSET_TAGS"] = targetSource.resourceTags
+
+ if chosenBuildPhase == .resources && !assetTags.isEmpty {
+ settings["ASSET_TAGS"] = assetTags
}
let buildFile = PBXBuildFile(file: fileReference, settings: settings.isEmpty ? nil : settings)
@@ -226,53 +249,22 @@ class SourceGenerator {
}
/// returns a default build phase for a given path. This is based off the filename
- private func getDefaultBuildPhase(for path: Path, targetType: PBXProductType) -> TargetSource.BuildPhase? {
+ private func getDefaultBuildPhase(for path: Path, targetType: PBXProductType) -> BuildPhaseSpec? {
if path.lastComponent == "Info.plist" {
return nil
}
+ if let buildPhase = getFileType(path: path)?.buildPhase {
+ return buildPhase
+ }
if let fileExtension = path.extension {
switch fileExtension {
- case "swift",
- "m",
- "mm",
- "cpp",
- "c",
- "cc",
- "S",
- "xcdatamodeld",
- "xcmappingmodel",
- "intentdefinition",
- "metal",
- "mlmodel",
- "rcproject":
- return .sources
- case "h",
- "hh",
- "hpp",
- "ipp",
- "tpp",
- "hxx",
- "def":
- return .headers
case "modulemap":
guard targetType == .staticLibrary else { return nil }
- return .copyFiles(TargetSource.BuildPhase.CopyFilesSettings(
+ return .copyFiles(BuildPhaseSpec.CopyFilesSettings(
destination: .productsDirectory,
subpath: "include/$(PRODUCT_NAME)",
phaseOrder: .preCompile
))
- case "framework":
- return .frameworks
- case "xpc":
- return .copyFiles(.xpcServices)
- case "xcconfig",
- "entitlements",
- "gpx",
- "lproj",
- "xcfilelist",
- "apns",
- "pch":
- return nil
default:
return .resources
}
@@ -414,13 +406,24 @@ class SourceGenerator {
let children = try getSourceChildren(targetSource: targetSource, dirPath: path, excludePaths: excludePaths, includePaths: includePaths)
let createIntermediateGroups = targetSource.createIntermediateGroups ?? project.options.createIntermediateGroups
+ let nonLocalizedChildren = children.filter { $0.extension != "lproj" }
- let directories = children
- .filter { $0.isDirectory && !Xcode.isDirectoryFileWrapper(path: $0) && $0.extension != "lproj" }
+ let directories = nonLocalizedChildren
+ .filter {
+ if let fileType = getFileType(path: $0) {
+ return !fileType.file
+ } else {
+ return $0.isDirectory && !Xcode.isDirectoryFileWrapper(path: $0)
+ }
+ }
- let filePaths = children
- .filter { $0.isFile || $0.isDirectory && $0.extension != "lproj"
- && Xcode.isDirectoryFileWrapper(path: $0)
+ let filePaths = nonLocalizedChildren
+ .filter {
+ if let fileType = getFileType(path: $0) {
+ return fileType.file
+ } else {
+ return $0.isFile || $0.isDirectory && Xcode.isDirectoryFileWrapper(path: $0)
+ }
}
let localisedDirectories = children
@@ -576,7 +579,7 @@ class SourceGenerator {
rootGroups.insert(fileReference)
}
- let buildPhase: TargetSource.BuildPhase?
+ let buildPhase: BuildPhaseSpec?
if let targetBuildPhase = targetSource.buildPhase {
buildPhase = targetBuildPhase
} else {
diff --git a/Tests/Fixtures/TestProject/App_iOS/Resource.abc b/Tests/Fixtures/TestProject/App_iOS/Resource.abc
new file mode 100644
index 000000000..e69de29bb
diff --git a/Tests/Fixtures/TestProject/App_iOS/Resource.abcd/File.json b/Tests/Fixtures/TestProject/App_iOS/Resource.abcd/File.json
new file mode 100644
index 000000000..e69de29bb
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 7fe07ec4b..96e72c628 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -467,6 +467,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 01E6934B571B91EAAFF0EDCB /* Resource.abc */ = {isa = PBXFileReference; path = Resource.abc; sourceTree = ""; };
020E4DA91C9132845CAFDC5D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; };
039F208D1138598CE060F140 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
03D6D1E34022DA9524E5B38D /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; };
@@ -495,6 +496,7 @@
2A5F527F2590C14956518174 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; };
2E1E747C7BC434ADB80CC269 /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; };
2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftFileInDotPath.swift; sourceTree = ""; };
+ 325F18855099386B08DD309B /* Resource.abcd */ = {isa = PBXFileReference; path = Resource.abcd; sourceTree = ""; };
33F6DCDC37D2E66543D4965D /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
34F13B632328979093CE6056 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; };
@@ -726,6 +728,8 @@
BF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */,
C7809CE9FE9852C2AA87ACE5 /* module.modulemap */,
553D289724905857912C7A1D /* outputList.xcfilelist */,
+ 01E6934B571B91EAAFF0EDCB /* Resource.abc */,
+ 325F18855099386B08DD309B /* Resource.abcd */,
8AF20308873AEEEC4D8C45D1 /* Settings.bundle */,
0704B6CAFBB53E0EBB08F6B3 /* ViewController.swift */,
);
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index fe352a0c8..793b31718 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -11,6 +11,11 @@ options:
groupSortPosition: top
preGenCommand: echo "This is a pre-gen command"
postGenCommand: scripts/script.sh
+ fileTypes:
+ abc:
+ buildPhase: none
+ abcd:
+ buildPhase: none
fileGroups:
- Configs
- FileGroup
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 82e5a1826..26635e76c 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -1110,6 +1110,12 @@ class SpecLoadingTests: XCTestCase {
watchOS: "3.0",
macOS: "10.12.1"
),
+ fileTypes: ["abc": FileType(
+ file: false,
+ buildPhase: .sources,
+ attributes: ["a1", "a2"],
+ resourceTags: ["r1", "r2"],
+ compilerFlags: ["c1", "c2"])],
findCarthageFrameworks: true,
preGenCommand: "swiftgen",
postGenCommand: "pod install"
@@ -1125,6 +1131,13 @@ class SpecLoadingTests: XCTestCase {
"findCarthageFrameworks": true,
"preGenCommand": "swiftgen",
"postGenCommand": "pod install",
+ "fileTypes": ["abc": [
+ "file": false,
+ "buildPhase": "sources",
+ "attributes": ["a1", "a2"],
+ "resourceTags": ["r1", "r2"],
+ "compilerFlags": ["c1", "c2"],
+ ]]
]]
let parsedSpec = try getProjectSpec(dictionary)
try expect(parsedSpec) == expected
diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
index 162ac17cf..2a38a7f30 100644
--- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
@@ -602,7 +602,7 @@ class SourceGeneratorTests: XCTestCase {
let target = Target(name: "Test", type: .framework, platform: .iOS, sources: [
TargetSource(path: "A", buildPhase: .resources),
- TargetSource(path: "B", buildPhase: TargetSource.BuildPhase.none),
+ TargetSource(path: "B", buildPhase: BuildPhaseSpec.none),
TargetSource(path: "C", buildPhase: nil),
])
let project = Project(basePath: directoryPath, name: "Test", targets: [target])
@@ -614,11 +614,11 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFile(paths: ["A", "Info.plist"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "file.xcconfig"], buildPhase: .resources)
- try pbxProj.expectFile(paths: ["B", "file.swift"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["B", "file.xcassets"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["B", "file.h"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["B", "Info.plist"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["B", "file.xcconfig"], buildPhase: TargetSource.BuildPhase.none)
+ try pbxProj.expectFile(paths: ["B", "file.swift"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["B", "file.xcassets"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["B", "file.h"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["B", "Info.plist"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["B", "file.xcconfig"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["C", "file.swift"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["C", "file.m"], buildPhase: .sources)
@@ -633,16 +633,16 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFile(paths: ["C", "file.tpp"], buildPhase: .headers)
try pbxProj.expectFile(paths: ["C", "file.hxx"], buildPhase: .headers)
try pbxProj.expectFile(paths: ["C", "file.def"], buildPhase: .headers)
- try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["C", "file.entitlements"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["C", "file.gpx"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["C", "file.apns"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: TargetSource.BuildPhase.none)
- try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: TargetSource.BuildPhase.none)
+ try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["C", "file.entitlements"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["C", "file.gpx"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["C", "file.apns"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["C", "file.xcconfig"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["C", "file.xcassets"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["C", "file.123"], buildPhase: .resources)
- try pbxProj.expectFile(paths: ["C", "Info.plist"], buildPhase: TargetSource.BuildPhase.none)
+ try pbxProj.expectFile(paths: ["C", "Info.plist"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["C", "file.metal"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["C", "file.mlmodel"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["C", "Intent.intentdefinition"], buildPhase: .sources)
@@ -654,6 +654,57 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFile(paths: ["C", "WithPeriod2.0", "file.swift"], buildPhase: .sources)
}
+ $0.it("sets file type properties") {
+ let directories = """
+ A:
+ - file.resource1
+ - file.source1
+ - file.abc:
+ - file.a
+ - file.exclude1
+ - file.unphased1
+ - ignored.swift
+ """
+ try createDirectories(directories)
+
+ let target = Target(name: "Test", type: .framework, platform: .iOS, sources: [
+ TargetSource(path: "A"),
+ ])
+ let project = Project(basePath: directoryPath, name: "Test", targets: [target], options: .init(fileTypes: [
+ "abc": FileType(buildPhase: .sources),
+ "source1": FileType(buildPhase: .sources, attributes: ["a1", "a2"], resourceTags: ["r1", "r2"], compilerFlags: ["-c1", "-c2"]),
+ "resource1": FileType(buildPhase: .resources, attributes: ["a1", "a2"], resourceTags: ["r1", "r2"], compilerFlags: ["-c1", "-c2"]),
+ "unphased1": FileType(buildPhase: BuildPhaseSpec.none),
+ "swift": FileType(buildPhase: .resources),
+ ]))
+
+ let pbxProj = try project.generatePbxProj()
+ try pbxProj.expectFile(paths: ["A", "file.abc"], buildPhase: .sources)
+ try pbxProj.expectFile(paths: ["A", "file.source1"], buildPhase: .sources)
+ try pbxProj.expectFile(paths: ["A", "file.resource1"], buildPhase: .resources)
+ try pbxProj.expectFile(paths: ["A", "file.unphased1"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["A", "ignored.swift"], buildPhase: .resources)
+
+ do {
+ let fileReference = try unwrap(pbxProj.getFileReference(paths: ["A", "file.resource1"], names: ["A", "file.resource1"]))
+ let buildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file === fileReference }))
+ let settings = NSDictionary(dictionary: buildFile.settings ?? [:])
+ try expect(settings) == [
+ "ATTRIBUTES": ["a1", "a2"],
+ "ASSET_TAGS": ["r1", "r2"],
+ ]
+ }
+ do {
+ let fileReference = try unwrap(pbxProj.getFileReference(paths: ["A", "file.source1"], names: ["A", "file.source1"]))
+ let buildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file === fileReference }))
+ let settings = NSDictionary(dictionary: buildFile.settings ?? [:])
+ try expect(settings) == [
+ "ATTRIBUTES": ["a1", "a2"],
+ "COMPILER_FLAGS": "-c1 -c2",
+ ]
+ }
+ }
+
$0.it("duplicate TargetSource is included once in sources build phase") {
let directories = """
Sources:
@@ -1084,7 +1135,7 @@ class SourceGeneratorTests: XCTestCase {
extension PBXProj {
/// expect a file within groups of the paths, using optional different names
- func expectFile(paths: [String], names: [String]? = nil, buildPhase: TargetSource.BuildPhase? = nil, file: String = #file, line: Int = #line) throws {
+ func expectFile(paths: [String], names: [String]? = nil, buildPhase: BuildPhaseSpec? = nil, file: String = #file, line: Int = #line) throws {
guard let fileReference = getFileReference(paths: paths, names: names ?? paths) else {
var error = "Could not find file at path \(paths.joined(separator: "/").quoted)"
if let names = names, names != paths {
From 142f84429d42fbd72fd8aa9d3410ac726fcdb214 Mon Sep 17 00:00:00 2001
From: Kiran Thorat
Date: Tue, 4 Aug 2020 16:09:31 +1000
Subject: [PATCH 002/284] Fixed issue of optionally excluding swift package
from target dependencies. (#920)
fixed typo and updated changelog for fixes
---
CHANGELOG.md | 3 ++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 6 +++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e8c39616..16b63336f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,7 +8,8 @@
#### Fixed
- Treat all directories with known UTI as file wrapper. [#896](https://github.com/yonaskolb/XcodeGen/pull/896) @KhaosT
-- Generated chemes for application extensions now contain `wasCreatedForAppExtension = YES`. [#898](https://github.com/yonaskolb/XcodeGen/issues/898) @muizidn
+- Generated schemes for application extensions now contain `wasCreatedForAppExtension = YES`. [#898](https://github.com/yonaskolb/XcodeGen/issues/898) @muizidn
+- Issue of excluding swift package from target dependencies. [#920](https://github.com/yonaskolb/XcodeGen/pull/920) @k-thorat
#### Internal
- Updated to XcodeProj 7.13.0 [#908](https://github.com/yonaskolb/XcodeGen/pull/908) @brentleyjones
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index c0c61c74b..aace13b26 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -865,7 +865,11 @@ public class PBXProjGenerator {
let packageDependency = addObject(
XCSwiftPackageProductDependency(productName: productName, package: packageReference)
)
- packageDependencies.append(packageDependency)
+
+ // Add package dependency if linking is true.
+ if dependency.link ?? true {
+ packageDependencies.append(packageDependency)
+ }
let link = dependency.link ?? (target.type != .staticLibrary)
if link {
From 0bed4b835fd5629e46df4b17cfbd6325624a6116 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Tue, 4 Aug 2020 16:10:34 +1000
Subject: [PATCH 003/284] Update CHANGELOG.md
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 16b63336f..cfc5b671b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,7 @@
#### Fixed
- Treat all directories with known UTI as file wrapper. [#896](https://github.com/yonaskolb/XcodeGen/pull/896) @KhaosT
- Generated schemes for application extensions now contain `wasCreatedForAppExtension = YES`. [#898](https://github.com/yonaskolb/XcodeGen/issues/898) @muizidn
-- Issue of excluding swift package from target dependencies. [#920](https://github.com/yonaskolb/XcodeGen/pull/920) @k-thorat
+- Allow package dependencies to use `link: false` [#920](https://github.com/yonaskolb/XcodeGen/pull/920) @k-thorat
#### Internal
- Updated to XcodeProj 7.13.0 [#908](https://github.com/yonaskolb/XcodeGen/pull/908) @brentleyjones
From f631b6427cde515a37e95d760bda88a4747b2505 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Tue, 4 Aug 2020 20:34:24 +1000
Subject: [PATCH 004/284] Update to 2.17.0
---
CHANGELOG.md | 4 ++++
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cfc5b671b..3014fbb0b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Next Version
+## 2.17.0
+
#### Added
- Added `options.fileTypes` which lets you set cross project defaults for certain file extensions [#914](https://github.com/yonaskolb/XcodeGen/pull/914) @yonaskolb
- Added `onlyCopyFilesOnInstall` option to targets for the Embed Files build phase. [#912](https://github.com/yonaskolb/XcodeGen/pull/912) @jsorge
@@ -14,6 +16,8 @@
#### Internal
- Updated to XcodeProj 7.13.0 [#908](https://github.com/yonaskolb/XcodeGen/pull/908) @brentleyjones
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.16.0...2.17.0)
+
## 2.16.0
#### Added
diff --git a/Makefile b/Makefile
index bbf78afa5..904dd784e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.16.0
+VERSION = 2.17.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 0acf5a5d5..ca794af20 100644
--- a/README.md
+++ b/README.md
@@ -108,7 +108,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.16.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.17.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index d060e649a..944091cdc 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.16.0")
+let version = Version("2.17.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From 9271d8acf50e79580e7183fc80af2aeef772d7eb Mon Sep 17 00:00:00 2001
From: Pavlos Vinieratos
Date: Wed, 5 Aug 2020 12:04:15 +0200
Subject: [PATCH 005/284] Update Examples.md (#923)
---
Docs/Examples.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/Docs/Examples.md b/Docs/Examples.md
index d10f8663d..07a9b04f0 100644
--- a/Docs/Examples.md
+++ b/Docs/Examples.md
@@ -8,3 +8,4 @@ These are a bunch of real world examples of XcodeGen project specs. Feel free to
- [atelier-socle/AppRepositoryTemplate](https://github.com/atelier-socle/AppRepositoryTemplate/blob/master/project.yml)
- [atelier-socle/FrameworkRepositoryTemplate](https://github.com/atelier-socle/FrameworkRepositoryTemplate/blob/master/project.yml)
- [scelis/XcodeGen-TestStickers](https://github.com/scelis/XcodeGen-TestStickers/blob/master/project.yml)
+- [minvws/nl-covid19-notification-app-ios](https://github.com/minvws/nl-covid19-notification-app-ios/blob/master/project.yml)
From 727a648623fbfe0934caf1a58bc6d4807a8253bc Mon Sep 17 00:00:00 2001
From: Cody Vandermyn <721474+codeman9@users.noreply.github.com>
Date: Wed, 5 Aug 2020 03:05:23 -0700
Subject: [PATCH 006/284] Add ability to skip the entire test target (#916)
* add ability to skip the entire test target
* when skipped is true, add it to the toJSONValue dictionary
* Add changelog entry
---
CHANGELOG.md | 2 ++
Docs/ProjectSpec.md | 1 +
Sources/ProjectSpec/Scheme.swift | 8 ++++++++
Sources/XcodeGenKit/SchemeGenerator.swift | 2 +-
Tests/ProjectSpecTests/SpecLoadingTests.swift | 2 ++
5 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3014fbb0b..af809dba8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Next Version
+- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
+
## 2.17.0
#### Added
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 9853d5cdb..290adbc4f 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -793,6 +793,7 @@ A multiline script can be written using the various YAML multiline methods, for
- [x] **name**: **String** - The name of the target
- [ ] **parallelizable**: **Bool** - Whether to run tests in parallel. Defaults to false
- [ ] **randomExecutionOrder**: **Bool** - Whether to run tests in a random order. Defaults to false
+- [ ] **skipped**: **Bool** - Whether to skip all of the test target tests. Defaults to false
- [ ] **skippedTests**: **[String]** - List of tests in the test target to skip. Defaults to empty.
### Archive Action
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index 986268aa8..1921fd3f1 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -172,17 +172,20 @@ public struct Scheme: Equatable {
public let targetReference: TargetReference
public var randomExecutionOrder: Bool
public var parallelizable: Bool
+ public var skipped: Bool
public var skippedTests: [String]
public init(
targetReference: TargetReference,
randomExecutionOrder: Bool = randomExecutionOrderDefault,
parallelizable: Bool = parallelizableDefault,
+ skipped: Bool = false,
skippedTests: [String] = []
) {
self.targetReference = targetReference
self.randomExecutionOrder = randomExecutionOrder
self.parallelizable = parallelizable
+ self.skipped = skipped
self.skippedTests = skippedTests
}
@@ -191,6 +194,7 @@ public struct Scheme: Equatable {
targetReference = try TargetReference(value)
randomExecutionOrder = false
parallelizable = false
+ skipped = false
skippedTests = []
} catch {
fatalError(SpecParsingError.invalidTargetReference(value).description)
@@ -474,6 +478,7 @@ extension Scheme.Test.TestTarget: JSONObjectConvertible {
targetReference = try TargetReference(jsonDictionary.json(atKeyPath: "name"))
randomExecutionOrder = jsonDictionary.json(atKeyPath: "randomExecutionOrder") ?? Scheme.Test.TestTarget.randomExecutionOrderDefault
parallelizable = jsonDictionary.json(atKeyPath: "parallelizable") ?? Scheme.Test.TestTarget.parallelizableDefault
+ skipped = jsonDictionary.json(atKeyPath: "skipped") ?? false
skippedTests = jsonDictionary.json(atKeyPath: "skippedTests") ?? []
}
}
@@ -495,6 +500,9 @@ extension Scheme.Test.TestTarget: JSONEncodable {
if parallelizable != Scheme.Test.TestTarget.parallelizableDefault {
dict["parallelizable"] = parallelizable
}
+ if skipped {
+ dict["skipped"] = skipped
+ }
return dict
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 3eacef4aa..f44bf4e9b 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -183,7 +183,7 @@ public class SchemeGenerator {
let testables = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuilEntries in
XCScheme.TestableReference(
- skipped: false,
+ skipped: testTarget.skipped,
parallelizable: testTarget.parallelizable,
randomExecutionOrdering: testTarget.randomExecutionOrder,
buildableReference: testBuilEntries.buildableReference,
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 26635e76c..047789df2 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -782,6 +782,7 @@ class SpecLoadingTests: XCTestCase {
[
"name": "ExternalProject/Target2",
"parallelizable": true,
+ "skipped": true,
"randomExecutionOrder": true,
"skippedTests": ["Test/testExample()"],
],
@@ -826,6 +827,7 @@ class SpecLoadingTests: XCTestCase {
targetReference: "ExternalProject/Target2",
randomExecutionOrder: true,
parallelizable: true,
+ skipped: true,
skippedTests: ["Test/testExample()"]
),
]
From 691ca9367753bc71a141de90e641802f07566ddd Mon Sep 17 00:00:00 2001
From: Kiran Thorat
Date: Thu, 6 Aug 2020 09:13:13 +1000
Subject: [PATCH 007/284] Fixes for embedding SDK dependencies. (#922)
---
CHANGELOG.md | 3 +++
Sources/XcodeGenKit/PBXProjGenerator.swift | 7 +++++++
.../ProjectGeneratorTests.swift | 17 ++++++++++++++++-
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index af809dba8..fe456e64b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
+#### Fixed
+- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
+
## 2.17.0
#### Added
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index aace13b26..0ac2909ef 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -827,6 +827,13 @@ public class PBXProjGenerator {
)
targetFrameworkBuildFiles.append(buildFile)
+ if dependency.embed == true {
+ let embedFile = addObject(
+ PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
+ )
+ copyFrameworksReferences.append(embedFile)
+ }
+
case .carthage(let findFrameworks, let linkType):
let findFrameworks = findFrameworks ?? project.options.findCarthageFrameworks
let allDependencies = findFrameworks
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index b48e2b964..1f2e329ea 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -559,6 +559,9 @@ class ProjectGeneratorTests: XCTestCase {
Dependency(type: .package(product: "RxCocoa"), reference: "RxSwift"),
Dependency(type: .package(product: "RxRelay"), reference: "RxSwift"),
+ // Validate - Do not link package
+ Dependency(type: .package(product: "KeychainAccess"), reference: "KeychainAccess", link: false),
+
// Statically linked, so don't embed into test
Dependency(type: .target, reference: staticLibrary.name),
@@ -679,25 +682,37 @@ class ProjectGeneratorTests: XCTestCase {
iosFrameworkB.filename,
])
+ let XCTestPath = "Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework"
+ let GXToolsPath = "Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/GXTools.framework"
+ let XCTAutomationPath = "Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework"
let stickerPack = Target(
name: "MyStickerApp",
type: .stickerPack,
platform: .iOS,
dependencies: [
Dependency(type: .sdk(root: nil), reference: "NotificationCenter.framework"),
- Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: "Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework"),
+ Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: XCTestPath),
+ Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: GXToolsPath, embed: true),
+ Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: XCTAutomationPath, embed: true, codeSign: true),
]
)
expectedResourceFiles[stickerPack.name] = nil
expectedLinkedFiles[stickerPack.name] = Set([
"XCTest.framework",
"NotificationCenter.framework",
+ "GXTools.framework",
+ "XCTAutomationSupport.framework"
+ ])
+ expectedEmbeddedFrameworks[stickerPack.name] = Set([
+ "GXTools.framework",
+ "XCTAutomationSupport.framework"
])
let targets = [app, iosFrameworkZ, iosFrameworkX, staticLibrary, resourceBundle, iosFrameworkA, iosFrameworkB, appTest, appTestWithoutTransitive, stickerPack]
let packages: [String: SwiftPackage] = [
"RxSwift": .remote(url: "https://github.com/ReactiveX/RxSwift", versionRequirement: .upToNextMajorVersion("5.1.1")),
+ "KeychainAccess": .remote(url: "https://github.com/kishikawakatsumi/KeychainAccess", versionRequirement: .upToNextMajorVersion("4.2.0"))
]
let project = Project(
From dddb0fc1290d2c07ce988bee00e4c5a20b6f8f81 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Thu, 6 Aug 2020 09:13:41 +1000
Subject: [PATCH 008/284] Update CHANGELOG.md
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fe456e64b..e0cb51a24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
## Next Version
+#### Added
- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
#### Fixed
From 2d30bb1db51aba4e1ecebafb3b1f7abeceb13db6 Mon Sep 17 00:00:00 2001
From: tokizo <37968814+tokizuoh@users.noreply.github.com>
Date: Sun, 9 Aug 2020 22:11:32 +0900
Subject: [PATCH 009/284] fix typo :) (#926)
---
Docs/Usage.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Docs/Usage.md b/Docs/Usage.md
index 597bf8a4e..a746650f4 100644
--- a/Docs/Usage.md
+++ b/Docs/Usage.md
@@ -87,7 +87,7 @@ targets:
```
### xcodebuild environment variables
-You can also always overide any build settings on CI when building by passing specific build settings to xcodebuild like so:
+You can also always override any build settings on CI when building by passing specific build settings to xcodebuild like so:
```sh
DEVELOPMENT_TEAM=XXXXXXXXX xcodebuild ...
From d4c9f6226db95d0ec7c71b66017cfeb9eefc9bc4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dar=C3=ADo=20Here=C3=B1=C3=BA?=
Date: Mon, 10 Aug 2020 20:38:11 -0300
Subject: [PATCH 010/284] Fix typos (#930)
---
Docs/ProjectSpec.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 290adbc4f..b5c78adf5 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -45,7 +45,7 @@ You can also use environment variables in your configuration file, by using `${S
- [ ] **settings**: **[Settings](#settings)** - Project specific settings. Default base and config type settings will be applied first before any settings defined here
- [ ] **settingGroups**: **[Setting Groups](#setting-groups)** - Setting groups mapped by name
- [ ] **targets**: **[String: [Target](#target)]** - The list of targets in the project mapped by name
-- [ ] **fileGroups**: **[String]** - A list of paths to add to the root of the project. These aren't files that will be included in your targets, but that you'd like to include in the project hierachy anyway. For example a folder of xcconfig files that aren't already added by any target sources, or a Readme file.
+- [ ] **fileGroups**: **[String]** - A list of paths to add to the root of the project. These aren't files that will be included in your targets, but that you'd like to include in the project hierarchy anyway. For example a folder of xcconfig files that aren't already added by any target sources, or a Readme file.
- [ ] **schemes**: **[Scheme](#scheme)** - A list of schemes by name. This allows more control over what is found in [Target Scheme](#target-scheme)
- [ ] **targetTemplates**: **[String: [Target Template](#target-template)]** - a list of targets that can be used as templates for actual targets which reference them via a `template` property. They can be used to extract common target settings. Works great in combination with `include`.
- [ ] **packages**: **[String: [Swift Package](#swift-package)]** - a map of Swift packages by name.
@@ -73,7 +73,7 @@ include:
By default specs are merged additively. That is for every value:
-- if existing value and new value are both dictionaries merge them and continue down the hierachy
+- if existing value and new value are both dictionaries merge them and continue down the hierarchy
- if existing value and new value are both an array then add the new value to the end of the array
- otherwise replace the existing value with the new value
From 410f644a2f643f14f79d397edc70b3430a624fbd Mon Sep 17 00:00:00 2001
From: tokizo <37968814+tokizuoh@users.noreply.github.com>
Date: Tue, 11 Aug 2020 14:15:27 +0900
Subject: [PATCH 011/284] Delete unnecessary processes. (#927) (#928)
* Delete unnecessary processes.
* move value assignment up above
---
Sources/ProjectSpec/TargetSource.swift | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/Sources/ProjectSpec/TargetSource.swift b/Sources/ProjectSpec/TargetSource.swift
index 2a75f3bf4..7ad5e4aa4 100644
--- a/Sources/ProjectSpec/TargetSource.swift
+++ b/Sources/ProjectSpec/TargetSource.swift
@@ -122,18 +122,13 @@ extension TargetSource: JSONEncodable {
"buildPhase": buildPhase?.toJSONValue(),
"createIntermediateGroups": createIntermediateGroups,
"resourceTags": resourceTags,
+ "path": path,
]
if optional != TargetSource.optionalDefault {
dict["optional"] = optional
}
- if dict.count == 0 {
- return path
- }
-
- dict["path"] = path
-
return dict
}
}
From 1d2a28490fe94e41d5ffd3a9827c4d3591faeeb8 Mon Sep 17 00:00:00 2001
From: Bartosz Polaczyk
Date: Wed, 12 Aug 2020 08:13:47 +0200
Subject: [PATCH 012/284] Add custom lldinit for a scheme (#929)
* Add customLLDBInit
* Add changelog info to a valid bucket
* Update PR number
* Add fixture tests
Co-authored-by: Bartosz Polaczyk
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 ++
Sources/ProjectSpec/Scheme.swift | 19 +++++++++++++++++--
Sources/XcodeGenKit/SchemeGenerator.swift | 6 ++++--
Tests/Fixtures/TestProject/.lldbinit | 0
.../xcschemes/App_Scheme.xcscheme | 6 ++++--
Tests/Fixtures/TestProject/project.yml | 2 ++
.../SchemeGeneratorTests.swift | 5 ++++-
8 files changed, 34 insertions(+), 7 deletions(-)
create mode 100644 Tests/Fixtures/TestProject/.lldbinit
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e0cb51a24..0ca8ae315 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@
#### Added
- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
+- Added ability to set custom LLDBInit scripts for launch and test schemes [#929](https://github.com/yonaskolb/XcodeGen/pull/929) @polac24
#### Fixed
- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index b5c78adf5..322a4e2d1 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -782,12 +782,14 @@ A multiline script can be written using the various YAML multiline methods, for
### Run Action
- [ ] **executable**: **String** - the name of the target to launch as an executable. Defaults to the first build target in the scheme
+- [ ] **customLLDBInit**: **String** - the absolute path to the custom `.lldbinit` file
### Test Action
- [ ] **gatherCoverageData**: **Bool** - a boolean that indicates if this scheme should gather coverage data. This defaults to false
- [ ] **coverageTargets**: **[String]** - a list of targets to gather code coverage. Each entry can either be a simple string, or a string using [Project Reference](#project-reference)
- [ ] **targets**: **[[Test Target](#test-target)]** - a list of targets to test. Each entry can either be a simple string, or a [Test Target](#test-target)
+- [ ] **customLLDBInit**: **String** - the absolute path to the custom `.lldbinit` file
#### Test Target
- [x] **name**: **String** - The name of the target
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index 1921fd3f1..d872129d0 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -113,6 +113,7 @@ public struct Scheme: Equatable {
public var debugEnabled: Bool
public var simulateLocation: SimulateLocation?
public var executable: String?
+ public var customLLDBInit: String?
public init(
config: String,
@@ -128,7 +129,8 @@ public struct Scheme: Equatable {
askForAppToLaunch: Bool? = nil,
launchAutomaticallySubstyle: String? = nil,
debugEnabled: Bool = debugEnabledDefault,
- simulateLocation: SimulateLocation? = nil
+ simulateLocation: SimulateLocation? = nil,
+ customLLDBInit: String? = nil
) {
self.config = config
self.commandLineArguments = commandLineArguments
@@ -143,6 +145,7 @@ public struct Scheme: Equatable {
self.launchAutomaticallySubstyle = launchAutomaticallySubstyle
self.debugEnabled = debugEnabled
self.simulateLocation = simulateLocation
+ self.customLLDBInit = customLLDBInit
}
}
@@ -163,6 +166,7 @@ public struct Scheme: Equatable {
public var language: String?
public var region: String?
public var debugEnabled: Bool
+ public var customLLDBInit: String?
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
public static let randomExecutionOrderDefault = false
@@ -216,7 +220,8 @@ public struct Scheme: Equatable {
environmentVariables: [XCScheme.EnvironmentVariable] = [],
language: String? = nil,
region: String? = nil,
- debugEnabled: Bool = debugEnabledDefault
+ debugEnabled: Bool = debugEnabledDefault,
+ customLLDBInit: String? = nil
) {
self.config = config
self.gatherCoverageData = gatherCoverageData
@@ -230,6 +235,7 @@ public struct Scheme: Equatable {
self.language = language
self.region = region
self.debugEnabled = debugEnabled
+ self.customLLDBInit = customLLDBInit
}
public var shouldUseLaunchSchemeArgsEnv: Bool {
@@ -375,6 +381,7 @@ extension Scheme.Run: JSONObjectConvertible {
if let askLaunch: Bool = jsonDictionary.json(atKeyPath: "askForAppToLaunch") {
askForAppToLaunch = askLaunch
}
+ customLLDBInit = jsonDictionary.json(atKeyPath: "customLLDBInit")
}
}
@@ -408,6 +415,9 @@ extension Scheme.Run: JSONEncodable {
if let simulateLocation = simulateLocation {
dict["simulateLocation"] = simulateLocation.toJSONValue()
}
+ if let customLLDBInit = customLLDBInit {
+ dict["customLLDBInit"] = customLLDBInit
+ }
return dict
}
}
@@ -439,6 +449,7 @@ extension Scheme.Test: JSONObjectConvertible {
language = jsonDictionary.json(atKeyPath: "language")
region = jsonDictionary.json(atKeyPath: "region")
debugEnabled = jsonDictionary.json(atKeyPath: "debugEnabled") ?? Scheme.Test.debugEnabledDefault
+ customLLDBInit = jsonDictionary.json(atKeyPath: "customLLDBInit")
}
}
@@ -468,6 +479,10 @@ extension Scheme.Test: JSONEncodable {
dict["debugEnabled"] = debugEnabled
}
+ if let customLLDBInit = customLLDBInit {
+ dict["customLLDBInit"] = customLLDBInit
+ }
+
return dict
}
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index f44bf4e9b..111043249 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -219,7 +219,8 @@ public class SchemeGenerator {
commandlineArguments: testCommandLineArgs,
environmentVariables: testVariables,
language: scheme.test?.language,
- region: scheme.test?.region
+ region: scheme.test?.region,
+ customLLDBInitFile: scheme.test?.customLLDBInit
)
let allowLocationSimulation = scheme.run?.simulateLocation?.allow ?? true
@@ -250,7 +251,8 @@ public class SchemeGenerator {
environmentVariables: launchVariables,
language: scheme.run?.language,
region: scheme.run?.region,
- launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle
+ launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle,
+ customLLDBInitFile: scheme.run?.customLLDBInit
)
let profileAction = XCScheme.ProfileAction(
diff --git a/Tests/Fixtures/TestProject/.lldbinit b/Tests/Fixtures/TestProject/.lldbinit
new file mode 100644
index 000000000..e69de29bb
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
index 55f0c6c92..16b808cbe 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
@@ -28,7 +28,8 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO"
- shouldUseLaunchSchemeArgsEnv = "YES">
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ customLLDBInitFile = "${SRCROOT}/.lldbinit">
@@ -74,7 +75,8 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
- allowLocationSimulation = "YES">
+ allowLocationSimulation = "YES"
+ customLLDBInitFile = "${SRCROOT}/.lldbinit">
Date: Thu, 13 Aug 2020 07:20:01 +0200
Subject: [PATCH 013/284] Update Examples.md (#931)
---
Docs/Examples.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/Docs/Examples.md b/Docs/Examples.md
index 07a9b04f0..47ce369e1 100644
--- a/Docs/Examples.md
+++ b/Docs/Examples.md
@@ -9,3 +9,4 @@ These are a bunch of real world examples of XcodeGen project specs. Feel free to
- [atelier-socle/FrameworkRepositoryTemplate](https://github.com/atelier-socle/FrameworkRepositoryTemplate/blob/master/project.yml)
- [scelis/XcodeGen-TestStickers](https://github.com/scelis/XcodeGen-TestStickers/blob/master/project.yml)
- [minvws/nl-covid19-notification-app-ios](https://github.com/minvws/nl-covid19-notification-app-ios/blob/master/project.yml)
+- [pvinis/react-native-xcodegen](https://github.com/pvinis/react-native-xcodegen/blob/master/templates)
From 80e5f095fbf62636acfa04946f3629025b2060e0 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Fri, 14 Aug 2020 00:28:28 +1000
Subject: [PATCH 014/284] Update README.md
---
README.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index ca794af20..e4e094e2c 100644
--- a/README.md
+++ b/README.md
@@ -34,10 +34,12 @@ The project spec is a YAML or JSON file that defines your targets, configuration
- ✅ Integrate **Carthage** frameworks without any work
- ✅ Export **Dependency Diagrams** to view in [Graphviz](https://www.graphviz.org)
-Given a very simple project spec file like this:
+Given an example project spec:
```yaml
name: MyProject
+include:
+ - base_spec.yml
options:
bundleIdPrefix: com.myapp
packages:
From bc51191a3a16c809627f3dc4924ba9f6eddfc0b6 Mon Sep 17 00:00:00 2001
From: Brentley Jones
Date: Sun, 16 Aug 2020 05:02:56 -0500
Subject: [PATCH 015/284] Add support for App Clips (#909)
* Add support for App Clips
Embeds App Clips into the containing app when they are a dependency.
* Patch #909 to not fail CI (#917)
Co-authored-by: Dan Fleming
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 11 +-
Sources/XcodeGenKit/PBXProjGenerator.swift | 18 +
.../TestProject/App_Clip/AppDelegate.swift | 14 +
.../AppIcon.appiconset/Contents.json | 98 +
.../Base.lproj/LaunchScreen.storyboard | 27 +
.../App_Clip/Base.lproj/Main.storyboard | 42 +
.../TestProject/App_Clip/Clip.entitlements | 12 +
.../Fixtures/TestProject/App_Clip/Info.plist | 45 +
.../TestProject/App_Clip/ViewController.swift | 15 +
.../TestProject/App_Clip_Tests/Info.plist | 22 +
.../App_Clip_Tests/TestProjectTests.swift | 26 +
.../TestProject/App_Clip_UITests/Info.plist | 22 +
.../App_Clip_UITests/TestProjectUITests.swift | 26 +
.../ProjectXcode12.xcodeproj/project.pbxproj | 7483 +++++++++++++++++
.../contents.xcworkspacedata | 7 +
.../xcshareddata/xcschemes/App_Clip.xcscheme | 114 +
.../xcschemes/App_Scheme.xcscheme | 121 +
.../xcschemes/App_iOS Production.xcscheme | 142 +
.../xcschemes/App_iOS Staging.xcscheme | 142 +
.../xcschemes/App_iOS Test.xcscheme | 142 +
.../App_iOS_With_Clip Production.xcscheme | 94 +
.../App_iOS_With_Clip Staging.xcscheme | 94 +
.../xcschemes/App_iOS_With_Clip Test.xcscheme | 94 +
.../xcshareddata/xcschemes/App_macOS.xcscheme | 94 +
.../xcschemes/App_watchOS.xcscheme | 109 +
.../xcshareddata/xcschemes/Framework.xcscheme | 120 +
.../xcshareddata/xcschemes/Tool.xcscheme | 94 +
.../xcschemes/iMessageApp.xcscheme | 94 +
.../xcschemes/iMessageExtension.xcscheme | 95 +
Tests/Fixtures/TestProject/build.sh | 9 +
.../Fixtures/TestProject/project-xcode-12.yml | 72 +
Tests/Fixtures/TestProject/project.yml | 6 +-
scripts/gen-fixtures.sh | 1 +
34 files changed, 9498 insertions(+), 8 deletions(-)
create mode 100644 Tests/Fixtures/TestProject/App_Clip/AppDelegate.swift
create mode 100644 Tests/Fixtures/TestProject/App_Clip/Assets.xcassets/AppIcon.appiconset/Contents.json
create mode 100644 Tests/Fixtures/TestProject/App_Clip/Base.lproj/LaunchScreen.storyboard
create mode 100644 Tests/Fixtures/TestProject/App_Clip/Base.lproj/Main.storyboard
create mode 100644 Tests/Fixtures/TestProject/App_Clip/Clip.entitlements
create mode 100644 Tests/Fixtures/TestProject/App_Clip/Info.plist
create mode 100644 Tests/Fixtures/TestProject/App_Clip/ViewController.swift
create mode 100644 Tests/Fixtures/TestProject/App_Clip_Tests/Info.plist
create mode 100644 Tests/Fixtures/TestProject/App_Clip_Tests/TestProjectTests.swift
create mode 100644 Tests/Fixtures/TestProject/App_Clip_UITests/Info.plist
create mode 100644 Tests/Fixtures/TestProject/App_Clip_UITests/TestProjectUITests.swift
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.xcworkspace/contents.xcworkspacedata
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme
create mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
create mode 100644 Tests/Fixtures/TestProject/project-xcode-12.yml
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0ca8ae315..bc2bc2291 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
#### Added
- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
- Added ability to set custom LLDBInit scripts for launch and test schemes [#929](https://github.com/yonaskolb/XcodeGen/pull/929) @polac24
+- Adds App Clip support. [#909](https://github.com/yonaskolb/XcodeGen/pull/909) @brentleyjones @dflems
#### Fixed
- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 322a4e2d1..50bf35ba0 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -266,17 +266,18 @@ Settings are merged in the following order: groups, base, configs.
This will provide default build settings for a certain product type. It can be any of the following:
- `application`
+- `application.on-demand-install-capable`
- `application.messages`
- `application.watchapp`
- `application.watchapp2`
- `app-extension`
+- `app-extension.intents-service`
- `app-extension.messages`
- `app-extension.messages-sticker-pack`
-- `app-extension.intents-service`
- `bundle`
-- `bundle.unit-test`
-- `bundle.ui-testing`
- `bundle.ocunit-test`
+- `bundle.ui-testing`
+- `bundle.unit-test`
- `framework`
- `instruments-package`
- `library.dynamic`
@@ -284,9 +285,9 @@ This will provide default build settings for a certain product type. It can be a
- `framework.static`
- `tool`
- `tv-app-extension`
+- `watchapp2-container`
- `watchkit-extension`
- `watchkit2-extension`
-- `watchapp2-container`
- `xcode-extension`
- `xpc-service`
- ``""`` (used for legacy targets)
@@ -296,8 +297,8 @@ This will provide default build settings for a certain product type. It can be a
This will provide default build settings for a certain platform. It can be any of the following:
- `iOS`
-- `tvOS`
- `macOS`
+- `tvOS`
- `watchOS`
**Multi Platform targets**
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 0ac2909ef..886cd70cc 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -651,6 +651,7 @@ public class PBXProjGenerator {
var copyWatchReferences: [PBXBuildFile] = []
var packageDependencies: [XCSwiftPackageProductDependency] = []
var extensions: [PBXBuildFile] = []
+ var appClips: [PBXBuildFile] = []
var carthageFrameworksToEmbed: [String] = []
let localPackageReferences: [String] = project.packages.compactMap { $0.value.isLocal ? $0.key : nil }
@@ -710,6 +711,9 @@ public class PBXProjGenerator {
if dependencyTarget.type.isExtension {
// embed app extension
extensions.append(embedFile)
+ } else if dependencyTarget.type == .onDemandInstallCapableApplication {
+ // embed app clip
+ appClips.append(embedFile)
} else if dependencyTarget.type.isFramework {
copyFrameworksReferences.append(embedFile)
} else if dependencyTarget.type.isApp && dependencyTarget.platform == .watchOS {
@@ -1084,6 +1088,20 @@ public class PBXProjGenerator {
buildPhases.append(copyFilesPhase)
}
+ if !appClips.isEmpty {
+
+ let copyFilesPhase = addObject(
+ PBXCopyFilesBuildPhase(
+ dstPath: "$(CONTENTS_FOLDER_PATH)/AppClips",
+ dstSubfolderSpec: .productsDirectory,
+ name: "Embed App Clips",
+ files: appClips
+ )
+ )
+
+ buildPhases.append(copyFilesPhase)
+ }
+
copyFrameworksReferences += getBuildFilesForPhase(.frameworks)
if !copyFrameworksReferences.isEmpty {
diff --git a/Tests/Fixtures/TestProject/App_Clip/AppDelegate.swift b/Tests/Fixtures/TestProject/App_Clip/AppDelegate.swift
new file mode 100644
index 000000000..cbe822167
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/AppDelegate.swift
@@ -0,0 +1,14 @@
+import Framework
+import UIKit
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ var window: UIWindow?
+
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+ // Override point for customization after application launch.
+ _ = FrameworkStruct()
+ return true
+ }
+}
diff --git a/Tests/Fixtures/TestProject/App_Clip/Assets.xcassets/AppIcon.appiconset/Contents.json b/Tests/Fixtures/TestProject/App_Clip/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..d8db8d65f
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "size" : "1024x1024",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Tests/Fixtures/TestProject/App_Clip/Base.lproj/LaunchScreen.storyboard b/Tests/Fixtures/TestProject/App_Clip/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 000000000..fdf3f97d1
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/App_Clip/Base.lproj/Main.storyboard b/Tests/Fixtures/TestProject/App_Clip/Base.lproj/Main.storyboard
new file mode 100644
index 000000000..42545a50d
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/Base.lproj/Main.storyboard
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/App_Clip/Clip.entitlements b/Tests/Fixtures/TestProject/App_Clip/Clip.entitlements
new file mode 100644
index 000000000..92112b0ee
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/Clip.entitlements
@@ -0,0 +1,12 @@
+
+
+
+
+ com.apple.developer.parent-application-identifiers
+
+ $(AppIdentifierPrefix)com.project.appwithclip
+
+ com.apple.security.application-groups
+ group.com.app
+
+
diff --git a/Tests/Fixtures/TestProject/App_Clip/Info.plist b/Tests/Fixtures/TestProject/App_Clip/Info.plist
new file mode 100644
index 000000000..2989640a8
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/Info.plist
@@ -0,0 +1,45 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 42.1
+ CFBundleVersion
+ 2
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/Tests/Fixtures/TestProject/App_Clip/ViewController.swift b/Tests/Fixtures/TestProject/App_Clip/ViewController.swift
new file mode 100644
index 000000000..a44b02a48
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip/ViewController.swift
@@ -0,0 +1,15 @@
+import Contacts
+import UIKit
+
+class ViewController: UIViewController {
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ _ = CNContact()
+ }
+
+ override func didReceiveMemoryWarning() {
+ super.didReceiveMemoryWarning()
+ // Dispose of any resources that can be recreated.
+ }
+}
diff --git a/Tests/Fixtures/TestProject/App_Clip_Tests/Info.plist b/Tests/Fixtures/TestProject/App_Clip_Tests/Info.plist
new file mode 100644
index 000000000..6c6c23c43
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip_Tests/Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Tests/Fixtures/TestProject/App_Clip_Tests/TestProjectTests.swift b/Tests/Fixtures/TestProject/App_Clip_Tests/TestProjectTests.swift
new file mode 100644
index 000000000..f5c77a544
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip_Tests/TestProjectTests.swift
@@ -0,0 +1,26 @@
+import XCTest
+
+class TestProjectTests: XCTestCase {
+
+ override func setUp() {
+ super.setUp()
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDown() {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ super.tearDown()
+ }
+
+ func testExample() {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ }
+
+ func testPerformanceExample() {
+ // This is an example of a performance test case.
+ measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+}
diff --git a/Tests/Fixtures/TestProject/App_Clip_UITests/Info.plist b/Tests/Fixtures/TestProject/App_Clip_UITests/Info.plist
new file mode 100644
index 000000000..6c6c23c43
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip_UITests/Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Tests/Fixtures/TestProject/App_Clip_UITests/TestProjectUITests.swift b/Tests/Fixtures/TestProject/App_Clip_UITests/TestProjectUITests.swift
new file mode 100644
index 000000000..357046659
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_Clip_UITests/TestProjectUITests.swift
@@ -0,0 +1,26 @@
+import XCTest
+
+class TestProjectUITests: XCTestCase {
+
+ override func setUp() {
+ super.setUp()
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDown() {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ super.tearDown()
+ }
+
+ func testExample() {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ }
+
+ func testPerformanceExample() {
+ // This is an example of a performance test case.
+ measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+}
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..509316aae
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
@@ -0,0 +1,7483 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 51;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 9C27C8C394ADD16FDCF6E624 /* SuperTarget */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 70FED818DB797FCDC7929DBC /* Build configuration list for PBXAggregateTarget "SuperTarget" */;
+ buildPhases = (
+ D4BA2D61D3DC727DA6E90F7E /* MyScript */,
+ );
+ dependencies = (
+ 8DF064FE23E39B733B75994D /* PBXTargetDependency */,
+ 53E5D1FE14ECF98F9F9729CF /* PBXTargetDependency */,
+ );
+ name = SuperTarget;
+ productName = SuperTarget;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 0035E2ED473E71B573FA73CF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 021F11A2B76A01ED4113286B /* ViewController.swift */; };
+ 00412000C589181F73BB9C88 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1342A225B1FB5CCDE2D8C511 /* StaticLibrary.swift */; };
+ 0060461B613150BA7D9CAF95 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F24135F7E2026D8D80F8B919 /* MyBundle.bundle */; };
+ 04141410CA15B3FBC091FFEE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE31326E32ED51CB02C58E9D /* AppDelegate.swift */; };
+ 064BCA54DD18E6F5EAFE5C1C /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7E1427FBA94B073C3FD2830A /* Interface.storyboard */; };
+ 068A307AAD3FDB71E245CF4B /* App_Clip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = C22BEDE0B2217312642FADA2 /* App_Clip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 078DC5844DEA2DB6F020D455 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ 092201CC0E7C18615C0B212A /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EC670E53BFAA6F61C02BE82 /* main.swift */; };
+ 0A14BD0F9B22C84677FD7D6F /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 51E2D479CB960CB44EB545C6 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 0A6862249B5F9D544A774770 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98B17D464B46DAC8911014D5 /* module.modulemap */; };
+ 0C7A6D06465E72F6D4DDA65B /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 574D072C770BAE53531249CF /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0CD02F062979E2FD36D8D524 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE447BCB0528DE1776DE2F0 /* StaticLibrary_ObjC.m */; };
+ 0DC0E4339EBAB04754837F50 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 0EDE93FD1B8EEA5E757A3EE1 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ 1081606EF3D131248CC46BD6 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BAFC2D775612C35F4F1897F /* libStaticLibrary_ObjC.a */; };
+ 11B2B5EF7172B6B837D951AA /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 68D8757F885CE1C02514845C /* StandaloneAssets.xcassets */; };
+ 129640F84D0905CE479FF083 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 329A12107D19B52E1F8554B4 /* Assets.xcassets */; };
+ 16B6081EBDCE7DDBC89DDFEE /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFA405DFE01301A4B8BA9027 /* Standalone.swift */; };
+ 16BD7E732A3294D973E79337 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 95933688FAC17B9E7752CB4F /* MainInterface.storyboard */; };
+ 18666A1E5DE5F5B2D48ED872 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1870224DAA5300F2EEB5C728 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 55DF3F01BB8698E8226D05A0 /* Assets.xcassets */; };
+ 1F0ED24C994FE9945337388B /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B4D9FADD8956DC163813272 /* Framework.framework */; };
+ 22E1EE394E24667C942CAFC4 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 24FD80AC771EAD5DEA2FB43F /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2514149FFB3E6498D579DBBB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F3EA429799FBBE247A2D82 /* AppDelegate.swift */; };
+ 26170D4BBCBE25B7ADB6C3C9 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BAFC2D775612C35F4F1897F /* libStaticLibrary_ObjC.a */; };
+ 2778626BA6AC7257203DFA47 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE447BCB0528DE1776DE2F0 /* StaticLibrary_ObjC.m */; };
+ 29C5F4E429F4826AC299988F /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F853E823D826B2DCA407AEA1 /* StaticLibrary_ObjC.h */; };
+ 2A39623B596284EC9DCDAE1D /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68F16F683711ECD7CC9C43EC /* TestProjectTests.swift */; };
+ 2B74F88A338EE674477351B1 /* TestFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 2CBE0DC8AC249AD1E42DC593 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 574D072C770BAE53531249CF /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2F0E1973A958FCDE8CE09F5E /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2FB0D86C27098550FAFB4164 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C6EA871817E3A864FDE5DA1 /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+ 30E0C7F5317477917CFFCE52 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 21AA0A827D6C74A605DEE03E /* Localizable.strings */; };
+ 329F958FE3152A51D6DBDC4F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 917AA3E4306C1A12FCC17994 /* Main.storyboard */; };
+ 35AA463863F88CB6290C264D /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; };
+ 35E3C0F60528783F7A6BFF9A /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ 36FEB01A03A566B43A2C2434 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B2986C19C8498CDE44CFDAD /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ 37556609B05600FC511F540B /* SwiftFileInDotPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9327B50C4B0BDF4A252CB2A /* SwiftFileInDotPath.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ 37EDF33D6B4105F07070FB56 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFA405DFE01301A4B8BA9027 /* Standalone.swift */; };
+ 38C639CCE01DB1DC4C2A7101 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F6813B4F70D433054D0C8FB8 /* Assets.xcassets */; };
+ 3A0A1B20E2149C6B53848EAC /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EE817D9DBEBA01EC4FFCED25 /* LocalizedStoryboard.storyboard */; };
+ 3D8580B33361272D45C61A85 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 431156B967A9DF0995682D7C /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ 3EC2758239D6659E4D35DFD9 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B4D9FADD8956DC163813272 /* Framework.framework */; };
+ 40906CFD3662304ACD172B5C /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 4AE9A9C885258BF807598F5E /* Localizable.stringsdict */; };
+ 448A2FB5230855C2A68C8960 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = BB4C1F0CB031F894B46533E0 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 48B822DF3314CCF76EE74D6D /* File2.swift in Sources */ = {isa = PBXBuildFile; fileRef = D358C9F4D4F2D97C148913CF /* File2.swift */; };
+ 4A1F587B61D4D2EE6833C281 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 02C5C670B0624A007BCB341D /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 4BC91284F91B188CBBEBA38C /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ 4D67F7E55015EFBDA73E307F /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4FE6138F5867CA1D93C6EA04 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 556DA72EFDDD94E4E49C0754 /* Main.storyboard */; };
+ 50E29FF7B2936111F9189780 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6C287801C7F7F97451C89F23 /* Settings.bundle */; };
+ 53AC4E3D64CC954A74A6BF51 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6C14AF20FB1E07BF9D32937E /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 557415FFAD88A691DF87B917 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5986EF99D2CDEE9EBC4B2AF1 /* TestFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */; };
+ 5B6902E1019616CCCC8C84D7 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B7C799370862813D8FE163 /* TestProjectUITests.swift */; };
+ 5F3CD9C98D6FCF78A371850F /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 431156B967A9DF0995682D7C /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ 5F930EEC8C575CB59EC11435 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1B4D9FADD8956DC163813272 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 60B0A79EF778752B7F574D8A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5A391BB5F85ECBA78F808646 /* LaunchScreen.storyboard */; };
+ 618C6FCD590D09819BF3CA2B /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7601CC56C42BD6A1D4A75AEA /* Result.framework */; };
+ 6236A088DDF97D457194A2FD /* ExternalTarget.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FF10A8919F65E6609784780A /* ExternalTarget.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 66ED5AE47EDD03A3DBBDF552 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6A779DFBEA9BC9A301F7B410 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E9E5D8F0132EBAFE6703730 /* libz.dylib */; };
+ 6B0FF0DA562C828135741257 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24562B158AF232E893E63362 /* Contacts.framework */; };
+ 6CA40F7223581AF6628DB4DE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4402963B58134A6066B9E943 /* Assets.xcassets */; };
+ 6F988879F73866310CE43F37 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B18235C78A3D3E84F2508B /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ 712E73B032F6905D77A9AF29 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 775BF5CB0D9F73D43A7A617A /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 74E1D133AB01AA3424C6C540 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1DB5DD67A1E835227FE0397 /* TestProjectTests.swift */; };
+ 751D7A8B90209DDAAB9EB73E /* File1.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC3D1BD85132F4625B4B231 /* File1.swift */; };
+ 76EFFFE1C3073348E70FAD17 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB002AF7692C5A6F71304272 /* Result.framework */; };
+ 793BD03EDB3A072945B82C27 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 201AC416366CB5F5B305E883 /* Assets.xcassets */; };
+ 7A218049DED8B2CD3D8AD8B6 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE447BCB0528DE1776DE2F0 /* StaticLibrary_ObjC.m */; };
+ 7AD5DA085B8A8182D006BF97 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7CB6A442EEFD3DAA5298FA6C /* TestFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */; };
+ 81724CEEA748160B950C85B5 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6C287801C7F7F97451C89F23 /* Settings.bundle */; };
+ 820158D082BDA00E14BD61E2 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6027424389D202122B079A42 /* MessagesViewController.swift */; };
+ 83A04F08119B1A648940B631 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ 84A839AF00AB269416E54CD4 /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 241982105A45A78DDE5AE195 /* Empty.h */; };
+ 85332C85D63B652CAB836FB9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 78B81AD14AB1A48CFA916FB2 /* Assets.xcassets */; };
+ 866974B9FCB26B1FEB2B66AF /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; };
+ 89D00F3D1A87503F10AE7432 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 917AA3E4306C1A12FCC17994 /* Main.storyboard */; };
+ 8B078640745463EC45519361 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 8F2C2446CC90D71637CA98DE /* Model.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = C68273268C686B59A290EEF3 /* Model.xcmappingmodel */; };
+ 8F64F92EA2ADCED7258DFB50 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7601CC56C42BD6A1D4A75AEA /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 922FA3335972E2600AD9C68D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5304167A195992C7D3D8F373 /* main.m */; };
+ 966364F9A5B152ED9292B335 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EE817D9DBEBA01EC4FFCED25 /* LocalizedStoryboard.storyboard */; };
+ 981AB81EA8094B072BAE125F /* SwiftyJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB9233C31FD59CF515FC7414 /* SwiftyJSON.framework */; };
+ 99FD6FC149E2753DD75BA792 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F853E823D826B2DCA407AEA1 /* StaticLibrary_ObjC.h */; };
+ 9A61DB3A89D0636D62F6134C /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 026CED83F810BD91A053B98A /* ExtensionDelegate.swift */; };
+ 9A8AB7DE8957C82A8807559F /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 4AE9A9C885258BF807598F5E /* Localizable.stringsdict */; };
+ 9ABB0EF3A6513E47AF06FA56 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; };
+ 9BE414C2C4CE2BA52F20E38D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E835E43770D77649C766CD28 /* Assets.xcassets */; };
+ 9E605FE85BFDA54EDB3AC0F0 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7A79640DB3BA2B340CCEAF0 /* Result.framework */; };
+ A4F2F9AC7C204B67DFDE0991 /* swift-tagged.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8905BD70AC0E549E6C5E267A /* swift-tagged.framework */; };
+ A5850DA4EB6491F7B3588832 /* SceneKitCatalog.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = A2CBBF04CBB716C4BF958A99 /* SceneKitCatalog.scnassets */; };
+ A795886DF55D0AF370692AAB /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98B17D464B46DAC8911014D5 /* module.modulemap */; };
+ AC800EB90200F927CE8ADC17 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 21AA0A827D6C74A605DEE03E /* Localizable.strings */; };
+ AF734D3BF6BA8808A2F1916C /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE447BCB0528DE1776DE2F0 /* StaticLibrary_ObjC.m */; };
+ B04F45480A1578BF58E692C6 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 376BA5774B91C2D6DA8F6C39 /* libStaticLibrary_ObjC.a */; };
+ B07763BBA6FC4AB9D65BE390 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F853E823D826B2DCA407AEA1 /* StaticLibrary_ObjC.h */; };
+ B09EE60448F8EBD4546D3C41 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1DB5DD67A1E835227FE0397 /* TestProjectTests.swift */; };
+ B3863DD3BC5038A7987B495F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B18235C78A3D3E84F2508B /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ B5B0D4EAB3B78D5CE452E100 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E889D8B5524C64ED5CF252D0 /* InterfaceController.swift */; };
+ B5BD65590F7EE7C3963B5122 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7EC60A15CCEC05897CEFC34 /* MoreUnder.swift */; };
+ BDEE0F3F67B9EA52B04CC2C6 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98B17D464B46DAC8911014D5 /* module.modulemap */; };
+ BE8E9F3E79C62F56F889E7A6 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BAFC2D775612C35F4F1897F /* libStaticLibrary_ObjC.a */; };
+ BF1837BBD7E8DA1998C80F7A /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8F914F7847A9FB2BDBA73C /* NotificationController.swift */; };
+ BF7D701BA63380CE76046BDB /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFA405DFE01301A4B8BA9027 /* Standalone.swift */; };
+ BFD9082EF681F00F1EB86044 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B4D9FADD8956DC163813272 /* Framework.framework */; };
+ C42838B5395A013CF38EA48E /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ C57A966770059A0014B3326D /* example.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 149F3970E2BE9F35231FC34D /* example.mp4 */; settings = {ASSET_TAGS = (tag1, tag2, ); }; };
+ C6F8661462BC2CADFBF59851 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7601CC56C42BD6A1D4A75AEA /* Result.framework */; };
+ C715C98D479D3832005E622B /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98B17D464B46DAC8911014D5 /* module.modulemap */; };
+ C875EA6DE9F7090BDB27D6B9 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28193039398EB7872CD19490 /* LaunchScreen.storyboard */; };
+ C8A63AB7A95D10D5430D3AD2 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24562B158AF232E893E63362 /* Contacts.framework */; };
+ C9EE684BC0637F26CCB5DB98 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB1FE6F7B1E431337B051320 /* SomeXPCService.xpc */; };
+ CC3D560B3E97CAAAC8B6076E /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = 239041E1C2665F9EB8AEB019 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ CD55F1F95D9B020253935924 /* BundleX.bundle in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = C2669AB60DB45D52E58D5A6D /* BundleX.bundle */; };
+ D584474E14DF674265501DA7 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4711AC75927A510DEB4FCC31 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D6A9F9FE464839B860307F97 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B274B43FDC5E8E1FEF7E9FA /* ViewController.swift */; };
+ D6E1725E31FE9D8D8B0075AD /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = A2D7192D099F88F92AC33C9A /* XPC_Service.m */; };
+ D6F1CE68BD0D773AF8FB5166 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C6EA871817E3A864FDE5DA1 /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ D94D5D2D9EF9B359DEE438F6 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 574D072C770BAE53531249CF /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
+ DCFAD099E6E129BDE43E1B79 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F6813B4F70D433054D0C8FB8 /* Assets.xcassets */; };
+ E013E10B776DC6DD0956F20E /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ E0976466478FACCA962CD09F /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 775BF5CB0D9F73D43A7A617A /* Framework.framework */; };
+ E1B953AB2F713D5D6AAF5A72 /* ExternalTarget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF10A8919F65E6609784780A /* ExternalTarget.framework */; };
+ E267E405615EF1727C3D49C7 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ E347C6740A9E3D8C9BF87A26 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1B4D9FADD8956DC163813272 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ E4D57896F90E7AEC6FED0634 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = B787DC6505E0F15C5C4975E3 /* ResourceFolder */; };
+ E9AB59E760C7776384AC7E32 /* SwiftFileInDotPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9327B50C4B0BDF4A252CB2A /* SwiftFileInDotPath.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ EC9566B5691051C716BCF88D /* swift-tagged.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8905BD70AC0E549E6C5E267A /* swift-tagged.framework */; };
+ ED7050A16D1A986B9F47AC43 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C552EC308B5274F2B6AC53B5 /* Assets.xcassets */; };
+ F01287B5AA79506789A98FBF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F7692A9E8CAA5A4B12FE633B /* libc++.tbd */; };
+ F0610A6808224739266D81D6 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7601CC56C42BD6A1D4A75AEA /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F189C2A0350D2BF0DE9861E7 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F316B77453C5A4A9692166AF /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4A6FE2AF37CDDD3A0D1D6B /* TestProjectUITests.swift */; };
+ F415FFDA9CCF0237B5C0D7A5 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24562B158AF232E893E63362 /* Contacts.framework */; };
+ F6BD1D30F6F6E5809B4CF709 /* TestFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F7A0142071C8301E99C11E3A /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1B4D9FADD8956DC163813272 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F94B7016C76FC0A6B74111B3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 214F642E7193A3E608845F4B /* Main.storyboard */; };
+ FA39577CB6231B24C47E828D /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC10D740EAC35BF970A7327A /* Result.framework */; };
+ FA7F5B42ACAEA016400A195A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28193039398EB7872CD19490 /* LaunchScreen.storyboard */; };
+ FAD05AB024D2E3CB4EDBFAF4 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ FB753FD180515AE293B2485C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B2986C19C8498CDE44CFDAD /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ FE6A3F3C7247CD2294753909 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F698427B31A67B1541925E /* FrameworkFile.swift */; };
+ FECBF2C1DD2D1B8BBD7DA7DF /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F853E823D826B2DCA407AEA1 /* StaticLibrary_ObjC.h */; };
+ FFFAEFA20D72082E2888D56D /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 574D072C770BAE53531249CF /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 0FA2870744F254DD5E3D8374 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 991BCE8E861305DE596EACFE;
+ remoteInfo = App_iOS;
+ };
+ 12A939B349AFA0D4B2A270EA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8507B864DA27764F1EA6962C;
+ remoteInfo = StaticLibrary_ObjC_tvOS;
+ };
+ 193DD9683611F943D58ADCC6 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 242476187403208F30D3219F;
+ remoteInfo = Framework_iOS;
+ };
+ 1BC468AB18D1F023019F1FBA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D8592DE6C0BC77BE0D4A2FAB;
+ remoteInfo = "XPC Service";
+ };
+ 2EAC3D4B05A43768279E03B7 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 242476187403208F30D3219F;
+ remoteInfo = Framework_iOS;
+ };
+ 2F6AB4DC84D6D8156D9743ED /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 5C6E1548456BE821C90E23F0;
+ remoteInfo = Framework2_iOS;
+ };
+ 3BFFB177BC0E51F54F902AE2 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = E8BDC848AB4F8D5927ADB55B;
+ remoteInfo = App_macOS;
+ };
+ 4CA2280DE705720E8B851B8E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 242476187403208F30D3219F;
+ remoteInfo = Framework_iOS;
+ };
+ 4DB3B584A41D1D19DE1B39E1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 974B3EC2FF4FBAA1513A2950;
+ remoteInfo = Framework_macOS;
+ };
+ 5A3133C260AB0B2EE767880A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3DBB411AF8D365588E21D8CA;
+ remoteInfo = StaticLibrary_ObjC_iOS;
+ };
+ 5CFE6D622751CA41654F4B00 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 5239298BB84B4FDDFD84469E;
+ remoteInfo = StaticLibrary_ObjC_watchOS;
+ };
+ 6D2993924DD47F80ACB3567E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 559F6E334A370096461729A9;
+ remoteInfo = App_Clip;
+ };
+ 6DEB235CE85E75F90EC6175D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 559F6E334A370096461729A9;
+ remoteInfo = App_Clip;
+ };
+ 8C53BD3BF1B5227C831355F9 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 43EA7AFC9AC8E9116A228613 /* AnotherProject */;
+ proxyType = 1;
+ remoteGlobalIDString = E76A5F5E363E470416D3B487;
+ remoteInfo = ExternalTarget;
+ };
+ 913CC94BAD23FF3E3636E8E5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 991BCE8E861305DE596EACFE;
+ remoteInfo = App_iOS;
+ };
+ 98E077CD4918FF68662C4337 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 63EAAEAE0535C975295781D4;
+ remoteInfo = TestFramework;
+ };
+ 9C7FA5CABE5A0EC3D5C4055B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3DBB411AF8D365588E21D8CA;
+ remoteInfo = StaticLibrary_ObjC_iOS;
+ };
+ 9D69D471B06AE37AEA2D84E3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 991BCE8E861305DE596EACFE;
+ remoteInfo = App_iOS;
+ };
+ 9F4AAED22329F820EA5DB2F7 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3FCF5A083151C7E22B24E807;
+ remoteInfo = StaticLibrary_ObjC_macOS;
+ };
+ BB3B4DE7EE8CEE505BBC6DF4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 63EAAEAE0535C975295781D4;
+ remoteInfo = TestFramework;
+ };
+ C0408FA85DFD7E9F59541D2E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3FCF5A083151C7E22B24E807;
+ remoteInfo = StaticLibrary_ObjC_macOS;
+ };
+ C68FFE66E063CA163CE1D68B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = DAF9935ECEC17AA561D28998;
+ remoteInfo = "App_watchOS Extension";
+ };
+ D51CBCA8454A129B3F1C0629 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 242476187403208F30D3219F;
+ remoteInfo = Framework_iOS;
+ };
+ D65DFD803579AB5662714F99 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 43EA7AFC9AC8E9116A228613 /* AnotherProject */;
+ proxyType = 2;
+ remoteGlobalIDString = D6340FC7DEBC81E0127BAFD6;
+ remoteInfo = ExternalTarget;
+ };
+ D7FD49F1E9A4B29D528D18A5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = FF3DC3DF2AA3AE02377647C9;
+ remoteInfo = iMessageApp;
+ };
+ F2FCFF0F2338D8316F9D8D47 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = EDE7907E34D077B346FC4CF1;
+ remoteInfo = iMessageExtension;
+ };
+ F52878EB4A2F3E2E1F89036F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 559F6E334A370096461729A9;
+ remoteInfo = App_Clip;
+ };
+ F7BDEB5E84BA34C6E32E8C1F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3DBB411AF8D365588E21D8CA;
+ remoteInfo = StaticLibrary_ObjC_iOS;
+ };
+ F8D2CC44BE471C9C41F5B1E6 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3DBB411AF8D365588E21D8CA;
+ remoteInfo = StaticLibrary_ObjC_iOS;
+ };
+ FF4780B89575C7C171A9B401 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 7467FBF059DC784B5601CA7E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 15A12B9A8B7A477CF2D4ABEF;
+ remoteInfo = App_watchOS;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 108FC2F1B37B100230F6C0C5 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ E347C6740A9E3D8C9BF87A26 /* Framework.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 1C41E253B853711670514ECC /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ 29C5F4E429F4826AC299988F /* StaticLibrary_ObjC.h in CopyFiles */,
+ BDEE0F3F67B9EA52B04CC2C6 /* module.modulemap in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 29EAAC76E47D07B8D8F50262 /* Embed App Clips */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "$(CONTENTS_FOLDER_PATH)/AppClips";
+ dstSubfolderSpec = 16;
+ files = (
+ 068A307AAD3FDB71E245CF4B /* App_Clip.app in Embed App Clips */,
+ );
+ name = "Embed App Clips";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 39EF6E709D5336CB216DC2FB /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ 99FD6FC149E2753DD75BA792 /* StaticLibrary_ObjC.h in CopyFiles */,
+ 0A6862249B5F9D544A774770 /* module.modulemap in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3FE33BF71F952904B55B2C67 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 22E1EE394E24667C942CAFC4 /* Result.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 456284554D1A6C53EB39BA4B /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ F6BD1D30F6F6E5809B4CF709 /* TestFramework.framework in Embed Frameworks */,
+ E013E10B776DC6DD0956F20E /* Result.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5FF5F332311FF39E3B020BD9 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 6236A088DDF97D457194A2FD /* ExternalTarget.framework in Embed Frameworks */,
+ D6F1CE68BD0D773AF8FB5166 /* Framework2.framework in Embed Frameworks */,
+ 5F930EEC8C575CB59EC11435 /* Framework.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 779219E7849466ABE0506B3A /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ F189C2A0350D2BF0DE9861E7 /* Result.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 807E1CB99AAD2470DC373BC0 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 2B74F88A338EE674477351B1 /* TestFramework.framework in Embed Frameworks */,
+ 0DC0E4339EBAB04754837F50 /* Result.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 883C11C8EE5A3B03232F4D48 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ B07763BBA6FC4AB9D65BE390 /* StaticLibrary_ObjC.h in CopyFiles */,
+ A795886DF55D0AF370692AAB /* module.modulemap in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 89F3F9E096C5559317B37165 /* Embed App Extensions */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 13;
+ files = (
+ 4A1F587B61D4D2EE6833C281 /* App_watchOS Extension.appex in Embed App Extensions */,
+ );
+ name = "Embed App Extensions";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 93EF9E66AA5ED7DE1C6A6FAD /* Embed App Extensions */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 13;
+ files = (
+ 53AC4E3D64CC954A74A6BF51 /* iMessageExtension.appex in Embed App Extensions */,
+ );
+ name = "Embed App Extensions";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9830A88A58F9591CFE7662C9 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices";
+ dstSubfolderSpec = 16;
+ files = (
+ 0A14BD0F9B22C84677FD7D6F /* XPC Service.xpc in CopyFiles */,
+ C9EE684BC0637F26CCB5DB98 /* SomeXPCService.xpc in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9DEE5A10D294FF2BD9A5233C /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 8F64F92EA2ADCED7258DFB50 /* Result.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A603A9260F95BC8B6B945B34 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ 84A839AF00AB269416E54CD4 /* Empty.h in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B4F76A1390264F5E325C3C1E /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 712E73B032F6905D77A9AF29 /* Framework.framework in Embed Frameworks */,
+ F0610A6808224739266D81D6 /* Result.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D1B97A1B112643A756935FA5 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ F7A0142071C8301E99C11E3A /* Framework.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E0B58B04AD09D3B4B1486315 /* Copy Bundle Resources */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstSubfolderSpec = 7;
+ files = (
+ CD55F1F95D9B020253935924 /* BundleX.bundle in Copy Bundle Resources */,
+ );
+ name = "Copy Bundle Resources";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EC033AB632FAAA03F670D215 /* Embed Watch Content */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
+ dstSubfolderSpec = 16;
+ files = (
+ 448A2FB5230855C2A68C8960 /* App_watchOS.app in Embed Watch Content */,
+ );
+ name = "Embed Watch Content";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F0CE57DCC7A58AFEA0EB1EF5 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ FECBF2C1DD2D1B8BBD7DA7DF /* StaticLibrary_ObjC.h in CopyFiles */,
+ C715C98D479D3832005E622B /* module.modulemap in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 021F11A2B76A01ED4113286B /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ 026CED83F810BD91A053B98A /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; };
+ 02C5C670B0624A007BCB341D /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0751ACA46EF394AF3E358E48 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TestFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0B2986C19C8498CDE44CFDAD /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ 0C6EA871817E3A864FDE5DA1 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0E9E5D8F0132EBAFE6703730 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+ 115047E35C1A4697DEC6D83F /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1342A225B1FB5CCDE2D8C511 /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; };
+ 13B7C799370862813D8FE163 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
+ 149F3970E2BE9F35231FC34D /* example.mp4 */ = {isa = PBXFileReference; path = example.mp4; sourceTree = ""; };
+ 160628D3BF533455BA779575 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 18232E5A7F3528FA1193CC79 /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = ""; };
+ 1B4D9FADD8956DC163813272 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 201AC416366CB5F5B305E883 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 20B4D4D4A77434FA5593E35D /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 239041E1C2665F9EB8AEB019 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 241982105A45A78DDE5AE195 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; };
+ 24562B158AF232E893E63362 /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; };
+ 26A55238739205BF9ECD6A0B /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; };
+ 28B6600F3CDA6F15633D2134 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
+ 2D3BE7580CC3D623991914A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 31BC9A6E8D133DF950755A82 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 329A12107D19B52E1F8554B4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 334F263B3704264D929F4414 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 3469B706C364CC07AAEF298A /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; };
+ 34E069C383E5121BD428C2D7 /* Clip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Clip.entitlements; sourceTree = ""; };
+ 35F22C6354CC35E2CF72A165 /* Resource.abcd */ = {isa = PBXFileReference; path = Resource.abcd; sourceTree = ""; };
+ 376BA5774B91C2D6DA8F6C39 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 377DF5A1EB742CEF829A9A75 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; };
+ 3B4590226C49347F4BC18782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 3BAAEBEC8B795DCF1C9C5ADE /* Tool */ = {isa = PBXFileReference; includeInIndex = 0; path = Tool; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3BE447BCB0528DE1776DE2F0 /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; };
+ 43EA7AFC9AC8E9116A228613 /* AnotherProject */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AnotherProject; path = AnotherProject/AnotherProject.xcodeproj; sourceTree = ""; };
+ 4402963B58134A6066B9E943 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 4590EBD0480830F80EDC182E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 4711AC75927A510DEB4FCC31 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; };
+ 4A8F914F7847A9FB2BDBA73C /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; };
+ 4D770C47456D076025DD7A51 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 4EC670E53BFAA6F61C02BE82 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
+ 4FFF3A7EBB86F6500589ABDD /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 51E2D479CB960CB44EB545C6 /* XPC Service.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5249EE07991C4370C3F2ED16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 5304167A195992C7D3D8F373 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+ 55DF3F01BB8698E8226D05A0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 574D072C770BAE53531249CF /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; };
+ 5C383DB670761F227610EDB0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 5DB17246AF97AF5311C1CB7B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 5FF83941D764AEB361249B72 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; };
+ 6027424389D202122B079A42 /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; };
+ 610AD86B5088E07993870579 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; };
+ 6170A2CAD1ABE59888B1F95E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; };
+ 618546FAE1D216BFFA06DE35 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 63FC1CBFB0F9A0C43B5A58DE /* MyPlayground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = MyPlayground.playground; sourceTree = ""; };
+ 68D8757F885CE1C02514845C /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; };
+ 68F16F683711ECD7CC9C43EC /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
+ 6BAFC2D775612C35F4F1897F /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6C14AF20FB1E07BF9D32937E /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6C287801C7F7F97451C89F23 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; };
+ 6F98C5891F0CE8C0DEF57B40 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; };
+ 70AF281B672F71A33256F70E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 7601CC56C42BD6A1D4A75AEA /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
+ 76A87BB63618846E0E0F363F /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; };
+ 775BF5CB0D9F73D43A7A617A /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 78B81AD14AB1A48CFA916FB2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 797FC015E4199F24EE43C159 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; };
+ 7ACB8439596DD7A77FD11AFD /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7B274B43FDC5E8E1FEF7E9FA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ 7CBC1BDF40FEDAC0DB9ACFFD /* iMessageStickersExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageStickersExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7E6075D44DFAA43C62CED79D /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; };
+ 80490871D5D4676E77EA80E9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 80F3EA429799FBBE247A2D82 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 81EEE090725ECD1354287E74 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8905BD70AC0E549E6C5E267A /* swift-tagged.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = "swift-tagged.framework"; sourceTree = ""; };
+ 8D1E74E40BA947CAF2DA087F /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; };
+ 948E174040217FD36F14BCF6 /* outputList.xcfilelist */ = {isa = PBXFileReference; lastKnownFileType = text.xcfilelist; path = outputList.xcfilelist; sourceTree = ""; };
+ 9759A19BAD2C50FCECF7D3C1 /* App_Clip_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 98B17D464B46DAC8911014D5 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; };
+ A2CBBF04CBB716C4BF958A99 /* SceneKitCatalog.scnassets */ = {isa = PBXFileReference; lastKnownFileType = wrapper.scnassets; path = SceneKitCatalog.scnassets; sourceTree = ""; };
+ A2D7192D099F88F92AC33C9A /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; };
+ A74AC60A5F465A6542431675 /* libStaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ A89D9F16591C365D568A0BA4 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A9327B50C4B0BDF4A252CB2A /* SwiftFileInDotPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftFileInDotPath.swift; sourceTree = ""; };
+ AB002AF7692C5A6F71304272 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
+ AE98EBB8C701BCA1BF478547 /* inputList.xcfilelist */ = {isa = PBXFileReference; lastKnownFileType = text.xcfilelist; path = inputList.xcfilelist; sourceTree = ""; };
+ B787DC6505E0F15C5C4975E3 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; };
+ B945C628ACCF26FC51594160 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ BB1FE6F7B1E431337B051320 /* SomeXPCService.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = SomeXPCService.xpc; sourceTree = ""; };
+ BB4C1F0CB031F894B46533E0 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ BE9FDD096DC947BCB58D7B08 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ C0ACDDAF456079BA0099BFCE /* App_macOS_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = App_macOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ C0B18235C78A3D3E84F2508B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ C0F698427B31A67B1541925E /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; };
+ C16F953828BFF71DEB579075 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; };
+ C22BEDE0B2217312642FADA2 /* App_Clip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_Clip.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ C2669AB60DB45D52E58D5A6D /* BundleX.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ C4AF74FB9AB607DFA9E07A4E /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; };
+ C552EC308B5274F2B6AC53B5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ C68273268C686B59A290EEF3 /* Model.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Model.xcmappingmodel; sourceTree = ""; };
+ C782AA5939417FFD3CF8EB52 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ CFC3D1BD85132F4625B4B231 /* File1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File1.swift; path = Group/File1.swift; sourceTree = ""; };
+ D358C9F4D4F2D97C148913CF /* File2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File2.swift; path = Group2/File2.swift; sourceTree = ""; };
+ D7FDE08353EF6730CA4E6F32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ D80E621293876A18B051299F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; };
+ D88BF5054CA820ED443AC1F9 /* EntitledApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = EntitledApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ D998E6204320A2092F9327FA /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; };
+ D9F19321D54BD8E80E6EBC08 /* Resource.abc */ = {isa = PBXFileReference; path = Resource.abc; sourceTree = ""; };
+ DAC130416836C31B7A63DD0C /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; };
+ DB9233C31FD59CF515FC7414 /* SwiftyJSON.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SwiftyJSON.framework; sourceTree = ""; };
+ DEC53DADDC767F9AE310B83E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; };
+ DF3C1E903F8399E193F3B4BA /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ DF5EEB3171D1A7722CD9413A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ E2A15F2C8142988473574022 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E4FBD31453FD26F4C7ABD5F9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; };
+ E7A79640DB3BA2B340CCEAF0 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
+ E7EC60A15CCEC05897CEFC34 /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; };
+ E835E43770D77649C766CD28 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ E83A520CAE8A4BCF6578C2A9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ E889D8B5524C64ED5CF252D0 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; };
+ E94FA789791614CFD0F98C26 /* App_iOS_With_Clip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS_With_Clip.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ EADBB714A4B3D4F89D79419E /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ EC10D740EAC35BF970A7327A /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
+ ED4A6FE2AF37CDDD3A0D1D6B /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
+ EE31326E32ED51CB02C58E9D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ F1188E378718785171F293B6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; };
+ F18408A818972A0675B115E4 /* App_Clip_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ F1DB5DD67A1E835227FE0397 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
+ F24135F7E2026D8D80F8B919 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; };
+ F55FFC5DC497CF889F859496 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ F6813B4F70D433054D0C8FB8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ F7692A9E8CAA5A4B12FE633B /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
+ F853E823D826B2DCA407AEA1 /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; };
+ FFA405DFE01301A4B8BA9027 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 286A764EB49712A6BE938CD9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C6F8661462BC2CADFBF59851 /* Result.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 43C5260C6E5332D5E733D85E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7CB6A442EEFD3DAA5298FA6C /* TestFramework.framework in Frameworks */,
+ EC9566B5691051C716BCF88D /* swift-tagged.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 57AAA51FE44B9280D0F3C9F6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6B0FF0DA562C828135741257 /* Contacts.framework in Frameworks */,
+ 3EC2758239D6659E4D35DFD9 /* Framework.framework in Frameworks */,
+ 9ABB0EF3A6513E47AF06FA56 /* Result.framework in Frameworks */,
+ 1081606EF3D131248CC46BD6 /* libStaticLibrary_ObjC.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5A2BDC62A00DF008470998CA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C8A63AB7A95D10D5430D3AD2 /* Contacts.framework in Frameworks */,
+ E0976466478FACCA962CD09F /* Framework.framework in Frameworks */,
+ 618C6FCD590D09819BF3CA2B /* Result.framework in Frameworks */,
+ B04F45480A1578BF58E692C6 /* libStaticLibrary_ObjC.a in Frameworks */,
+ F01287B5AA79506789A98FBF /* libc++.tbd in Frameworks */,
+ 6A779DFBEA9BC9A301F7B410 /* libz.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6DE5ACEB01740726A5F7FE20 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 76EFFFE1C3073348E70FAD17 /* Result.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 817E815A267F7A93B27C28C1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E1B953AB2F713D5D6AAF5A72 /* ExternalTarget.framework in Frameworks */,
+ F415FFDA9CCF0237B5C0D7A5 /* Contacts.framework in Frameworks */,
+ 2FB0D86C27098550FAFB4164 /* Framework2.framework in Frameworks */,
+ BFD9082EF681F00F1EB86044 /* Framework.framework in Frameworks */,
+ 866974B9FCB26B1FEB2B66AF /* Result.framework in Frameworks */,
+ 26170D4BBCBE25B7ADB6C3C9 /* libStaticLibrary_ObjC.a in Frameworks */,
+ 981AB81EA8094B072BAE125F /* SwiftyJSON.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8425BF17AF010D7E10061AB3 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FA39577CB6231B24C47E828D /* Result.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 93C6B66FB2295D9FE2D068F0 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5986EF99D2CDEE9EBC4B2AF1 /* TestFramework.framework in Frameworks */,
+ A4F2F9AC7C204B67DFDE0991 /* swift-tagged.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 941526D5A3C922259CA39CB6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1F0ED24C994FE9945337388B /* Framework.framework in Frameworks */,
+ 35AA463863F88CB6290C264D /* Result.framework in Frameworks */,
+ BE8E9F3E79C62F56F889E7A6 /* libStaticLibrary_ObjC.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F3D411695D4C043FEF3265B7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9E605FE85BFDA54EDB3AC0F0 /* Result.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 02BC5C3C2EFC35F602940195 /* FolderWithDot2.0 */ = {
+ isa = PBXGroup;
+ children = (
+ A9327B50C4B0BDF4A252CB2A /* SwiftFileInDotPath.swift */,
+ );
+ path = FolderWithDot2.0;
+ sourceTree = "";
+ };
+ 032B95A6C88F143883A20612 /* iOS */ = {
+ isa = PBXGroup;
+ children = (
+ EC10D740EAC35BF970A7327A /* Result.framework */,
+ 8905BD70AC0E549E6C5E267A /* swift-tagged.framework */,
+ DB9233C31FD59CF515FC7414 /* SwiftyJSON.framework */,
+ );
+ path = iOS;
+ sourceTree = "";
+ };
+ 06D66F6012249ADB6930674D /* StaticLibrary_Swift */ = {
+ isa = PBXGroup;
+ children = (
+ 1342A225B1FB5CCDE2D8C511 /* StaticLibrary.swift */,
+ );
+ path = StaticLibrary_Swift;
+ sourceTree = "";
+ };
+ 0B61C4DD7507DBE79AB464C1 /* App_watchOS Extension */ = {
+ isa = PBXGroup;
+ children = (
+ E835E43770D77649C766CD28 /* Assets.xcassets */,
+ 026CED83F810BD91A053B98A /* ExtensionDelegate.swift */,
+ 70AF281B672F71A33256F70E /* Info.plist */,
+ E889D8B5524C64ED5CF252D0 /* InterfaceController.swift */,
+ 4A8F914F7847A9FB2BDBA73C /* NotificationController.swift */,
+ 76A87BB63618846E0E0F363F /* PushNotificationPayload.apns */,
+ );
+ path = "App_watchOS Extension";
+ sourceTree = "";
+ };
+ 3A1FEE49143420BD1A65448C /* iMessageApp */ = {
+ isa = PBXGroup;
+ children = (
+ C552EC308B5274F2B6AC53B5 /* Assets.xcassets */,
+ BE9FDD096DC947BCB58D7B08 /* Info.plist */,
+ );
+ path = iMessageApp;
+ sourceTree = "";
+ };
+ 3E1C0D21208BF097D3194956 /* CustomGroup */ = {
+ isa = PBXGroup;
+ children = (
+ CFC3D1BD85132F4625B4B231 /* File1.swift */,
+ D358C9F4D4F2D97C148913CF /* File2.swift */,
+ DAC130416836C31B7A63DD0C /* Folder */,
+ 8D1E74E40BA947CAF2DA087F /* Mintfile */,
+ );
+ name = CustomGroup;
+ sourceTree = "";
+ };
+ 43472DDB7FC544B77A4B9308 /* Carthage */ = {
+ isa = PBXGroup;
+ children = (
+ 032B95A6C88F143883A20612 /* iOS */,
+ D42109390CD998BAF417FEF7 /* Mac */,
+ C134B9E65FCA5003ADEE5928 /* tvOS */,
+ 460758AB62AF78ABF609D4BE /* watchOS */,
+ );
+ name = Carthage;
+ path = Carthage/Build;
+ sourceTree = "";
+ };
+ 460758AB62AF78ABF609D4BE /* watchOS */ = {
+ isa = PBXGroup;
+ children = (
+ E7A79640DB3BA2B340CCEAF0 /* Result.framework */,
+ );
+ path = watchOS;
+ sourceTree = "";
+ };
+ 4692C54657FAA38490642A5A /* CopyFiles */ = {
+ isa = PBXGroup;
+ children = (
+ 241982105A45A78DDE5AE195 /* Empty.h */,
+ );
+ path = CopyFiles;
+ sourceTree = "";
+ };
+ 4E9E62860C6D8F33A5D1A476 /* App_watchOS */ = {
+ isa = PBXGroup;
+ children = (
+ 55DF3F01BB8698E8226D05A0 /* Assets.xcassets */,
+ 4590EBD0480830F80EDC182E /* Info.plist */,
+ 7E1427FBA94B073C3FD2830A /* Interface.storyboard */,
+ );
+ path = App_watchOS;
+ sourceTree = "";
+ };
+ 5017C17F6AC357F6128D719C /* App_Clip_UITests */ = {
+ isa = PBXGroup;
+ children = (
+ 2D3BE7580CC3D623991914A4 /* Info.plist */,
+ ED4A6FE2AF37CDDD3A0D1D6B /* TestProjectUITests.swift */,
+ );
+ path = App_Clip_UITests;
+ sourceTree = "";
+ };
+ 504A23A54D051DF5E8D1C9D5 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 43472DDB7FC544B77A4B9308 /* Carthage */,
+ 24562B158AF232E893E63362 /* Contacts.framework */,
+ F7692A9E8CAA5A4B12FE633B /* libc++.tbd */,
+ 0E9E5D8F0132EBAFE6703730 /* libz.dylib */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 53FBB4268BA34C04D5E32FB1 /* Module */ = {
+ isa = PBXGroup;
+ children = (
+ 98B17D464B46DAC8911014D5 /* module.modulemap */,
+ );
+ path = Module;
+ sourceTree = "";
+ };
+ 54E9E53007DE91CA40153A40 = {
+ isa = PBXGroup;
+ children = (
+ A62B59FAE6F412F87AA9802C /* App */,
+ 57879A6554A581D1AB431C97 /* App_Clip */,
+ 5017C17F6AC357F6128D719C /* App_Clip_UITests */,
+ 89D980E845C2940109EB1A0E /* App_iOS_Tests */,
+ 6690EF741BA765F2C6812BA8 /* App_iOS_UITests */,
+ B95B6603AA3915022CEA4E81 /* App_macOS */,
+ E983D6835D9460CCFC7E53C2 /* App_macOS_Tests */,
+ 4E9E62860C6D8F33A5D1A476 /* App_watchOS */,
+ 0B61C4DD7507DBE79AB464C1 /* App_watchOS Extension */,
+ D5532FE12C5B6CC1A7F3E3D1 /* Configs */,
+ 4692C54657FAA38490642A5A /* CopyFiles */,
+ 3E1C0D21208BF097D3194956 /* CustomGroup */,
+ 8851333DB3B77DCB07BEBA8A /* FileGroup */,
+ 77F94B3D3772A24BC26FCE1A /* Framework */,
+ 3A1FEE49143420BD1A65448C /* iMessageApp */,
+ 8D3D464FADE45CD5CFD0CD2D /* iMessageExtension */,
+ EFF9DC82C1B9EA1B47804816 /* iMessageStickers */,
+ D297C054132559DEEE78A28D /* Resources */,
+ C6B85E6F88CE3EE3727FF514 /* StandaloneFiles */,
+ D313CB5937567576F546F007 /* StaticLibrary_ObjC */,
+ 06D66F6012249ADB6930674D /* StaticLibrary_Swift */,
+ 5BE9DC0E1ACDDD73F7409C8B /* Tool */,
+ 9E4CAECCD14E742E6E6F8700 /* Utilities */,
+ 83B6B878B045BA77C258A0A2 /* Vendor */,
+ 7A40E7C16A3AB0A95669A2A8 /* XPC Service */,
+ DAC130416836C31B7A63DD0C /* Folder */,
+ 574D072C770BAE53531249CF /* Headers */,
+ B787DC6505E0F15C5C4975E3 /* ResourceFolder */,
+ 377DF5A1EB742CEF829A9A75 /* SomeFile */,
+ C4DD1C7F5C7097CA81DB3FE8 /* Bundles */,
+ 504A23A54D051DF5E8D1C9D5 /* Frameworks */,
+ E8A7C596497AB5EFE54C4C67 /* Products */,
+ C0F6DA034785945B03CC8273 /* Projects */,
+ );
+ indentWidth = 2;
+ sourceTree = "";
+ tabWidth = 2;
+ usesTabs = 0;
+ };
+ 57879A6554A581D1AB431C97 /* App_Clip */ = {
+ isa = PBXGroup;
+ children = (
+ EE31326E32ED51CB02C58E9D /* AppDelegate.swift */,
+ 329A12107D19B52E1F8554B4 /* Assets.xcassets */,
+ 34E069C383E5121BD428C2D7 /* Clip.entitlements */,
+ 80490871D5D4676E77EA80E9 /* Info.plist */,
+ 5A391BB5F85ECBA78F808646 /* LaunchScreen.storyboard */,
+ 556DA72EFDDD94E4E49C0754 /* Main.storyboard */,
+ 7B274B43FDC5E8E1FEF7E9FA /* ViewController.swift */,
+ );
+ path = App_Clip;
+ sourceTree = "";
+ };
+ 5BE9DC0E1ACDDD73F7409C8B /* Tool */ = {
+ isa = PBXGroup;
+ children = (
+ 4EC670E53BFAA6F61C02BE82 /* main.swift */,
+ );
+ path = Tool;
+ sourceTree = "";
+ };
+ 63CA1B81E0D9E4D5F1683D64 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ FF10A8919F65E6609784780A /* ExternalTarget.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 6690EF741BA765F2C6812BA8 /* App_iOS_UITests */ = {
+ isa = PBXGroup;
+ children = (
+ 31BC9A6E8D133DF950755A82 /* Info.plist */,
+ 13B7C799370862813D8FE163 /* TestProjectUITests.swift */,
+ );
+ path = App_iOS_UITests;
+ sourceTree = "";
+ };
+ 77F94B3D3772A24BC26FCE1A /* Framework */ = {
+ isa = PBXGroup;
+ children = (
+ C0F698427B31A67B1541925E /* FrameworkFile.swift */,
+ 4D770C47456D076025DD7A51 /* Info.plist */,
+ 4711AC75927A510DEB4FCC31 /* MyFramework.h */,
+ );
+ path = Framework;
+ sourceTree = "";
+ };
+ 7A40E7C16A3AB0A95669A2A8 /* XPC Service */ = {
+ isa = PBXGroup;
+ children = (
+ 5C383DB670761F227610EDB0 /* Info.plist */,
+ 5304167A195992C7D3D8F373 /* main.m */,
+ 18232E5A7F3528FA1193CC79 /* XPC_Service.h */,
+ A2D7192D099F88F92AC33C9A /* XPC_Service.m */,
+ 26A55238739205BF9ECD6A0B /* XPC_ServiceProtocol.h */,
+ );
+ path = "XPC Service";
+ sourceTree = "";
+ };
+ 83B6B878B045BA77C258A0A2 /* Vendor */ = {
+ isa = PBXGroup;
+ children = (
+ BB1FE6F7B1E431337B051320 /* SomeXPCService.xpc */,
+ );
+ path = Vendor;
+ sourceTree = "";
+ };
+ 8851333DB3B77DCB07BEBA8A /* FileGroup */ = {
+ isa = PBXGroup;
+ children = (
+ AE521ABD892103D1D989D151 /* UnderFileGroup */,
+ );
+ path = FileGroup;
+ sourceTree = "";
+ };
+ 89D980E845C2940109EB1A0E /* App_iOS_Tests */ = {
+ isa = PBXGroup;
+ children = (
+ 0751ACA46EF394AF3E358E48 /* Info.plist */,
+ F1DB5DD67A1E835227FE0397 /* TestProjectTests.swift */,
+ );
+ path = App_iOS_Tests;
+ sourceTree = "";
+ };
+ 8D3D464FADE45CD5CFD0CD2D /* iMessageExtension */ = {
+ isa = PBXGroup;
+ children = (
+ 78B81AD14AB1A48CFA916FB2 /* Assets.xcassets */,
+ D7FDE08353EF6730CA4E6F32 /* Info.plist */,
+ 95933688FAC17B9E7752CB4F /* MainInterface.storyboard */,
+ 6027424389D202122B079A42 /* MessagesViewController.swift */,
+ );
+ path = iMessageExtension;
+ sourceTree = "";
+ };
+ 9E4CAECCD14E742E6E6F8700 /* Utilities */ = {
+ isa = PBXGroup;
+ children = (
+ 63FC1CBFB0F9A0C43B5A58DE /* MyPlayground.playground */,
+ );
+ path = Utilities;
+ sourceTree = "";
+ };
+ A62B59FAE6F412F87AA9802C /* App */ = {
+ isa = PBXGroup;
+ children = (
+ 02BC5C3C2EFC35F602940195 /* FolderWithDot2.0 */,
+ 3469B706C364CC07AAEF298A /* App.entitlements */,
+ C0B18235C78A3D3E84F2508B /* AppDelegate.swift */,
+ F6813B4F70D433054D0C8FB8 /* Assets.xcassets */,
+ 160628D3BF533455BA779575 /* Info.plist */,
+ AE98EBB8C701BCA1BF478547 /* inputList.xcfilelist */,
+ 28193039398EB7872CD19490 /* LaunchScreen.storyboard */,
+ 21AA0A827D6C74A605DEE03E /* Localizable.strings */,
+ 4AE9A9C885258BF807598F5E /* Localizable.stringsdict */,
+ EE817D9DBEBA01EC4FFCED25 /* LocalizedStoryboard.storyboard */,
+ 917AA3E4306C1A12FCC17994 /* Main.storyboard */,
+ 431156B967A9DF0995682D7C /* Model.xcdatamodeld */,
+ C68273268C686B59A290EEF3 /* Model.xcmappingmodel */,
+ 7E6075D44DFAA43C62CED79D /* module.modulemap */,
+ 948E174040217FD36F14BCF6 /* outputList.xcfilelist */,
+ D9F19321D54BD8E80E6EBC08 /* Resource.abc */,
+ 35F22C6354CC35E2CF72A165 /* Resource.abcd */,
+ 6C287801C7F7F97451C89F23 /* Settings.bundle */,
+ 0B2986C19C8498CDE44CFDAD /* ViewController.swift */,
+ );
+ name = App;
+ path = App_iOS;
+ sourceTree = "";
+ };
+ AE521ABD892103D1D989D151 /* UnderFileGroup */ = {
+ isa = PBXGroup;
+ children = (
+ E7EC60A15CCEC05897CEFC34 /* MoreUnder.swift */,
+ );
+ path = UnderFileGroup;
+ sourceTree = "";
+ };
+ B95B6603AA3915022CEA4E81 /* App_macOS */ = {
+ isa = PBXGroup;
+ children = (
+ 80F3EA429799FBBE247A2D82 /* AppDelegate.swift */,
+ 201AC416366CB5F5B305E883 /* Assets.xcassets */,
+ 5249EE07991C4370C3F2ED16 /* Info.plist */,
+ 214F642E7193A3E608845F4B /* Main.storyboard */,
+ 021F11A2B76A01ED4113286B /* ViewController.swift */,
+ );
+ path = App_macOS;
+ sourceTree = "";
+ };
+ C0F6DA034785945B03CC8273 /* Projects */ = {
+ isa = PBXGroup;
+ children = (
+ 43EA7AFC9AC8E9116A228613 /* AnotherProject */,
+ );
+ name = Projects;
+ sourceTree = "";
+ };
+ C134B9E65FCA5003ADEE5928 /* tvOS */ = {
+ isa = PBXGroup;
+ children = (
+ AB002AF7692C5A6F71304272 /* Result.framework */,
+ );
+ path = tvOS;
+ sourceTree = "";
+ };
+ C4DD1C7F5C7097CA81DB3FE8 /* Bundles */ = {
+ isa = PBXGroup;
+ children = (
+ C2669AB60DB45D52E58D5A6D /* BundleX.bundle */,
+ );
+ name = Bundles;
+ sourceTree = "";
+ };
+ C6B85E6F88CE3EE3727FF514 /* StandaloneFiles */ = {
+ isa = PBXGroup;
+ children = (
+ FFA405DFE01301A4B8BA9027 /* Standalone.swift */,
+ 68D8757F885CE1C02514845C /* StandaloneAssets.xcassets */,
+ );
+ path = StandaloneFiles;
+ sourceTree = "";
+ };
+ D297C054132559DEEE78A28D /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 149F3970E2BE9F35231FC34D /* example.mp4 */,
+ F24135F7E2026D8D80F8B919 /* MyBundle.bundle */,
+ A2CBBF04CBB716C4BF958A99 /* SceneKitCatalog.scnassets */,
+ );
+ path = Resources;
+ sourceTree = "";
+ };
+ D313CB5937567576F546F007 /* StaticLibrary_ObjC */ = {
+ isa = PBXGroup;
+ children = (
+ 53FBB4268BA34C04D5E32FB1 /* Module */,
+ F853E823D826B2DCA407AEA1 /* StaticLibrary_ObjC.h */,
+ 3BE447BCB0528DE1776DE2F0 /* StaticLibrary_ObjC.m */,
+ );
+ path = StaticLibrary_ObjC;
+ sourceTree = "";
+ };
+ D42109390CD998BAF417FEF7 /* Mac */ = {
+ isa = PBXGroup;
+ children = (
+ 7601CC56C42BD6A1D4A75AEA /* Result.framework */,
+ );
+ path = Mac;
+ sourceTree = "";
+ };
+ D5532FE12C5B6CC1A7F3E3D1 /* Configs */ = {
+ isa = PBXGroup;
+ children = (
+ 797FC015E4199F24EE43C159 /* base.xcconfig */,
+ 28B6600F3CDA6F15633D2134 /* config.xcconfig */,
+ );
+ path = Configs;
+ sourceTree = "";
+ };
+ E8A7C596497AB5EFE54C4C67 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ F18408A818972A0675B115E4 /* App_Clip_Tests.xctest */,
+ 9759A19BAD2C50FCECF7D3C1 /* App_Clip_UITests.xctest */,
+ C22BEDE0B2217312642FADA2 /* App_Clip.app */,
+ 7ACB8439596DD7A77FD11AFD /* App_iOS_Tests.xctest */,
+ C782AA5939417FFD3CF8EB52 /* App_iOS_UITests.xctest */,
+ E94FA789791614CFD0F98C26 /* App_iOS_With_Clip.app */,
+ 115047E35C1A4697DEC6D83F /* App_iOS.app */,
+ C0ACDDAF456079BA0099BFCE /* App_macOS_Tests.xctest */,
+ DF3C1E903F8399E193F3B4BA /* App_macOS.app */,
+ 02C5C670B0624A007BCB341D /* App_watchOS Extension.appex */,
+ BB4C1F0CB031F894B46533E0 /* App_watchOS.app */,
+ D88BF5054CA820ED443AC1F9 /* EntitledApp.app */,
+ 1B4D9FADD8956DC163813272 /* Framework.framework */,
+ 775BF5CB0D9F73D43A7A617A /* Framework.framework */,
+ 20B4D4D4A77434FA5593E35D /* Framework.framework */,
+ A89D9F16591C365D568A0BA4 /* Framework.framework */,
+ 0C6EA871817E3A864FDE5DA1 /* Framework2.framework */,
+ 81EEE090725ECD1354287E74 /* Framework2.framework */,
+ E2A15F2C8142988473574022 /* Framework2.framework */,
+ EADBB714A4B3D4F89D79419E /* Framework2.framework */,
+ 239041E1C2665F9EB8AEB019 /* iMessageApp.app */,
+ 6C14AF20FB1E07BF9D32937E /* iMessageExtension.appex */,
+ 7CBC1BDF40FEDAC0DB9ACFFD /* iMessageStickersExtension.appex */,
+ 6BAFC2D775612C35F4F1897F /* libStaticLibrary_ObjC.a */,
+ 376BA5774B91C2D6DA8F6C39 /* libStaticLibrary_ObjC.a */,
+ F55FFC5DC497CF889F859496 /* libStaticLibrary_ObjC.a */,
+ 4FFF3A7EBB86F6500589ABDD /* libStaticLibrary_ObjC.a */,
+ A74AC60A5F465A6542431675 /* libStaticLibrary_Swift.a */,
+ 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */,
+ 3BAAEBEC8B795DCF1C9C5ADE /* Tool */,
+ 51E2D479CB960CB44EB545C6 /* XPC Service.xpc */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ E983D6835D9460CCFC7E53C2 /* App_macOS_Tests */ = {
+ isa = PBXGroup;
+ children = (
+ 618546FAE1D216BFFA06DE35 /* Info.plist */,
+ 68F16F683711ECD7CC9C43EC /* TestProjectTests.swift */,
+ );
+ path = App_macOS_Tests;
+ sourceTree = "";
+ };
+ EFF9DC82C1B9EA1B47804816 /* iMessageStickers */ = {
+ isa = PBXGroup;
+ children = (
+ 4402963B58134A6066B9E943 /* Assets.xcassets */,
+ 334F263B3704264D929F4414 /* Info.plist */,
+ );
+ path = iMessageStickers;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 2F621E72C41C6F0E359F1CA5 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7AD5DA085B8A8182D006BF97 /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 35F48F6942C6603620B5272D /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D584474E14DF674265501DA7 /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 42B63956FC51459D9C131348 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0C7A6D06465E72F6D4DDA65B /* Headers in Headers */,
+ 66ED5AE47EDD03A3DBBDF552 /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 55057164007640AC701A07CE /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F0E1973A958FCDE8CE09F5E /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5A1839273A285D74BB199B27 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2CBE0DC8AC249AD1E42DC593 /* Headers in Headers */,
+ 18666A1E5DE5F5B2D48ED872 /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5E8065203C5738ACE91D4D4C /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 557415FFAD88A691DF87B917 /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D8324BF10D443128242BFBF1 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D94D5D2D9EF9B359DEE438F6 /* Headers in Headers */,
+ 24FD80AC771EAD5DEA2FB43F /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DA5B84262385E32108A96880 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FFFAEFA20D72082E2888D56D /* Headers in Headers */,
+ 8B078640745463EC45519361 /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F065DD45D12B8EB011254C45 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4D67F7E55015EFBDA73E307F /* MyFramework.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXLegacyTarget section */
+ 1765579FCB7609C001BB1488 /* Legacy */ = {
+ isa = PBXLegacyTarget;
+ buildConfigurationList = 12219412F67F790403913F07 /* Build configuration list for PBXLegacyTarget "Legacy" */;
+ buildPhases = (
+ CDD0499E6DAD48E8BC32C503 /* Sources */,
+ );
+ buildToolPath = /usr/bin/true;
+ dependencies = (
+ );
+ name = Legacy;
+ passBuildSettingsInEnvironment = 1;
+ productName = Legacy;
+ };
+/* End PBXLegacyTarget section */
+
+/* Begin PBXNativeTarget section */
+ 15A12B9A8B7A477CF2D4ABEF /* App_watchOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D8F179BDF8E4EF8A9DF9D8B7 /* Build configuration list for PBXNativeTarget "App_watchOS" */;
+ buildPhases = (
+ B771A52C53992E86CC375F81 /* Sources */,
+ 541E93B3FAC6738328D848A9 /* Resources */,
+ 89F3F9E096C5559317B37165 /* Embed App Extensions */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 6F2B0CFA463F069B3F4857EF /* PBXTargetDependency */,
+ );
+ name = App_watchOS;
+ productName = App_watchOS;
+ productReference = BB4C1F0CB031F894B46533E0 /* App_watchOS.app */;
+ productType = "com.apple.product-type.application.watchapp2";
+ };
+ 1DD1EB52ED39F468AF836C80 /* Framework2_tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6BB95AFCC887A7C884112DCD /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */;
+ buildPhases = (
+ 2F621E72C41C6F0E359F1CA5 /* Headers */,
+ F35CD0E35C79019C8412A011 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework2_tvOS;
+ productName = Framework2_tvOS;
+ productReference = E2A15F2C8142988473574022 /* Framework2.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 21D7F6A04EF6BA1329685C17 /* App_iOS_With_Clip */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1245739E28D036CED2FF55C1 /* Build configuration list for PBXNativeTarget "App_iOS_With_Clip" */;
+ buildPhases = (
+ 3153BE680CE6A42770AA895C /* Sources */,
+ BBAF3F5A94735C7DE2A6A827 /* Resources */,
+ 1C42D5F7BAE0F2979CC08ED8 /* Carthage */,
+ 57AAA51FE44B9280D0F3C9F6 /* Frameworks */,
+ 29EAAC76E47D07B8D8F50262 /* Embed App Clips */,
+ 108FC2F1B37B100230F6C0C5 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ D8B398F93CADCBB7ACF6CD9B /* PBXTargetDependency */,
+ A9BCB911887308296B1CA4F7 /* PBXTargetDependency */,
+ 63AA55FB95FBE6655AF2BC44 /* PBXTargetDependency */,
+ );
+ name = App_iOS_With_Clip;
+ productName = App_iOS_With_Clip;
+ productReference = E94FA789791614CFD0F98C26 /* App_iOS_With_Clip.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 242476187403208F30D3219F /* Framework_iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6107B10D2E2D953A15120917 /* Build configuration list for PBXNativeTarget "Framework_iOS" */;
+ buildPhases = (
+ DA5B84262385E32108A96880 /* Headers */,
+ F26C0DA46E6368299CB30667 /* Sources */,
+ 8425BF17AF010D7E10061AB3 /* Frameworks */,
+ 5EC541AC97EEFAF38B3C1C17 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 4772363EE5B936288A33F247 /* PBXTargetDependency */,
+ );
+ name = Framework_iOS;
+ productName = Framework_iOS;
+ productReference = 1B4D9FADD8956DC163813272 /* Framework.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 34EF687C75C46BA8E8701BAB /* App_macOS_Tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C7E8A05AB55B088CE727B579 /* Build configuration list for PBXNativeTarget "App_macOS_Tests" */;
+ buildPhases = (
+ 65BD1A9FF4490B11C263E501 /* Sources */,
+ 9DEE5A10D294FF2BD9A5233C /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ CFA15A6B9BBC6ABEA148E61B /* PBXTargetDependency */,
+ );
+ name = App_macOS_Tests;
+ productName = App_macOS_Tests;
+ productReference = C0ACDDAF456079BA0099BFCE /* App_macOS_Tests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 3DBB411AF8D365588E21D8CA /* StaticLibrary_ObjC_iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = BCC8658A349BEF8B35DCEE45 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */;
+ buildPhases = (
+ 1C41E253B853711670514ECC /* CopyFiles */,
+ 07D5C6D7C8F6A3942C2254AB /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = StaticLibrary_ObjC_iOS;
+ productName = StaticLibrary_ObjC_iOS;
+ productReference = 6BAFC2D775612C35F4F1897F /* libStaticLibrary_ObjC.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 3FCF5A083151C7E22B24E807 /* StaticLibrary_ObjC_macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8ABE44BA99ABFD6518573B75 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */;
+ buildPhases = (
+ 883C11C8EE5A3B03232F4D48 /* CopyFiles */,
+ B41D9338CACB491A234DE462 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = StaticLibrary_ObjC_macOS;
+ productName = StaticLibrary_ObjC_macOS;
+ productReference = 376BA5774B91C2D6DA8F6C39 /* libStaticLibrary_ObjC.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 4D1BB58561A59EB6850A2D6D /* EntitledApp */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = FBA5F15A7524F82764D43342 /* Build configuration list for PBXNativeTarget "EntitledApp" */;
+ buildPhases = (
+ 50E46638726052318507CD67 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = EntitledApp;
+ productName = EntitledApp;
+ productReference = D88BF5054CA820ED443AC1F9 /* EntitledApp.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 5239298BB84B4FDDFD84469E /* StaticLibrary_ObjC_watchOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = BDE5A3172EAD9560272E40D5 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */;
+ buildPhases = (
+ 39EF6E709D5336CB216DC2FB /* CopyFiles */,
+ F1AE193E80AAC8D74BB27FBD /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = StaticLibrary_ObjC_watchOS;
+ productName = StaticLibrary_ObjC_watchOS;
+ productReference = 4FFF3A7EBB86F6500589ABDD /* libStaticLibrary_ObjC.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 559F6E334A370096461729A9 /* App_Clip */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 29ED792F76D3712D856082B4 /* Build configuration list for PBXNativeTarget "App_Clip" */;
+ buildPhases = (
+ B6030D15F063E956298EFD4C /* Sources */,
+ 56A55A3C072A3ABD19F022C6 /* Resources */,
+ AC27EC6D44E51A1CB441A72E /* Carthage */,
+ 941526D5A3C922259CA39CB6 /* Frameworks */,
+ D1B97A1B112643A756935FA5 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 418D7F4A4C25F618DBC96B1A /* PBXTargetDependency */,
+ 8186C6B9309CD38A38413754 /* PBXTargetDependency */,
+ );
+ name = App_Clip;
+ productName = App_Clip;
+ productReference = C22BEDE0B2217312642FADA2 /* App_Clip.app */;
+ productType = "com.apple.product-type.application.on-demand-install-capable";
+ };
+ 5BE879342590E136B31C840B /* Framework2_watchOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B19E185DEA8C29F4234D14B9 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */;
+ buildPhases = (
+ 55057164007640AC701A07CE /* Headers */,
+ C0EBE6EF18E598977615610E /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework2_watchOS;
+ productName = Framework2_watchOS;
+ productReference = EADBB714A4B3D4F89D79419E /* Framework2.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 5C6E1548456BE821C90E23F0 /* Framework2_iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C7C54B832F1638EA1C8C506D /* Build configuration list for PBXNativeTarget "Framework2_iOS" */;
+ buildPhases = (
+ 35F48F6942C6603620B5272D /* Headers */,
+ 8F62F8852A468CE268D0D9F7 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework2_iOS;
+ productName = Framework2_iOS;
+ productReference = 0C6EA871817E3A864FDE5DA1 /* Framework2.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 6122E4E48939B4937E588B23 /* App_iOS_UITests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = EA0D28F9C2ACF4146025F574 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */;
+ buildPhases = (
+ 9D3F0641DC33C8222ACC3D00 /* Sources */,
+ 779219E7849466ABE0506B3A /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 118733A7DC1EE1870914EA4D /* PBXTargetDependency */,
+ );
+ name = App_iOS_UITests;
+ productName = App_iOS_UITests;
+ productReference = C782AA5939417FFD3CF8EB52 /* App_iOS_UITests.xctest */;
+ productType = "com.apple.product-type.bundle.ui-testing";
+ };
+ 63EAAEAE0535C975295781D4 /* TestFramework */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2FB1406136BDEE50410D00FE /* Build configuration list for PBXNativeTarget "TestFramework" */;
+ buildPhases = (
+ F065DD45D12B8EB011254C45 /* Headers */,
+ 29C8264BCBD504223E822F37 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = TestFramework;
+ productName = TestFramework;
+ productReference = 0838859105FF7ECEE5F2B6E5 /* TestFramework.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 672091195E5FD01EDDFB6714 /* App_Clip_Tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 25A6BD812166D38412B7D296 /* Build configuration list for PBXNativeTarget "App_Clip_Tests" */;
+ buildPhases = (
+ 10E58CDB673A71DD896DE793 /* Sources */,
+ 43C5260C6E5332D5E733D85E /* Frameworks */,
+ 456284554D1A6C53EB39BA4B /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B0BF35FE3796D451CA095789 /* PBXTargetDependency */,
+ 1A8C378E7A510A6E0772386F /* PBXTargetDependency */,
+ );
+ name = App_Clip_Tests;
+ productName = App_Clip_Tests;
+ productReference = F18408A818972A0675B115E4 /* App_Clip_Tests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 6BBA6FB48BEE245ED177B75E /* App_Clip_UITests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 154811E763287E0982E4010C /* Build configuration list for PBXNativeTarget "App_Clip_UITests" */;
+ buildPhases = (
+ C7C8DBC92C9E0658B7D9EE40 /* Sources */,
+ 3FE33BF71F952904B55B2C67 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 789CE321F7B8ECC624741135 /* PBXTargetDependency */,
+ );
+ name = App_Clip_UITests;
+ productName = App_Clip_UITests;
+ productReference = 9759A19BAD2C50FCECF7D3C1 /* App_Clip_UITests.xctest */;
+ productType = "com.apple.product-type.bundle.ui-testing";
+ };
+ 786AB2F08EC86516E5EA092F /* Framework_watchOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = DA4742F9D7A73F3DB2B4AC87 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */;
+ buildPhases = (
+ 42B63956FC51459D9C131348 /* Headers */,
+ 2C73503B473B56249F74023D /* Sources */,
+ F3D411695D4C043FEF3265B7 /* Frameworks */,
+ 3C88C9760FFCFF5C729DD22C /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B2F2BF8FB4CBBFE658694D3E /* PBXTargetDependency */,
+ );
+ name = Framework_watchOS;
+ productName = Framework_watchOS;
+ productReference = A89D9F16591C365D568A0BA4 /* Framework.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 8507B864DA27764F1EA6962C /* StaticLibrary_ObjC_tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A664263A7E39D94679AD5F74 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */;
+ buildPhases = (
+ F0CE57DCC7A58AFEA0EB1EF5 /* CopyFiles */,
+ 5AC22827901924EE4C7D2EE4 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = StaticLibrary_ObjC_tvOS;
+ productName = StaticLibrary_ObjC_tvOS;
+ productReference = F55FFC5DC497CF889F859496 /* libStaticLibrary_ObjC.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 87194DCB93BF1A83EE181FBF /* iMessageStickersExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = DD8DBB7F2CADB523598B1D3A /* Build configuration list for PBXNativeTarget "iMessageStickersExtension" */;
+ buildPhases = (
+ 44D2699A7F63415B1C76D682 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = iMessageStickersExtension;
+ productName = iMessageStickersExtension;
+ productReference = 7CBC1BDF40FEDAC0DB9ACFFD /* iMessageStickersExtension.appex */;
+ productType = "com.apple.product-type.app-extension.messages-sticker-pack";
+ };
+ 974B3EC2FF4FBAA1513A2950 /* Framework_macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = FECC727EC6A1CBB859258849 /* Build configuration list for PBXNativeTarget "Framework_macOS" */;
+ buildPhases = (
+ 5A1839273A285D74BB199B27 /* Headers */,
+ 220AD6BBDDF25CEF7C6FB356 /* Sources */,
+ 286A764EB49712A6BE938CD9 /* Frameworks */,
+ A2C7EEAF062CD944C219DD8F /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 219E518662CD7D0BA64246D9 /* PBXTargetDependency */,
+ );
+ name = Framework_macOS;
+ productName = Framework_macOS;
+ productReference = 775BF5CB0D9F73D43A7A617A /* Framework.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 991BCE8E861305DE596EACFE /* App_iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 9EDED21A0C3AD1691C58401D /* Build configuration list for PBXNativeTarget "App_iOS" */;
+ buildPhases = (
+ F6445A97D8E8467AFCE9F0B6 /* Sources */,
+ 21BCDA8027E0DED5FD1F46B2 /* Resources */,
+ A603A9260F95BC8B6B945B34 /* CopyFiles */,
+ 4620AC2C57607DEDA627907C /* Carthage */,
+ 817E815A267F7A93B27C28C1 /* Frameworks */,
+ E0B58B04AD09D3B4B1486315 /* Copy Bundle Resources */,
+ 5FF5F332311FF39E3B020BD9 /* Embed Frameworks */,
+ EC033AB632FAAA03F670D215 /* Embed Watch Content */,
+ 70145FE98044319FDDC0BB29 /* Strip Unused Architectures from Frameworks */,
+ 6300B083DBBB177437172F25 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B17852290DB066C640ABDC2F /* PBXTargetDependency */,
+ BE366BE8CC8B292A296FDAAD /* PBXTargetDependency */,
+ 578F376EB1922ADCB9482DE3 /* PBXTargetDependency */,
+ F637B36CED5B903A9B1EEAE4 /* PBXTargetDependency */,
+ C1F2B62314C8601132D452FE /* PBXTargetDependency */,
+ E14514F1BEE89DF60E569CC5 /* PBXTargetDependency */,
+ );
+ name = App_iOS;
+ productName = App_iOS;
+ productReference = 115047E35C1A4697DEC6D83F /* App_iOS.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 9E7BCAAA9E855251D33C5730 /* App_iOS_Tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8B6F763B758ED180046D3908 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */;
+ buildPhases = (
+ A4664FD3828FBEF2CD8380C4 /* Sources */,
+ 93C6B66FB2295D9FE2D068F0 /* Frameworks */,
+ 807E1CB99AAD2470DC373BC0 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 222B62D87784D9E40353D4F9 /* PBXTargetDependency */,
+ DBBCD483619808FD913E8199 /* PBXTargetDependency */,
+ );
+ name = App_iOS_Tests;
+ productName = App_iOS_Tests;
+ productReference = 7ACB8439596DD7A77FD11AFD /* App_iOS_Tests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ C0A9408F6C298624A7E2A024 /* Framework2_macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = DD2C419331E24B123E0CBC9E /* Build configuration list for PBXNativeTarget "Framework2_macOS" */;
+ buildPhases = (
+ 5E8065203C5738ACE91D4D4C /* Headers */,
+ 308A0B0D609D0E21A320A468 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework2_macOS;
+ productName = Framework2_macOS;
+ productReference = 81EEE090725ECD1354287E74 /* Framework2.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ D691B96B3888D27A6050EF10 /* Framework_tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D5A2344247FF33D62704E2C2 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */;
+ buildPhases = (
+ D8324BF10D443128242BFBF1 /* Headers */,
+ BEE11A37E1AD9A0DFE7376FA /* Sources */,
+ 6DE5ACEB01740726A5F7FE20 /* Frameworks */,
+ 1B8F5C5B489BAFF4289F6CE5 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ F70C9C12AA4664B4AA83B89D /* PBXTargetDependency */,
+ );
+ name = Framework_tvOS;
+ productName = Framework_tvOS;
+ productReference = 20B4D4D4A77434FA5593E35D /* Framework.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ D816F64720D160B9FE1F5AB1 /* StaticLibrary_Swift */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 51ECBDC8632467DA3ADA886F /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */;
+ buildPhases = (
+ 7B234BC963946F3563B71335 /* Sources */,
+ 694D2893BD4C5D54ABAA71C3 /* Copy Swift Objective-C Interface Header */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = StaticLibrary_Swift;
+ productName = StaticLibrary_Swift;
+ productReference = A74AC60A5F465A6542431675 /* libStaticLibrary_Swift.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ D8592DE6C0BC77BE0D4A2FAB /* XPC Service */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F5B278C2B6590DD1F0CBDE04 /* Build configuration list for PBXNativeTarget "XPC Service" */;
+ buildPhases = (
+ C3B2824FCF15AA1C94661F47 /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "XPC Service";
+ productName = "XPC Service";
+ productReference = 51E2D479CB960CB44EB545C6 /* XPC Service.xpc */;
+ productType = "com.apple.product-type.xpc-service";
+ };
+ DAF9935ECEC17AA561D28998 /* App_watchOS Extension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E7F77B0DBCCD253D8A6B2645 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */;
+ buildPhases = (
+ DA3B1A921C17686292F054E9 /* Sources */,
+ B14B691D85C703DE27160E6C /* Resources */,
+ 6A403DD09160A25A14C4D7E3 /* Carthage */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "App_watchOS Extension";
+ productName = "App_watchOS Extension";
+ productReference = 02C5C670B0624A007BCB341D /* App_watchOS Extension.appex */;
+ productType = "com.apple.product-type.watchkit2-extension";
+ };
+ E8BDC848AB4F8D5927ADB55B /* App_macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 7FCE6665950846F21D6BA7F1 /* Build configuration list for PBXNativeTarget "App_macOS" */;
+ buildPhases = (
+ 8C41B2F647E4DFC95A653712 /* Sources */,
+ A904A902001656E96B24C7A9 /* Resources */,
+ 9830A88A58F9591CFE7662C9 /* CopyFiles */,
+ 5A2BDC62A00DF008470998CA /* Frameworks */,
+ B4F76A1390264F5E325C3C1E /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 579118B5FDFABB980065C769 /* PBXTargetDependency */,
+ EAF163F407A28ED197A7BC3E /* PBXTargetDependency */,
+ 0ACA28EFA6CBFE1E8FA8FBDA /* PBXTargetDependency */,
+ );
+ name = App_macOS;
+ productName = App_macOS;
+ productReference = DF3C1E903F8399E193F3B4BA /* App_macOS.app */;
+ productType = "com.apple.product-type.application";
+ };
+ EDE7907E34D077B346FC4CF1 /* iMessageExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 04F7DFEC84B28DEF04F71F0A /* Build configuration list for PBXNativeTarget "iMessageExtension" */;
+ buildPhases = (
+ DF1ADFADCFCF58DB93E22F75 /* Sources */,
+ 0F3DD10DE4BA9F1995F576A8 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = iMessageExtension;
+ productName = iMessageExtension;
+ productReference = 6C14AF20FB1E07BF9D32937E /* iMessageExtension.appex */;
+ productType = "com.apple.product-type.app-extension.messages";
+ };
+ FF3DC3DF2AA3AE02377647C9 /* iMessageApp */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 65393391FA3D521A2D096C75 /* Build configuration list for PBXNativeTarget "iMessageApp" */;
+ buildPhases = (
+ 6D95B3C6406DCAD3794FBFCD /* Resources */,
+ 93EF9E66AA5ED7DE1C6A6FAD /* Embed App Extensions */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 39A6FEDAF7A2B3D517ED1E80 /* PBXTargetDependency */,
+ );
+ name = iMessageApp;
+ productName = iMessageApp;
+ productReference = 239041E1C2665F9EB8AEB019 /* iMessageApp.app */;
+ productType = "com.apple.product-type.application.messages";
+ };
+ FF646CE49D21E77229B5316B /* Tool */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = FB9AF55D22482CDEE8E9AC49 /* Build configuration list for PBXNativeTarget "Tool" */;
+ buildPhases = (
+ AC7B03CED863AF9296A0A7DF /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Tool;
+ productName = Tool;
+ productReference = 3BAAEBEC8B795DCF1C9C5ADE /* Tool */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 7467FBF059DC784B5601CA7E /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1020;
+ TargetAttributes = {
+ 21D7F6A04EF6BA1329685C17 = {
+ ProvisioningStyle = Automatic;
+ };
+ 6122E4E48939B4937E588B23 = {
+ TestTargetID = 991BCE8E861305DE596EACFE;
+ };
+ 6BBA6FB48BEE245ED177B75E = {
+ TestTargetID = 559F6E334A370096461729A9;
+ };
+ 991BCE8E861305DE596EACFE = {
+ ProvisioningStyle = Automatic;
+ };
+ 9C27C8C394ADD16FDCF6E624 = {
+ CUSTOM = value;
+ };
+ E8BDC848AB4F8D5927ADB55B = {
+ ProvisioningStyle = Automatic;
+ };
+ };
+ knownAssetTags = (
+ tag1,
+ tag2,
+ );
+ };
+ buildConfigurationList = 2961C7042EE5F08A22AAF183 /* Build configuration list for PBXProject "ProjectXcode12" */;
+ compatibilityVersion = "Xcode 10.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ Base,
+ en,
+ );
+ mainGroup = 54E9E53007DE91CA40153A40;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 63CA1B81E0D9E4D5F1683D64 /* Products */;
+ ProjectRef = 43EA7AFC9AC8E9116A228613 /* AnotherProject */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 559F6E334A370096461729A9 /* App_Clip */,
+ 672091195E5FD01EDDFB6714 /* App_Clip_Tests */,
+ 6BBA6FB48BEE245ED177B75E /* App_Clip_UITests */,
+ 991BCE8E861305DE596EACFE /* App_iOS */,
+ 9E7BCAAA9E855251D33C5730 /* App_iOS_Tests */,
+ 6122E4E48939B4937E588B23 /* App_iOS_UITests */,
+ 21D7F6A04EF6BA1329685C17 /* App_iOS_With_Clip */,
+ E8BDC848AB4F8D5927ADB55B /* App_macOS */,
+ 34EF687C75C46BA8E8701BAB /* App_macOS_Tests */,
+ 15A12B9A8B7A477CF2D4ABEF /* App_watchOS */,
+ DAF9935ECEC17AA561D28998 /* App_watchOS Extension */,
+ 4D1BB58561A59EB6850A2D6D /* EntitledApp */,
+ 5C6E1548456BE821C90E23F0 /* Framework2_iOS */,
+ C0A9408F6C298624A7E2A024 /* Framework2_macOS */,
+ 1DD1EB52ED39F468AF836C80 /* Framework2_tvOS */,
+ 5BE879342590E136B31C840B /* Framework2_watchOS */,
+ 242476187403208F30D3219F /* Framework_iOS */,
+ 974B3EC2FF4FBAA1513A2950 /* Framework_macOS */,
+ D691B96B3888D27A6050EF10 /* Framework_tvOS */,
+ 786AB2F08EC86516E5EA092F /* Framework_watchOS */,
+ 1765579FCB7609C001BB1488 /* Legacy */,
+ 3DBB411AF8D365588E21D8CA /* StaticLibrary_ObjC_iOS */,
+ 3FCF5A083151C7E22B24E807 /* StaticLibrary_ObjC_macOS */,
+ 8507B864DA27764F1EA6962C /* StaticLibrary_ObjC_tvOS */,
+ 5239298BB84B4FDDFD84469E /* StaticLibrary_ObjC_watchOS */,
+ D816F64720D160B9FE1F5AB1 /* StaticLibrary_Swift */,
+ 9C27C8C394ADD16FDCF6E624 /* SuperTarget */,
+ 63EAAEAE0535C975295781D4 /* TestFramework */,
+ FF646CE49D21E77229B5316B /* Tool */,
+ D8592DE6C0BC77BE0D4A2FAB /* XPC Service */,
+ FF3DC3DF2AA3AE02377647C9 /* iMessageApp */,
+ EDE7907E34D077B346FC4CF1 /* iMessageExtension */,
+ 87194DCB93BF1A83EE181FBF /* iMessageStickersExtension */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ FF10A8919F65E6609784780A /* ExternalTarget.framework */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.framework;
+ path = ExternalTarget.framework;
+ remoteRef = D65DFD803579AB5662714F99 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 0F3DD10DE4BA9F1995F576A8 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 85332C85D63B652CAB836FB9 /* Assets.xcassets in Resources */,
+ 16BD7E732A3294D973E79337 /* MainInterface.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 21BCDA8027E0DED5FD1F46B2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 38C639CCE01DB1DC4C2A7101 /* Assets.xcassets in Resources */,
+ FA7F5B42ACAEA016400A195A /* LaunchScreen.storyboard in Resources */,
+ AC800EB90200F927CE8ADC17 /* Localizable.strings in Resources */,
+ 9A8AB7DE8957C82A8807559F /* Localizable.stringsdict in Resources */,
+ 966364F9A5B152ED9292B335 /* LocalizedStoryboard.storyboard in Resources */,
+ 89D00F3D1A87503F10AE7432 /* Main.storyboard in Resources */,
+ 0060461B613150BA7D9CAF95 /* MyBundle.bundle in Resources */,
+ E4D57896F90E7AEC6FED0634 /* ResourceFolder in Resources */,
+ A5850DA4EB6491F7B3588832 /* SceneKitCatalog.scnassets in Resources */,
+ 81724CEEA748160B950C85B5 /* Settings.bundle in Resources */,
+ 11B2B5EF7172B6B837D951AA /* StandaloneAssets.xcassets in Resources */,
+ C57A966770059A0014B3326D /* example.mp4 in Resources */,
+ CC3D560B3E97CAAAC8B6076E /* iMessageApp.app in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 44D2699A7F63415B1C76D682 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6CA40F7223581AF6628DB4DE /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 541E93B3FAC6738328D848A9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1870224DAA5300F2EEB5C728 /* Assets.xcassets in Resources */,
+ 064BCA54DD18E6F5EAFE5C1C /* Interface.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 56A55A3C072A3ABD19F022C6 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 129640F84D0905CE479FF083 /* Assets.xcassets in Resources */,
+ 60B0A79EF778752B7F574D8A /* LaunchScreen.storyboard in Resources */,
+ 4FE6138F5867CA1D93C6EA04 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6D95B3C6406DCAD3794FBFCD /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ ED7050A16D1A986B9F47AC43 /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A904A902001656E96B24C7A9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 793BD03EDB3A072945B82C27 /* Assets.xcassets in Resources */,
+ F94B7016C76FC0A6B74111B3 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B14B691D85C703DE27160E6C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9BE414C2C4CE2BA52F20E38D /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ BBAF3F5A94735C7DE2A6A827 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DCFAD099E6E129BDE43E1B79 /* Assets.xcassets in Resources */,
+ C875EA6DE9F7090BDB27D6B9 /* LaunchScreen.storyboard in Resources */,
+ 30E0C7F5317477917CFFCE52 /* Localizable.strings in Resources */,
+ 40906CFD3662304ACD172B5C /* Localizable.stringsdict in Resources */,
+ 3A0A1B20E2149C6B53848EAC /* LocalizedStoryboard.storyboard in Resources */,
+ 329F958FE3152A51D6DBDC4F /* Main.storyboard in Resources */,
+ 50E29FF7B2936111F9189780 /* Settings.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 1B8F5C5B489BAFF4289F6CE5 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ 1C42D5F7BAE0F2979CC08ED8 /* Carthage */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/Carthage/Build/iOS/Result.framework",
+ );
+ name = Carthage;
+ outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "carthage copy-frameworks\n";
+ };
+ 3C88C9760FFCFF5C729DD22C /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ 4620AC2C57607DEDA627907C /* Carthage */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/Carthage/Build/iOS/Result.framework",
+ );
+ name = Carthage;
+ outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "carthage copy-frameworks\n";
+ };
+ 5EC541AC97EEFAF38B3C1C17 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ 6300B083DBBB177437172F25 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ App_iOS/inputList.xcfilelist,
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputFileListPaths = (
+ App_iOS/outputList.xcfilelist,
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script!\"\n";
+ };
+ 694D2893BD4C5D54ABAA71C3 /* Copy Swift Objective-C Interface Header */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)",
+ );
+ name = "Copy Swift Objective-C Interface Header";
+ outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "ditto \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ };
+ 6A403DD09160A25A14C4D7E3 /* Carthage */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/Carthage/Build/watchOS/Result.framework",
+ );
+ name = Carthage;
+ outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "carthage copy-frameworks\n";
+ };
+ 70145FE98044319FDDC0BB29 /* Strip Unused Architectures from Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Strip Unused Architectures from Frameworks";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ shellPath = /bin/sh;
+ shellScript = "################################################################################\n#\n# Copyright 2015 Realm Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n################################################################################\n\n# This script strips all non-valid architectures from dynamic libraries in\n# the application's `Frameworks` directory.\n#\n# The following environment variables are required:\n#\n# BUILT_PRODUCTS_DIR\n# FRAMEWORKS_FOLDER_PATH\n# VALID_ARCHS\n# EXPANDED_CODE_SIGN_IDENTITY\n\n\n# Signs a framework with the provided identity\ncode_sign() {\n # Use the current code_sign_identitiy\n echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n echo \"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1\"\n /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"\n}\n\n# Set working directory to product’s embedded frameworks\ncd \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nif [ \"$ACTION\" = \"install\" ]; then\n echo \"Copy .bcsymbolmap files to .xcarchive\"\n find . -name '*.bcsymbolmap' -type f -exec mv {} \"${CONFIGURATION_BUILD_DIR}\" \\;\nelse\n # Delete *.bcsymbolmap files from framework bundle unless archiving\n find . -name '*.bcsymbolmap' -type f -exec rm -rf \"{}\" +\\;\nfi\n\necho \"Stripping frameworks\"\n\nfor file in $(find . -type f -perm +111); do\n # Skip non-dynamic libraries\n if ! [[ \"$(file \"$file\")\" == *\"dynamically linked shared library\"* ]]; then\n continue\n fi\n # Get architectures for current file\n archs=\"$(lipo -info \"${file}\" | rev | cut -d ':' -f1 | rev)\"\n stripped=\"\"\n for arch in $archs; do\n if ! [[ \"${VALID_ARCHS}\" == *\"$arch\"* ]]; then\n # Strip non-valid architectures in-place\n lipo -remove \"$arch\" -output \"$file\" \"$file\" || exit 1\n stripped=\"$stripped $arch\"\n fi\n done\n if [[ \"$stripped\" != \"\" ]]; then\n echo \"Stripped $file of architectures:$stripped\"\n if [ \"${CODE_SIGNING_REQUIRED}\" == \"YES\" ]; then\n code_sign \"${file}\"\n fi\n fi\ndone\n";
+ };
+ A2C7EEAF062CD944C219DD8F /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ AC27EC6D44E51A1CB441A72E /* Carthage */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/Carthage/Build/iOS/Result.framework",
+ );
+ name = Carthage;
+ outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "carthage copy-frameworks\n";
+ };
+ D4BA2D61D3DC727DA6E90F7E /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"do the thing\"";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 07D5C6D7C8F6A3942C2254AB /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0CD02F062979E2FD36D8D524 /* StaticLibrary_ObjC.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 10E58CDB673A71DD896DE793 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74E1D133AB01AA3424C6C540 /* TestProjectTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 220AD6BBDDF25CEF7C6FB356 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 83A04F08119B1A648940B631 /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 29C8264BCBD504223E822F37 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 35E3C0F60528783F7A6BFF9A /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2C73503B473B56249F74023D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E267E405615EF1727C3D49C7 /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 308A0B0D609D0E21A320A468 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0EDE93FD1B8EEA5E757A3EE1 /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3153BE680CE6A42770AA895C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B3863DD3BC5038A7987B495F /* AppDelegate.swift in Sources */,
+ 5F3CD9C98D6FCF78A371850F /* Model.xcdatamodeld in Sources */,
+ 16B6081EBDCE7DDBC89DDFEE /* Standalone.swift in Sources */,
+ 37556609B05600FC511F540B /* SwiftFileInDotPath.swift in Sources */,
+ FB753FD180515AE293B2485C /* ViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 50E46638726052318507CD67 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5AC22827901924EE4C7D2EE4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2778626BA6AC7257203DFA47 /* StaticLibrary_ObjC.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 65BD1A9FF4490B11C263E501 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2A39623B596284EC9DCDAE1D /* TestProjectTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7B234BC963946F3563B71335 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 00412000C589181F73BB9C88 /* StaticLibrary.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8C41B2F647E4DFC95A653712 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2514149FFB3E6498D579DBBB /* AppDelegate.swift in Sources */,
+ BF7D701BA63380CE76046BDB /* Standalone.swift in Sources */,
+ 0035E2ED473E71B573FA73CF /* ViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8F62F8852A468CE268D0D9F7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 078DC5844DEA2DB6F020D455 /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9D3F0641DC33C8222ACC3D00 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5B6902E1019616CCCC8C84D7 /* TestProjectUITests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A4664FD3828FBEF2CD8380C4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B09EE60448F8EBD4546D3C41 /* TestProjectTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ AC7B03CED863AF9296A0A7DF /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 092201CC0E7C18615C0B212A /* main.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B41D9338CACB491A234DE462 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AF734D3BF6BA8808A2F1916C /* StaticLibrary_ObjC.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B6030D15F063E956298EFD4C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 04141410CA15B3FBC091FFEE /* AppDelegate.swift in Sources */,
+ D6A9F9FE464839B860307F97 /* ViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B771A52C53992E86CC375F81 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ BEE11A37E1AD9A0DFE7376FA /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FAD05AB024D2E3CB4EDBFAF4 /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C0EBE6EF18E598977615610E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4BC91284F91B188CBBEBA38C /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C3B2824FCF15AA1C94661F47 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D6E1725E31FE9D8D8B0075AD /* XPC_Service.m in Sources */,
+ 922FA3335972E2600AD9C68D /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C7C8DBC92C9E0658B7D9EE40 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F316B77453C5A4A9692166AF /* TestProjectUITests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ CDD0499E6DAD48E8BC32C503 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DA3B1A921C17686292F054E9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9A61DB3A89D0636D62F6134C /* ExtensionDelegate.swift in Sources */,
+ B5B0D4EAB3B78D5CE452E100 /* InterfaceController.swift in Sources */,
+ BF1837BBD7E8DA1998C80F7A /* NotificationController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DF1ADFADCFCF58DB93E22F75 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 820158D082BDA00E14BD61E2 /* MessagesViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F1AE193E80AAC8D74BB27FBD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7A218049DED8B2CD3D8AD8B6 /* StaticLibrary_ObjC.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F26C0DA46E6368299CB30667 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FE6A3F3C7247CD2294753909 /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F35CD0E35C79019C8412A011 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C42838B5395A013CF38EA48E /* FrameworkFile.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F6445A97D8E8467AFCE9F0B6 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6F988879F73866310CE43F37 /* AppDelegate.swift in Sources */,
+ 751D7A8B90209DDAAB9EB73E /* File1.swift in Sources */,
+ 48B822DF3314CCF76EE74D6D /* File2.swift in Sources */,
+ 3D8580B33361272D45C61A85 /* Model.xcdatamodeld in Sources */,
+ 8F2C2446CC90D71637CA98DE /* Model.xcmappingmodel in Sources */,
+ B5BD65590F7EE7C3963B5122 /* MoreUnder.swift in Sources */,
+ 37EDF33D6B4105F07070FB56 /* Standalone.swift in Sources */,
+ E9AB59E760C7776384AC7E32 /* SwiftFileInDotPath.swift in Sources */,
+ 36FEB01A03A566B43A2C2434 /* ViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 0ACA28EFA6CBFE1E8FA8FBDA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = D8592DE6C0BC77BE0D4A2FAB /* XPC Service */;
+ targetProxy = 1BC468AB18D1F023019F1FBA /* PBXContainerItemProxy */;
+ };
+ 118733A7DC1EE1870914EA4D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 991BCE8E861305DE596EACFE /* App_iOS */;
+ targetProxy = 9D69D471B06AE37AEA2D84E3 /* PBXContainerItemProxy */;
+ };
+ 1A8C378E7A510A6E0772386F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 63EAAEAE0535C975295781D4 /* TestFramework */;
+ targetProxy = 98E077CD4918FF68662C4337 /* PBXContainerItemProxy */;
+ };
+ 219E518662CD7D0BA64246D9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3FCF5A083151C7E22B24E807 /* StaticLibrary_ObjC_macOS */;
+ targetProxy = C0408FA85DFD7E9F59541D2E /* PBXContainerItemProxy */;
+ };
+ 222B62D87784D9E40353D4F9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 991BCE8E861305DE596EACFE /* App_iOS */;
+ targetProxy = 913CC94BAD23FF3E3636E8E5 /* PBXContainerItemProxy */;
+ };
+ 39A6FEDAF7A2B3D517ED1E80 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = EDE7907E34D077B346FC4CF1 /* iMessageExtension */;
+ targetProxy = F2FCFF0F2338D8316F9D8D47 /* PBXContainerItemProxy */;
+ };
+ 418D7F4A4C25F618DBC96B1A /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 242476187403208F30D3219F /* Framework_iOS */;
+ targetProxy = D51CBCA8454A129B3F1C0629 /* PBXContainerItemProxy */;
+ };
+ 4772363EE5B936288A33F247 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3DBB411AF8D365588E21D8CA /* StaticLibrary_ObjC_iOS */;
+ targetProxy = F8D2CC44BE471C9C41F5B1E6 /* PBXContainerItemProxy */;
+ };
+ 53E5D1FE14ECF98F9F9729CF /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 242476187403208F30D3219F /* Framework_iOS */;
+ targetProxy = 4CA2280DE705720E8B851B8E /* PBXContainerItemProxy */;
+ };
+ 578F376EB1922ADCB9482DE3 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 5C6E1548456BE821C90E23F0 /* Framework2_iOS */;
+ targetProxy = 2F6AB4DC84D6D8156D9743ED /* PBXContainerItemProxy */;
+ };
+ 579118B5FDFABB980065C769 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 974B3EC2FF4FBAA1513A2950 /* Framework_macOS */;
+ targetProxy = 4DB3B584A41D1D19DE1B39E1 /* PBXContainerItemProxy */;
+ };
+ 63AA55FB95FBE6655AF2BC44 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3DBB411AF8D365588E21D8CA /* StaticLibrary_ObjC_iOS */;
+ targetProxy = 5A3133C260AB0B2EE767880A /* PBXContainerItemProxy */;
+ };
+ 6F2B0CFA463F069B3F4857EF /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = DAF9935ECEC17AA561D28998 /* App_watchOS Extension */;
+ targetProxy = C68FFE66E063CA163CE1D68B /* PBXContainerItemProxy */;
+ };
+ 789CE321F7B8ECC624741135 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 559F6E334A370096461729A9 /* App_Clip */;
+ targetProxy = 6DEB235CE85E75F90EC6175D /* PBXContainerItemProxy */;
+ };
+ 8186C6B9309CD38A38413754 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3DBB411AF8D365588E21D8CA /* StaticLibrary_ObjC_iOS */;
+ targetProxy = 9C7FA5CABE5A0EC3D5C4055B /* PBXContainerItemProxy */;
+ };
+ 8DF064FE23E39B733B75994D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 991BCE8E861305DE596EACFE /* App_iOS */;
+ targetProxy = 0FA2870744F254DD5E3D8374 /* PBXContainerItemProxy */;
+ };
+ A9BCB911887308296B1CA4F7 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 242476187403208F30D3219F /* Framework_iOS */;
+ targetProxy = 193DD9683611F943D58ADCC6 /* PBXContainerItemProxy */;
+ };
+ B0BF35FE3796D451CA095789 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 559F6E334A370096461729A9 /* App_Clip */;
+ targetProxy = 6D2993924DD47F80ACB3567E /* PBXContainerItemProxy */;
+ };
+ B17852290DB066C640ABDC2F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = ExternalTarget;
+ targetProxy = 8C53BD3BF1B5227C831355F9 /* PBXContainerItemProxy */;
+ };
+ B2F2BF8FB4CBBFE658694D3E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 5239298BB84B4FDDFD84469E /* StaticLibrary_ObjC_watchOS */;
+ targetProxy = 5CFE6D622751CA41654F4B00 /* PBXContainerItemProxy */;
+ };
+ BE366BE8CC8B292A296FDAAD /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 15A12B9A8B7A477CF2D4ABEF /* App_watchOS */;
+ targetProxy = FF4780B89575C7C171A9B401 /* PBXContainerItemProxy */;
+ };
+ C1F2B62314C8601132D452FE /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3DBB411AF8D365588E21D8CA /* StaticLibrary_ObjC_iOS */;
+ targetProxy = F7BDEB5E84BA34C6E32E8C1F /* PBXContainerItemProxy */;
+ };
+ CFA15A6B9BBC6ABEA148E61B /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = E8BDC848AB4F8D5927ADB55B /* App_macOS */;
+ targetProxy = 3BFFB177BC0E51F54F902AE2 /* PBXContainerItemProxy */;
+ };
+ D8B398F93CADCBB7ACF6CD9B /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 559F6E334A370096461729A9 /* App_Clip */;
+ targetProxy = F52878EB4A2F3E2E1F89036F /* PBXContainerItemProxy */;
+ };
+ DBBCD483619808FD913E8199 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 63EAAEAE0535C975295781D4 /* TestFramework */;
+ targetProxy = BB3B4DE7EE8CEE505BBC6DF4 /* PBXContainerItemProxy */;
+ };
+ E14514F1BEE89DF60E569CC5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = FF3DC3DF2AA3AE02377647C9 /* iMessageApp */;
+ targetProxy = D7FD49F1E9A4B29D528D18A5 /* PBXContainerItemProxy */;
+ };
+ EAF163F407A28ED197A7BC3E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3FCF5A083151C7E22B24E807 /* StaticLibrary_ObjC_macOS */;
+ targetProxy = 9F4AAED22329F820EA5DB2F7 /* PBXContainerItemProxy */;
+ };
+ F637B36CED5B903A9B1EEAE4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 242476187403208F30D3219F /* Framework_iOS */;
+ targetProxy = 2EAC3D4B05A43768279E03B7 /* PBXContainerItemProxy */;
+ };
+ F70C9C12AA4664B4AA83B89D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 8507B864DA27764F1EA6962C /* StaticLibrary_ObjC_tvOS */;
+ targetProxy = 12A939B349AFA0D4B2A270EA /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 214F642E7193A3E608845F4B /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ DF5EEB3171D1A7722CD9413A /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 21AA0A827D6C74A605DEE03E /* Localizable.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E4FBD31453FD26F4C7ABD5F9 /* Base */,
+ C16F953828BFF71DEB579075 /* en */,
+ );
+ name = Localizable.strings;
+ sourceTree = "";
+ };
+ 28193039398EB7872CD19490 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 3B4590226C49347F4BC18782 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+ 4AE9A9C885258BF807598F5E /* Localizable.stringsdict */ = {
+ isa = PBXVariantGroup;
+ children = (
+ C4AF74FB9AB607DFA9E07A4E /* Base */,
+ D80E621293876A18B051299F /* en */,
+ );
+ name = Localizable.stringsdict;
+ sourceTree = "";
+ };
+ 556DA72EFDDD94E4E49C0754 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B945C628ACCF26FC51594160 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 5A391BB5F85ECBA78F808646 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E83A520CAE8A4BCF6578C2A9 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+ 7E1427FBA94B073C3FD2830A /* Interface.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ DEC53DADDC767F9AE310B83E /* Base */,
+ );
+ name = Interface.storyboard;
+ sourceTree = "";
+ };
+ 917AA3E4306C1A12FCC17994 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 5DB17246AF97AF5311C1CB7B /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 95933688FAC17B9E7752CB4F /* MainInterface.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 6F98C5891F0CE8C0DEF57B40 /* Base */,
+ );
+ name = MainInterface.storyboard;
+ sourceTree = "";
+ };
+ EE817D9DBEBA01EC4FFCED25 /* LocalizedStoryboard.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ F1188E378718785171F293B6 /* Base */,
+ 6170A2CAD1ABE59888B1F95E /* en */,
+ );
+ name = LocalizedStoryboard.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 02EA7A15EF79E850F9399B41 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;
+ SDKROOT = macosx;
+ };
+ name = "Staging Debug";
+ };
+ 0359995ADD0BFA44E9905752 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = "Production Release";
+ };
+ 03A06B8262F1B39589A3B310 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 04A44577D412ADA4AF40B0CF /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ 053EAED64FF4B9A3B4F86991 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ };
+ name = "Production Debug";
+ };
+ 09AF4A26FD4A80AFB95F39CD /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ 0C7B61BCB19F18E1CAFA9B02 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip";
+ };
+ name = "Staging Debug";
+ };
+ 0D47838E4B33810EB0F412F9 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ 0E9BABB47957C3D52D4A7E4F /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ 114E824F1D0EAA35886DEF0D /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS";
+ };
+ name = "Staging Release";
+ };
+ 115D9C7C569E8D6887075F9D /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "XPC Service/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;
+ SDKROOT = macosx;
+ };
+ name = "Test Release";
+ };
+ 15A1BFD9417590DDD02F6216 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
+ INFOPLIST_FILE = iMessageExtension/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ 15BF441D2B0ED86F6B90EF49 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 15DA3659204C3AFA53F64ED5 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;
+ SDKROOT = macosx;
+ };
+ name = "Test Release";
+ };
+ 167CE7ABBB81B98E243004BF /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_Clip;
+ };
+ name = "Staging Debug";
+ };
+ 16C3E5AA32E607CF8AE94952 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ 172635BE151671235582D608 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip.clip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ 17DF05C2E3715A65EA214144 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ 1978017BCE4AD3F7E426F0F5 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageApp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ 198A1841A62FDD2285BE1DEC /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_VERSION = 5.0;
+ VALIDATE_PRODUCT = YES;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Production Release";
+ };
+ 1B0C38D8839436D77EA16EF1 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS";
+ };
+ name = "Production Debug";
+ };
+ 1B2F2C5941E877806806E44C /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Test Release";
+ };
+ 1D26D189CE20775E78D4CCD8 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_iOS;
+ };
+ name = "Staging Release";
+ };
+ 1D9C86CF49283D1F266E73A9 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 1ECD0F546386B34DBFE6C17F /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 212617C380F45FC243973AA9 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "XPC Service/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;
+ SDKROOT = macosx;
+ };
+ name = "Production Debug";
+ };
+ 2155EF66022A1C8A143AFA7D /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageStickers/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ 21F40CDB7C206A6F9BFD7E33 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS";
+ SDKROOT = macosx;
+ };
+ name = "Staging Debug";
+ };
+ 23235B1E6CC12E9F18293EC7 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ };
+ name = "Test Debug";
+ };
+ 23B260C8D36C1C7B2EBAE948 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_iOS;
+ };
+ name = "Test Debug";
+ };
+ 255923867BD8E40496573826 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 2D4302BB2BDA1637648EE400 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS";
+ };
+ name = "Test Release";
+ };
+ 31C024516D94D042748F457B /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ 32AC37B65B0AD18D0BF30034 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ MY_SETTING = hello;
+ };
+ name = "Staging Release";
+ };
+ 352CFDDF22878B21B74F23E7 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
+ INFOPLIST_FILE = iMessageExtension/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 35AC2E0FB7F982F87319A38C /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS";
+ };
+ name = "Test Debug";
+ };
+ 35EF59B0A6F4215250FC8B6D /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 3AAD22CDEC8A1FDDB8A2708D /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Staging Release";
+ };
+ 3AECB926A8AE276B2019557F /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ 3AFAF82F6BD13C63D55A8308 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "XPC Service/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;
+ SDKROOT = macosx;
+ };
+ name = "Staging Debug";
+ };
+ 3CD4C8467FE69F1D2092CE66 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ };
+ name = "Production Release";
+ };
+ 3E1E6EF943CEAE3F81929C96 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ 423A0373D51B89C5AF9344BF /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS-Tests";
+ SDKROOT = macosx;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS";
+ };
+ name = "Staging Release";
+ };
+ 485C71D2CEF34712CE8813C8 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ 487F219E0C5B4852D4240AE3 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ 48EFEA0B3CA6F5271B373A92 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ 48FC7D687BB13EE23518E1FC /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Production Debug";
+ };
+ 49E2ACC01AEF00C167607E25 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS";
+ SDKROOT = macosx;
+ };
+ name = "Production Debug";
+ };
+ 4B4702B2F362DA39717BC0CC /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ 4C04971715A77E238CBE8A94 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_iOS;
+ };
+ name = "Production Release";
+ };
+ 4D7EF24F4501941FCCD063BD /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_iOS;
+ };
+ name = "Test Release";
+ };
+ 4FA21CDBD95C8B64FED4FD1F /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = "Production Debug";
+ };
+ 501FA5E165A41A6BD1F9045A /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;
+ SDKROOT = macosx;
+ };
+ name = "Test Debug";
+ };
+ 50D70A3741393712CD35C80C /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "XPC Service/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;
+ SDKROOT = macosx;
+ };
+ name = "Staging Release";
+ };
+ 53F9B1C928C6DFEEDA0AF698 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageStickers/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ 541AF6B4C6B5311D339FF3ED /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = "Test Release";
+ };
+ 55ED3060EF856102ED57B470 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS";
+ SDKROOT = macosx;
+ };
+ name = "Test Debug";
+ };
+ 5728D851D92C8BA0550695BA /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .staging;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Staging Debug";
+ };
+ 5804A4BD222650F5C32F6825 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip";
+ };
+ name = "Test Debug";
+ };
+ 589C74C57B978EEE60A84A5D /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 5924F68913C8A193D4081E97 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ 5A63CA9A024A7C2091BC8A65 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ 5D1AA3424F6EE7831AC065C9 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ 5D37F8F1E8C7B174E2BCDBAF /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 5D7368280048BFE21CA52364 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ 5FDFD00BB647A99AA957DC2D /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ 61401F625B86180823D74815 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ 624FDC440AC60A1426188430 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ 6286DF5CB32608C929F71F73 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS";
+ SDKROOT = macosx;
+ };
+ name = "Test Release";
+ };
+ 63B8C37C32DB75550B534E3F /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ 6745735B601E00712C6449B5 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ 674DF9FC12EEAD2B65EDABF3 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS";
+ SDKROOT = macosx;
+ };
+ name = "Staging Release";
+ };
+ 67878061E7FE44186F01A87F /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "XPC Service/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;
+ SDKROOT = macosx;
+ };
+ name = "Test Debug";
+ };
+ 67DEEE053A621B66857F9803 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_Clip;
+ };
+ name = "Test Debug";
+ };
+ 68C41F11EC3A5F2AD63A9561 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_iOS;
+ };
+ name = "Production Debug";
+ };
+ 6A0FBBF697209EA1BF1B8341 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageStickers/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 6A0FCE5AE89BD83A6554BB0D /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "XPC Service/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;
+ SDKROOT = macosx;
+ };
+ name = "Production Release";
+ };
+ 6E5F7AD78B7D395020B2206E /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageApp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 6F20523C3582CFAD67FF337B /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip.clip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 6FE62E88CE8995B6B09EA0C8 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ 70AC839150951CD4A4A30F96 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ 71A3AC6722DE3CBD99092E8C /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ };
+ name = "Staging Release";
+ };
+ 721DE2AAC1D8788D496342D5 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip.clip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ 73A4D390B3E40C79BD6411FF /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;
+ SDKROOT = macosx;
+ };
+ name = "Staging Release";
+ };
+ 73F0DB076A5FCED1A4D04930 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .staging;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_VERSION = 5.0;
+ VALIDATE_PRODUCT = YES;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Staging Release";
+ };
+ 74ED626BC2054224876550EE /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Test Debug";
+ };
+ 751BB7D52B5275C48FA8561B /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ 7715B294A5F1C088685F4C82 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = App_watchOS/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Staging Release";
+ };
+ 77FF85B1482FA6B1F5C7464D /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ 797B3A734448D220FC75A683 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 798CA37D8B725F91A13557B6 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS";
+ };
+ name = "Staging Debug";
+ };
+ 7A0E151513EC4860871B3533 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-iOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ 7CBE3B17DB26AE387A5182D9 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 7FB7D3D5582FEBF67168A7FE /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ 821EB3E3E2FE9AA073D17D12 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ 83369794BD5F599701ECCCAB /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ 838050FA296DBA072BFBDAC6 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ MY_SETTING = hello;
+ };
+ name = "Test Release";
+ };
+ 8480F258F8BB72C9E64251D2 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ 851A57DE0FE85BF757688ED2 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_Clip;
+ };
+ name = "Staging Release";
+ };
+ 85832F389D795BA2E92FCB58 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ 86A9639B679041971A10A4A5 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS";
+ SDKROOT = macosx;
+ };
+ name = "Production Release";
+ };
+ 894820264A634C140A7FB375 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;
+ SDKROOT = macosx;
+ };
+ name = "Production Release";
+ };
+ 89AF7A6AD1A97A3595BE385D /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ 8ADCC8ACD4DB8DE8A806C3AF /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
+ INFOPLIST_FILE = iMessageExtension/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 8DF455FCCB15089A12904A09 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageStickers/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ 8E57FECDCAC83BC80F2950B1 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 8E88FBD6519BC82A07713AEA /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 8E96D4EBF49E14AF234B6211 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 8F50C33D75184956D99FA6FB /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ 904C4C86D542B6372931CF17 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ 90B900384791067500B135B7 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip.clip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ 90C4F3586ECA83132F0DE7B9 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-iOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ 942D2844B060AD5CF5605E6D /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ 9432DC33411B23B8E85E4497 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = "App_watchOS Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Test Release";
+ };
+ 96EBFB5B0E95829CA24B888F /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .test;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_VERSION = 5.0;
+ VALIDATE_PRODUCT = YES;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Test Release";
+ };
+ 978F2FF834AB6B8DFA16158F /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ };
+ name = "Staging Debug";
+ };
+ 97943DF689772FAAD2763252 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS-Tests";
+ SDKROOT = macosx;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS";
+ };
+ name = "Test Debug";
+ };
+ 97F35E644613C31A0F6057A9 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageStickers/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ 983179BB00CE13590396D418 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ MY_SETTING = hello;
+ };
+ name = "Staging Debug";
+ };
+ 9851DE9B03B3F61BE95059CD /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Production Debug";
+ };
+ 98C2E2329E5338479C21FCB3 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_Clip;
+ };
+ name = "Production Debug";
+ };
+ 98C2F16400F0BB2EF4D96C01 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ 998C0C1803A225B371B1D1B6 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 9ACC54B12ACACAC806B2713A /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-iOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ 9B7E01C60F1BED584E59C229 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
+ INFOPLIST_FILE = iMessageExtension/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ 9DFC9F38D927AEADC5D39497 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-iOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ 9E61D0D048FBFE4862531A9D /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ A12C7C6B28D447A2883E64B1 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ A3FA0FDB6F5345F5DC6FAF6A /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip.clip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ A50C9533122E6AD686BBD105 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 28B6600F3CDA6F15633D2134 /* config.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .test;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Test Debug";
+ };
+ AA43CD2CE072AC067D41C7B9 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
+ INFOPLIST_FILE = iMessageExtension/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ AB794EA9075BC2B2E1D742DB /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ AB891D5B82CC0DE77E5B3592 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageApp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ AE10B9A8DD8696989527226F /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Production Release";
+ };
+ AEBAEEB0BF317DB830098ECE /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_iOS;
+ };
+ name = "Staging Debug";
+ };
+ B131DD67F7FAA5B3E8F96D43 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageApp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ B325DC45C94C7C885627F1F7 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ B34E6EA38DD860CEECFB2DAB /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ B427DC9B644A03F75D5EE3B3 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ B63AEDBE2CAF03E47A42EFBB /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip";
+ };
+ name = "Production Release";
+ };
+ BB3A650A1BBB9DB6128BE748 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS";
+ };
+ name = "Production Release";
+ };
+ BC7790D72F07EA795C1E173E /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
+ INFOPLIST_FILE = iMessageExtension/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ BCD6DAE84F6D39A359582F34 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ C0E6F72AC67FDABEC3DA0F56 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ C17A2093AEB51B28A3486357 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = "App_watchOS Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Production Debug";
+ };
+ C2170A503C4035851621CFA5 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ C348EEA27988050B1A7E44CF /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip";
+ };
+ name = "Test Release";
+ };
+ C349399AC28634700389BFA0 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ C3683443B5207E92AE54AC3E /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageStickers/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ C5CA0964CE9711DD3663414F /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-iOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ C7A2E4059491C4D3F913820C /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ C8385848D7EC802322A4C9E3 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ C841B18259CE051FD4B3E172 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-iOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ C8CB6354514BACC27ACFD497 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS-Tests";
+ SDKROOT = macosx;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS";
+ };
+ name = "Staging Debug";
+ };
+ C914FA6353BCB691D4770A79 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ CAEC3E96990ECDF1F0232D86 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift";
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ CB42404875DC01211537EBC0 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = "Test Debug";
+ };
+ CB7E81E3E358741E4AF626EE /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = App_watchOS/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Staging Debug";
+ };
+ CD636013A0F9EE18BC558EE7 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ CED7E259E7C0F45F2011E81C /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ CF10817F3ECC67C1E02FCB49 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_Clip;
+ };
+ name = "Test Release";
+ };
+ CF1651D9B7BDA2E47376B8B4 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = App_watchOS/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Test Release";
+ };
+ CF210234FD3BAEE7A36DD67A /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ MY_SETTING = hello;
+ };
+ name = "Production Debug";
+ };
+ D0AFC812B233C6FED331FFEA /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS-Tests";
+ SDKROOT = macosx;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS";
+ };
+ name = "Production Debug";
+ };
+ D1080DDE709BA2BCAC27E94D /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = App_watchOS/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Production Debug";
+ };
+ D2D301B65251BF1D19527185 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ D3CFCC35812F6922F93421BA /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageApp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ D4EA5ACE61DD1FF1759A15F9 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ D5E3DB3EA2AFB7B01449A25A /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ D66CCEDDDB6EEDDFDB01A429 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ D7EF4B53953AC7DBC16BF5CC /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ DAB2F470DFA47016103F2844 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ DE81F17DA26F80B807A0ECB4 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ DEB610ED8F66FE30A09B28FB /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip";
+ };
+ name = "Production Debug";
+ };
+ DF17269AA7642511FE3478FA /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = "App_watchOS Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Staging Release";
+ };
+ E0C7BB51B137528004C6D05B /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ MY_SETTING = hello;
+ };
+ name = "Test Debug";
+ };
+ E1BDBEB4922DC3ADA85FCB45 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ E1F957C21FA9E788F3AA9A55 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Staging Debug";
+ };
+ EB341083488EA6F9A7B09376 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = "Staging Debug";
+ };
+ ED80084E3BA60F92AB7E8272 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = "App_watchOS Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Production Release";
+ };
+ EDA22633538092F196CADFA5 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ EDA66845ACB2EC1E2D02DBCE /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip";
+ };
+ name = "Staging Release";
+ };
+ EDC7F56FE70242B7197B6DBA /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ EF12A546F36561AD22ABE953 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ "$(PROJECT_DIR)/Carthage/Build/iOS/Static",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ EF761FB40B58F9986BB1EACE /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = App_watchOS/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Test Debug";
+ };
+ F049A3E0F7C36718151231E3 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;
+ SDKROOT = macosx;
+ };
+ name = "Production Debug";
+ };
+ F07B8E737BE84E5ACDBC65A1 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = App_watchOS/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ WATCHOS_DEPLOYMENT_TARGET = 4.0;
+ };
+ name = "Production Release";
+ };
+ F0AEA3C92D045D0911EE0ECD /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = "App_watchOS Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Staging Debug";
+ };
+ F0E85A781F359CDBA52C713C /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS-Tests";
+ SDKROOT = macosx;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS";
+ };
+ name = "Production Release";
+ };
+ F149A50FEDE1D473D0C057F9 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = "App_watchOS Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ };
+ name = "Test Debug";
+ };
+ F3605B5D6C4420A1213360A8 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ F4603F248DE18834462CB0E5 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ F4757FF1CECDB8A2B713F51F /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ F5347351BC19A7749E673E47 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ F60F56A09B66D2E156A6BE9B /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ F6979D0393CC0D4FB9CA9877 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ MY_SETTING = hello;
+ };
+ name = "Production Release";
+ };
+ F742C8CFE1D42CD709113154 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ };
+ name = "Staging Release";
+ };
+ F77B428B65F1468434D6801A /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip_UITests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-Clip-UITests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = App_Clip;
+ };
+ name = "Production Release";
+ };
+ F7814E81F508C5AAFD0FF25E /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = iMessageApp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ F94FDBEFBDAC270102F161C3 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ F990CC508784D61CF58463E6 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS";
+ PRODUCT_NAME = StaticLibrary_ObjC;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ };
+ name = "Test Release";
+ };
+ F9AE99185A585F0E5FC18494 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_Clip/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.appwithclip.clip;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ FBCB8E4B1BFF276E0CC4A6BC /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS";
+ PRODUCT_NAME = Framework2;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ FD44525A79C922C647A546C9 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COMBINE_HIDPI_IMAGES = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = App_macOS_Tests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS-Tests";
+ SDKROOT = macosx;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS";
+ };
+ name = "Test Release";
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 04F7DFEC84B28DEF04F71F0A /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ BC7790D72F07EA795C1E173E /* Production Debug */,
+ 9B7E01C60F1BED584E59C229 /* Production Release */,
+ 8ADCC8ACD4DB8DE8A806C3AF /* Staging Debug */,
+ AA43CD2CE072AC067D41C7B9 /* Staging Release */,
+ 352CFDDF22878B21B74F23E7 /* Test Debug */,
+ 15A1BFD9417590DDD02F6216 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 12219412F67F790403913F07 /* Build configuration list for PBXLegacyTarget "Legacy" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 821EB3E3E2FE9AA073D17D12 /* Production Debug */,
+ 0D47838E4B33810EB0F412F9 /* Production Release */,
+ 1ECD0F546386B34DBFE6C17F /* Staging Debug */,
+ 70AC839150951CD4A4A30F96 /* Staging Release */,
+ 998C0C1803A225B371B1D1B6 /* Test Debug */,
+ C2170A503C4035851621CFA5 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 1245739E28D036CED2FF55C1 /* Build configuration list for PBXNativeTarget "App_iOS_With_Clip" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F4757FF1CECDB8A2B713F51F /* Production Debug */,
+ 3AECB926A8AE276B2019557F /* Production Release */,
+ B325DC45C94C7C885627F1F7 /* Staging Debug */,
+ EDC7F56FE70242B7197B6DBA /* Staging Release */,
+ D66CCEDDDB6EEDDFDB01A429 /* Test Debug */,
+ 942D2844B060AD5CF5605E6D /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 154811E763287E0982E4010C /* Build configuration list for PBXNativeTarget "App_Clip_UITests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 98C2E2329E5338479C21FCB3 /* Production Debug */,
+ F77B428B65F1468434D6801A /* Production Release */,
+ 167CE7ABBB81B98E243004BF /* Staging Debug */,
+ 851A57DE0FE85BF757688ED2 /* Staging Release */,
+ 67DEEE053A621B66857F9803 /* Test Debug */,
+ CF10817F3ECC67C1E02FCB49 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 25A6BD812166D38412B7D296 /* Build configuration list for PBXNativeTarget "App_Clip_Tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DEB610ED8F66FE30A09B28FB /* Production Debug */,
+ B63AEDBE2CAF03E47A42EFBB /* Production Release */,
+ 0C7B61BCB19F18E1CAFA9B02 /* Staging Debug */,
+ EDA66845ACB2EC1E2D02DBCE /* Staging Release */,
+ 5804A4BD222650F5C32F6825 /* Test Debug */,
+ C348EEA27988050B1A7E44CF /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 2961C7042EE5F08A22AAF183 /* Build configuration list for PBXProject "ProjectXcode12" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 48FC7D687BB13EE23518E1FC /* Production Debug */,
+ 198A1841A62FDD2285BE1DEC /* Production Release */,
+ 5728D851D92C8BA0550695BA /* Staging Debug */,
+ 73F0DB076A5FCED1A4D04930 /* Staging Release */,
+ A50C9533122E6AD686BBD105 /* Test Debug */,
+ 96EBFB5B0E95829CA24B888F /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 29ED792F76D3712D856082B4 /* Build configuration list for PBXNativeTarget "App_Clip" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F9AE99185A585F0E5FC18494 /* Production Debug */,
+ 172635BE151671235582D608 /* Production Release */,
+ 90B900384791067500B135B7 /* Staging Debug */,
+ 721DE2AAC1D8788D496342D5 /* Staging Release */,
+ 6F20523C3582CFAD67FF337B /* Test Debug */,
+ A3FA0FDB6F5345F5DC6FAF6A /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 2FB1406136BDEE50410D00FE /* Build configuration list for PBXNativeTarget "TestFramework" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D4EA5ACE61DD1FF1759A15F9 /* Production Debug */,
+ 31C024516D94D042748F457B /* Production Release */,
+ 04A44577D412ADA4AF40B0CF /* Staging Debug */,
+ 7CBE3B17DB26AE387A5182D9 /* Staging Release */,
+ 63B8C37C32DB75550B534E3F /* Test Debug */,
+ 61401F625B86180823D74815 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 51ECBDC8632467DA3ADA886F /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 0E9BABB47957C3D52D4A7E4F /* Production Debug */,
+ CAEC3E96990ECDF1F0232D86 /* Production Release */,
+ 03A06B8262F1B39589A3B310 /* Staging Debug */,
+ 48EFEA0B3CA6F5271B373A92 /* Staging Release */,
+ C349399AC28634700389BFA0 /* Test Debug */,
+ 487F219E0C5B4852D4240AE3 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 6107B10D2E2D953A15120917 /* Build configuration list for PBXNativeTarget "Framework_iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 89AF7A6AD1A97A3595BE385D /* Production Debug */,
+ B34E6EA38DD860CEECFB2DAB /* Production Release */,
+ F3605B5D6C4420A1213360A8 /* Staging Debug */,
+ C914FA6353BCB691D4770A79 /* Staging Release */,
+ C0E6F72AC67FDABEC3DA0F56 /* Test Debug */,
+ 751BB7D52B5275C48FA8561B /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 65393391FA3D521A2D096C75 /* Build configuration list for PBXNativeTarget "iMessageApp" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1978017BCE4AD3F7E426F0F5 /* Production Debug */,
+ D3CFCC35812F6922F93421BA /* Production Release */,
+ 6E5F7AD78B7D395020B2206E /* Staging Debug */,
+ B131DD67F7FAA5B3E8F96D43 /* Staging Release */,
+ F7814E81F508C5AAFD0FF25E /* Test Debug */,
+ AB891D5B82CC0DE77E5B3592 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 6BB95AFCC887A7C884112DCD /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 09AF4A26FD4A80AFB95F39CD /* Production Debug */,
+ DAB2F470DFA47016103F2844 /* Production Release */,
+ F4603F248DE18834462CB0E5 /* Staging Debug */,
+ 15BF441D2B0ED86F6B90EF49 /* Staging Release */,
+ C7A2E4059491C4D3F913820C /* Test Debug */,
+ EDA22633538092F196CADFA5 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 70FED818DB797FCDC7929DBC /* Build configuration list for PBXAggregateTarget "SuperTarget" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ CF210234FD3BAEE7A36DD67A /* Production Debug */,
+ F6979D0393CC0D4FB9CA9877 /* Production Release */,
+ 983179BB00CE13590396D418 /* Staging Debug */,
+ 32AC37B65B0AD18D0BF30034 /* Staging Release */,
+ E0C7BB51B137528004C6D05B /* Test Debug */,
+ 838050FA296DBA072BFBDAC6 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 7FCE6665950846F21D6BA7F1 /* Build configuration list for PBXNativeTarget "App_macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 49E2ACC01AEF00C167607E25 /* Production Debug */,
+ 86A9639B679041971A10A4A5 /* Production Release */,
+ 21F40CDB7C206A6F9BFD7E33 /* Staging Debug */,
+ 674DF9FC12EEAD2B65EDABF3 /* Staging Release */,
+ 55ED3060EF856102ED57B470 /* Test Debug */,
+ 6286DF5CB32608C929F71F73 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 8ABE44BA99ABFD6518573B75 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 053EAED64FF4B9A3B4F86991 /* Production Debug */,
+ 3CD4C8467FE69F1D2092CE66 /* Production Release */,
+ 978F2FF834AB6B8DFA16158F /* Staging Debug */,
+ 71A3AC6722DE3CBD99092E8C /* Staging Release */,
+ 23235B1E6CC12E9F18293EC7 /* Test Debug */,
+ F990CC508784D61CF58463E6 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 8B6F763B758ED180046D3908 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1B0C38D8839436D77EA16EF1 /* Production Debug */,
+ BB3A650A1BBB9DB6128BE748 /* Production Release */,
+ 798CA37D8B725F91A13557B6 /* Staging Debug */,
+ 114E824F1D0EAA35886DEF0D /* Staging Release */,
+ 35AC2E0FB7F982F87319A38C /* Test Debug */,
+ 2D4302BB2BDA1637648EE400 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ 9EDED21A0C3AD1691C58401D /* Build configuration list for PBXNativeTarget "App_iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ BCD6DAE84F6D39A359582F34 /* Production Debug */,
+ EF12A546F36561AD22ABE953 /* Production Release */,
+ 797B3A734448D220FC75A683 /* Staging Debug */,
+ 5A63CA9A024A7C2091BC8A65 /* Staging Release */,
+ 8E88FBD6519BC82A07713AEA /* Test Debug */,
+ 98C2F16400F0BB2EF4D96C01 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ A664263A7E39D94679AD5F74 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4FA21CDBD95C8B64FED4FD1F /* Production Debug */,
+ 0359995ADD0BFA44E9905752 /* Production Release */,
+ EB341083488EA6F9A7B09376 /* Staging Debug */,
+ F742C8CFE1D42CD709113154 /* Staging Release */,
+ CB42404875DC01211537EBC0 /* Test Debug */,
+ 541AF6B4C6B5311D339FF3ED /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ B19E185DEA8C29F4234D14B9 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 6745735B601E00712C6449B5 /* Production Debug */,
+ 5FDFD00BB647A99AA957DC2D /* Production Release */,
+ C8385848D7EC802322A4C9E3 /* Staging Debug */,
+ A12C7C6B28D447A2883E64B1 /* Staging Release */,
+ 5D1AA3424F6EE7831AC065C9 /* Test Debug */,
+ 904C4C86D542B6372931CF17 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ BCC8658A349BEF8B35DCEE45 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 7FB7D3D5582FEBF67168A7FE /* Production Debug */,
+ F60F56A09B66D2E156A6BE9B /* Production Release */,
+ 255923867BD8E40496573826 /* Staging Debug */,
+ 485C71D2CEF34712CE8813C8 /* Staging Release */,
+ 5D37F8F1E8C7B174E2BCDBAF /* Test Debug */,
+ D7EF4B53953AC7DBC16BF5CC /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ BDE5A3172EAD9560272E40D5 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9851DE9B03B3F61BE95059CD /* Production Debug */,
+ AE10B9A8DD8696989527226F /* Production Release */,
+ E1F957C21FA9E788F3AA9A55 /* Staging Debug */,
+ 3AAD22CDEC8A1FDDB8A2708D /* Staging Release */,
+ 74ED626BC2054224876550EE /* Test Debug */,
+ 1B2F2C5941E877806806E44C /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ C7C54B832F1638EA1C8C506D /* Build configuration list for PBXNativeTarget "Framework2_iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 7A0E151513EC4860871B3533 /* Production Debug */,
+ 9DFC9F38D927AEADC5D39497 /* Production Release */,
+ C841B18259CE051FD4B3E172 /* Staging Debug */,
+ 9ACC54B12ACACAC806B2713A /* Staging Release */,
+ 90C4F3586ECA83132F0DE7B9 /* Test Debug */,
+ C5CA0964CE9711DD3663414F /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ C7E8A05AB55B088CE727B579 /* Build configuration list for PBXNativeTarget "App_macOS_Tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D0AFC812B233C6FED331FFEA /* Production Debug */,
+ F0E85A781F359CDBA52C713C /* Production Release */,
+ C8CB6354514BACC27ACFD497 /* Staging Debug */,
+ 423A0373D51B89C5AF9344BF /* Staging Release */,
+ 97943DF689772FAAD2763252 /* Test Debug */,
+ FD44525A79C922C647A546C9 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ D5A2344247FF33D62704E2C2 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E1BDBEB4922DC3ADA85FCB45 /* Production Debug */,
+ 17DF05C2E3715A65EA214144 /* Production Release */,
+ 8480F258F8BB72C9E64251D2 /* Staging Debug */,
+ 1D9C86CF49283D1F266E73A9 /* Staging Release */,
+ 77FF85B1482FA6B1F5C7464D /* Test Debug */,
+ 3E1E6EF943CEAE3F81929C96 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ D8F179BDF8E4EF8A9DF9D8B7 /* Build configuration list for PBXNativeTarget "App_watchOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D1080DDE709BA2BCAC27E94D /* Production Debug */,
+ F07B8E737BE84E5ACDBC65A1 /* Production Release */,
+ CB7E81E3E358741E4AF626EE /* Staging Debug */,
+ 7715B294A5F1C088685F4C82 /* Staging Release */,
+ EF761FB40B58F9986BB1EACE /* Test Debug */,
+ CF1651D9B7BDA2E47376B8B4 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ DA4742F9D7A73F3DB2B4AC87 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F94FDBEFBDAC270102F161C3 /* Production Debug */,
+ 5924F68913C8A193D4081E97 /* Production Release */,
+ 624FDC440AC60A1426188430 /* Staging Debug */,
+ 8E96D4EBF49E14AF234B6211 /* Staging Release */,
+ CED7E259E7C0F45F2011E81C /* Test Debug */,
+ 16C3E5AA32E607CF8AE94952 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ DD2C419331E24B123E0CBC9E /* Build configuration list for PBXNativeTarget "Framework2_macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5D7368280048BFE21CA52364 /* Production Debug */,
+ 9E61D0D048FBFE4862531A9D /* Production Release */,
+ 85832F389D795BA2E92FCB58 /* Staging Debug */,
+ 589C74C57B978EEE60A84A5D /* Staging Release */,
+ D2D301B65251BF1D19527185 /* Test Debug */,
+ FBCB8E4B1BFF276E0CC4A6BC /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ DD8DBB7F2CADB523598B1D3A /* Build configuration list for PBXNativeTarget "iMessageStickersExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2155EF66022A1C8A143AFA7D /* Production Debug */,
+ 8DF455FCCB15089A12904A09 /* Production Release */,
+ 6A0FBBF697209EA1BF1B8341 /* Staging Debug */,
+ 53F9B1C928C6DFEEDA0AF698 /* Staging Release */,
+ C3683443B5207E92AE54AC3E /* Test Debug */,
+ 97F35E644613C31A0F6057A9 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ E7F77B0DBCCD253D8A6B2645 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C17A2093AEB51B28A3486357 /* Production Debug */,
+ ED80084E3BA60F92AB7E8272 /* Production Release */,
+ F0AEA3C92D045D0911EE0ECD /* Staging Debug */,
+ DF17269AA7642511FE3478FA /* Staging Release */,
+ F149A50FEDE1D473D0C057F9 /* Test Debug */,
+ 9432DC33411B23B8E85E4497 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ EA0D28F9C2ACF4146025F574 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 68C41F11EC3A5F2AD63A9561 /* Production Debug */,
+ 4C04971715A77E238CBE8A94 /* Production Release */,
+ AEBAEEB0BF317DB830098ECE /* Staging Debug */,
+ 1D26D189CE20775E78D4CCD8 /* Staging Release */,
+ 23B260C8D36C1C7B2EBAE948 /* Test Debug */,
+ 4D7EF24F4501941FCCD063BD /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ F5B278C2B6590DD1F0CBDE04 /* Build configuration list for PBXNativeTarget "XPC Service" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 212617C380F45FC243973AA9 /* Production Debug */,
+ 6A0FCE5AE89BD83A6554BB0D /* Production Release */,
+ 3AFAF82F6BD13C63D55A8308 /* Staging Debug */,
+ 50D70A3741393712CD35C80C /* Staging Release */,
+ 67878061E7FE44186F01A87F /* Test Debug */,
+ 115D9C7C569E8D6887075F9D /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ FB9AF55D22482CDEE8E9AC49 /* Build configuration list for PBXNativeTarget "Tool" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F049A3E0F7C36718151231E3 /* Production Debug */,
+ 894820264A634C140A7FB375 /* Production Release */,
+ 02EA7A15EF79E850F9399B41 /* Staging Debug */,
+ 73A4D390B3E40C79BD6411FF /* Staging Release */,
+ 501FA5E165A41A6BD1F9045A /* Test Debug */,
+ 15DA3659204C3AFA53F64ED5 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ FBA5F15A7524F82764D43342 /* Build configuration list for PBXNativeTarget "EntitledApp" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8F50C33D75184956D99FA6FB /* Production Debug */,
+ D5E3DB3EA2AFB7B01449A25A /* Production Release */,
+ B427DC9B644A03F75D5EE3B3 /* Staging Debug */,
+ CD636013A0F9EE18BC558EE7 /* Staging Release */,
+ 35EF59B0A6F4215250FC8B6D /* Test Debug */,
+ F5347351BC19A7749E673E47 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+ FECC727EC6A1CBB859258849 /* Build configuration list for PBXNativeTarget "Framework_macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4B4702B2F362DA39717BC0CC /* Production Debug */,
+ AB794EA9075BC2B2E1D742DB /* Production Release */,
+ 6FE62E88CE8995B6B09EA0C8 /* Staging Debug */,
+ 8E57FECDCAC83BC80F2950B1 /* Staging Release */,
+ 83369794BD5F599701ECCCAB /* Test Debug */,
+ DE81F17DA26F80B807A0ECB4 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+/* End XCConfigurationList section */
+
+/* Begin XCVersionGroup section */
+ 431156B967A9DF0995682D7C /* Model.xcdatamodeld */ = {
+ isa = XCVersionGroup;
+ children = (
+ D998E6204320A2092F9327FA /* Model 2.xcdatamodel */,
+ 610AD86B5088E07993870579 /* Model 3.xcdatamodel */,
+ 5FF83941D764AEB361249B72 /* Model.xcdatamodel */,
+ );
+ currentVersion = D998E6204320A2092F9327FA /* Model 2.xcdatamodel */;
+ path = Model.xcdatamodeld;
+ sourceTree = "";
+ versionGroupType = wrapper.xcdatamodel;
+ };
+/* End XCVersionGroup section */
+ };
+ rootObject = 7467FBF059DC784B5601CA7E /* Project object */;
+}
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 000000000..be41c34c6
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme
new file mode 100644
index 000000000..2ef04494a
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
new file mode 100644
index 000000000..5ae081082
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme
new file mode 100644
index 000000000..34f5b11cf
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme
new file mode 100644
index 000000000..ef31e1396
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme
new file mode 100644
index 000000000..bca1a44e2
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme
new file mode 100644
index 000000000..f9998d3eb
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme
new file mode 100644
index 000000000..c87911bb4
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme
new file mode 100644
index 000000000..c82da690f
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme
new file mode 100644
index 000000000..e5bb89782
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme
new file mode 100644
index 000000000..97721bafc
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
new file mode 100644
index 000000000..f808f3f18
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
new file mode 100644
index 000000000..8d5688667
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme
new file mode 100644
index 000000000..ca0000609
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
new file mode 100644
index 000000000..c49cc6212
--- /dev/null
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh
index 4609b2b57..2fb6c8ba2 100755
--- a/Tests/Fixtures/TestProject/build.sh
+++ b/Tests/Fixtures/TestProject/build.sh
@@ -13,11 +13,20 @@ echo "MACH_O_TYPE = staticlib" > $STATIC_CONFIG
XCODE_XCCONFIG_FILE=$STATIC_CONFIG \
carthage bootstrap $CARTHAGE_STATIC_FRAMEWORKS --cache-builds
+XCODE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :DTXcode" "$(xcode-select -p)/../Info.plist")
+
echo "
⚙️ Building iOS app"
xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
echo "✅ Successfully built iOS app"
+if [[ "$XCODE_VERSION" == 12* ]]; then
+ echo "
+ ⚙️ Building iOS app (Xcode 12+)"
+ xcodebuild -quiet -project ProjectXcode12.xcodeproj -scheme "App_iOS_With_Clip Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
+ echo "✅ Successfully built iOS app (Xcode 12+)"
+fi
+
echo "
⚙️ Building macOS app"
xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_macOS" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
diff --git a/Tests/Fixtures/TestProject/project-xcode-12.yml b/Tests/Fixtures/TestProject/project-xcode-12.yml
new file mode 100644
index 000000000..5c5da3337
--- /dev/null
+++ b/Tests/Fixtures/TestProject/project-xcode-12.yml
@@ -0,0 +1,72 @@
+# NOTE: when Xcode 12 goes GM and the Xcode 11 CI can be dropped,
+# this file can be merged into project.yml. As-is, it generates
+# targets that Xcode 11 doesn't understand or know how to build.
+name: ProjectXcode12
+include: [project.yml]
+targets:
+ App_iOS_With_Clip:
+ type: application
+ platform: iOS
+ attributes:
+ ProvisioningStyle: Automatic
+ sources:
+ - path: StandaloneFiles/Standalone.swift
+ - path: App_iOS
+ name: App
+ compilerFlags:
+ - "-Werror"
+ excludes:
+ - "**/excluded-file"
+ - "excluded-file"
+ - "Model.xcmappingmodel"
+ settings:
+ INFOPLIST_FILE: App_iOS/Info.plist
+ PRODUCT_BUNDLE_IDENTIFIER: com.project.appwithclip
+ dependencies:
+ - target: Framework_iOS
+ - target: StaticLibrary_ObjC_iOS
+ - target: App_Clip
+ - sdk: Contacts.framework
+ scheme:
+ configVariants:
+ - Test
+ - Staging
+ - Production
+
+ App_Clip:
+ type: application.on-demand-install-capable
+ platform: iOS
+ entitlements:
+ path: App_Clip/Clip.entitlements
+ properties:
+ com.apple.developer.parent-application-identifiers: [$(AppIdentifierPrefix)com.project.appwithclip]
+ com.apple.security.application-groups: group.com.app
+ sources:
+ App_Clip
+ settings:
+ INFOPLIST_FILE: App_Clip/Info.plist
+ PRODUCT_BUNDLE_IDENTIFIER: com.project.appwithclip.clip
+ dependencies:
+ - target: Framework_iOS
+ - target: StaticLibrary_ObjC_iOS
+ scheme:
+ testTargets:
+ - App_Clip_Tests
+ - App_Clip_UITests
+
+ App_Clip_Tests:
+ type: bundle.unit-test
+ platform: iOS
+ sources: App_iOS_Tests
+ dependencies:
+ - target: App_Clip
+ - target: TestFramework
+ - carthage: swift-tagged
+ linkType: static
+
+ App_Clip_UITests:
+ type: bundle.ui-testing
+ platform: iOS
+ sources: App_Clip_UITests
+ dependencies:
+ - target: App_Clip
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 9b89d7ce4..34895d906 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -201,7 +201,7 @@ targets:
iMessageStickersExtension:
type: app-extension.messages-sticker-pack
platform: iOS
- sources:
+ sources:
- path: iMessageStickers
StaticLibrary_ObjC:
@@ -265,7 +265,7 @@ targets:
sources: App_iOS_UITests
dependencies:
- target: App_iOS
-
+
App_macOS_Tests:
type: bundle.unit-test
platform: macOS
@@ -306,7 +306,7 @@ schemes:
App_Scheme:
build:
targets:
- App_iOS: all
+ App_iOS: all
run:
simulateLocation:
allow: true
diff --git a/scripts/gen-fixtures.sh b/scripts/gen-fixtures.sh
index a3785436b..a7b14a1b7 100755
--- a/scripts/gen-fixtures.sh
+++ b/scripts/gen-fixtures.sh
@@ -3,5 +3,6 @@ set -e
swift run xcodegen --spec Tests/Fixtures/TestProject/AnotherProject/project.yml
swift run xcodegen --spec Tests/Fixtures/TestProject/project.yml
+swift run xcodegen --spec Tests/Fixtures/TestProject/project-xcode-12.yml
swift run xcodegen --spec Tests/Fixtures/CarthageProject/project.yml
swift run xcodegen --spec Tests/Fixtures/SPM/project.yml
From cd55bfbdfe5ae72dc6d5a56eb21421d1345ed742 Mon Sep 17 00:00:00 2001
From: Andrew Reach <67667123+andrewreach@users.noreply.github.com>
Date: Sun, 16 Aug 2020 15:39:31 -0700
Subject: [PATCH 016/284] Fix a bug in computing relative paths. (#915)
Once a difference in path components between base and self has been
encountered, it is no longer valid to skip over common components.
---
CHANGELOG.md | 1 +
Sources/Core/PathExtensions.swift | 2 +-
Tests/CoreTests/PathExtensionsTests.swift | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc2bc2291..07aa5b194 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,7 @@
- Treat all directories with known UTI as file wrapper. [#896](https://github.com/yonaskolb/XcodeGen/pull/896) @KhaosT
- Generated schemes for application extensions now contain `wasCreatedForAppExtension = YES`. [#898](https://github.com/yonaskolb/XcodeGen/issues/898) @muizidn
- Allow package dependencies to use `link: false` [#920](https://github.com/yonaskolb/XcodeGen/pull/920) @k-thorat
+- Fixed issue computing relative paths. [#915](https://github.com/yonaskolb/XcodeGen/pull/915) @andrewreach
#### Internal
- Updated to XcodeProj 7.13.0 [#908](https://github.com/yonaskolb/XcodeGen/pull/908) @brentleyjones
diff --git a/Sources/Core/PathExtensions.swift b/Sources/Core/PathExtensions.swift
index 5e72c9588..7c174b072 100644
--- a/Sources/Core/PathExtensions.swift
+++ b/Sources/Core/PathExtensions.swift
@@ -49,7 +49,7 @@ extension Path {
return try pathComponents(for: path.dropFirst(), relativeTo: base, memo: memo + [rhs])
// Both sides have a common parent
- case (.some(let lhs), .some(let rhs)) where lhs == rhs:
+ case (.some(let lhs), .some(let rhs)) where memo.isEmpty && lhs == rhs:
return try pathComponents(for: path.dropFirst(), relativeTo: base.dropFirst(), memo: memo)
// `base` has a path to back out of
diff --git a/Tests/CoreTests/PathExtensionsTests.swift b/Tests/CoreTests/PathExtensionsTests.swift
index 83d2da399..ee9fd6e7a 100644
--- a/Tests/CoreTests/PathExtensionsTests.swift
+++ b/Tests/CoreTests/PathExtensionsTests.swift
@@ -48,6 +48,7 @@ class PathExtensionsTests: XCTestCase {
try expect(relativePath(to: "/a/../../b", from: "/b")) == "."
try expect(relativePath(to: "a/..", from: "a")) == ".."
try expect(relativePath(to: "a/../b", from: "b")) == "."
+ try expect(relativePath(to: "/a/c", from: "/a/b/c")) == "../../c"
}
$0.it("backtracks on a non-normalized base path") {
From b11d5d2a1cd9e4a7c59c23ad2588f8d1abab9e9c Mon Sep 17 00:00:00 2001
From: Dan Fleming
Date: Fri, 21 Aug 2020 22:23:00 -0400
Subject: [PATCH 017/284] Run CI against Xcode 12 beta (#936)
* Run CI against Xcode 12 beta
* Update CHANGELOG
* fixtures: add workarounds for Xcode 12
* Refine xcode 12 workaround to not fail for xcode 11
---
.github/workflows/ci.yml | 2 +-
CHANGELOG.md | 3 +++
Tests/Fixtures/TestProject/build.sh | 19 ++++++++-----------
.../TestProject/carthage_dynamic.xcconfig | 1 +
.../TestProject/carthage_static.xcconfig | 2 ++
Tests/Fixtures/TestProject/fixtures.xcconfig | 7 +++++++
.../TestProject/xcode12_workaround.xcconfig | 9 +++++++++
7 files changed, 31 insertions(+), 12 deletions(-)
create mode 100644 Tests/Fixtures/TestProject/carthage_dynamic.xcconfig
create mode 100644 Tests/Fixtures/TestProject/carthage_static.xcconfig
create mode 100644 Tests/Fixtures/TestProject/fixtures.xcconfig
create mode 100644 Tests/Fixtures/TestProject/xcode12_workaround.xcconfig
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 990a3b176..49dc8be5f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,7 +8,7 @@ jobs:
name: Xcode ${{ matrix.xcode }}
strategy:
matrix:
- xcode: ["11"]
+ xcode: ["11", "12_beta"]
steps:
- uses: actions/checkout@master
- name: Set Xcode
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 07aa5b194..b92010d7a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,9 @@
- Added ability to set custom LLDBInit scripts for launch and test schemes [#929](https://github.com/yonaskolb/XcodeGen/pull/929) @polac24
- Adds App Clip support. [#909](https://github.com/yonaskolb/XcodeGen/pull/909) @brentleyjones @dflems
+#### Internal
+- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
+
#### Fixed
- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh
index 2fb6c8ba2..ea5876da3 100755
--- a/Tests/Fixtures/TestProject/build.sh
+++ b/Tests/Fixtures/TestProject/build.sh
@@ -1,33 +1,30 @@
#!/bin/bash
set -e
+XCODE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :DTXcode" "$(xcode-select -p)/../Info.plist")
+
CARTHAGE_DYNAMIC_FRAMEWORKS=(Result)
CARTHAGE_STATIC_FRAMEWORKS=(SwiftyJSON swift-nonempty)
-carthage bootstrap $CARTHAGE_DYNAMIC_FRAMEWORKS --cache-builds
-
-# Prepare xcconfig for static bootstrapping
-STATIC_CONFIG=$(mktemp -d)/static.xcconfig
-echo "MACH_O_TYPE = staticlib" > $STATIC_CONFIG
+XCODE_XCCONFIG_FILE="$PWD/carthage_dynamic.xcconfig" \
+ carthage bootstrap $CARTHAGE_DYNAMIC_FRAMEWORKS --cache-builds
-XCODE_XCCONFIG_FILE=$STATIC_CONFIG \
+XCODE_XCCONFIG_FILE="$PWD/carthage_static.xcconfig" \
carthage bootstrap $CARTHAGE_STATIC_FRAMEWORKS --cache-builds
-XCODE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :DTXcode" "$(xcode-select -p)/../Info.plist")
-
echo "
⚙️ Building iOS app"
-xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
+xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_iOS Test" -configuration "Test Debug" -xcconfig fixtures.xcconfig
echo "✅ Successfully built iOS app"
if [[ "$XCODE_VERSION" == 12* ]]; then
echo "
⚙️ Building iOS app (Xcode 12+)"
- xcodebuild -quiet -project ProjectXcode12.xcodeproj -scheme "App_iOS_With_Clip Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
+ xcodebuild -quiet -project ProjectXcode12.xcodeproj -scheme "App_iOS_With_Clip Test" -configuration "Test Debug" -xcconfig fixtures.xcconfig
echo "✅ Successfully built iOS app (Xcode 12+)"
fi
echo "
⚙️ Building macOS app"
-xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_macOS" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
+xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_macOS" -configuration "Test Debug" -xcconfig fixtures.xcconfig
echo "✅ Successfully built macOS app"
diff --git a/Tests/Fixtures/TestProject/carthage_dynamic.xcconfig b/Tests/Fixtures/TestProject/carthage_dynamic.xcconfig
new file mode 100644
index 000000000..1207c460d
--- /dev/null
+++ b/Tests/Fixtures/TestProject/carthage_dynamic.xcconfig
@@ -0,0 +1 @@
+#include "xcode12_workaround.xcconfig"
diff --git a/Tests/Fixtures/TestProject/carthage_static.xcconfig b/Tests/Fixtures/TestProject/carthage_static.xcconfig
new file mode 100644
index 000000000..5248a0506
--- /dev/null
+++ b/Tests/Fixtures/TestProject/carthage_static.xcconfig
@@ -0,0 +1,2 @@
+#include "xcode12_workaround.xcconfig"
+MACH_O_TYPE = staticlib
diff --git a/Tests/Fixtures/TestProject/fixtures.xcconfig b/Tests/Fixtures/TestProject/fixtures.xcconfig
new file mode 100644
index 000000000..1372a09ff
--- /dev/null
+++ b/Tests/Fixtures/TestProject/fixtures.xcconfig
@@ -0,0 +1,7 @@
+#include "xcode12_workaround.xcconfig"
+
+// Common settings for fixtures
+CODE_SIGN_IDENTITY =
+CODE_SIGNING_REQUIRED = NO
+CODE_SIGN_ENTITLEMENTS =
+CODE_SIGNING_ALLOWED = NO
diff --git a/Tests/Fixtures/TestProject/xcode12_workaround.xcconfig b/Tests/Fixtures/TestProject/xcode12_workaround.xcconfig
new file mode 100644
index 000000000..4585c89f8
--- /dev/null
+++ b/Tests/Fixtures/TestProject/xcode12_workaround.xcconfig
@@ -0,0 +1,9 @@
+//
+// See https://github.com/Carthage/Carthage/issues/3019
+//
+// Skips building ARM slices for simulators until Carthage can support it
+//
+
+EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8
+EXCLUDED_ARCHS_1200=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))
+EXCLUDED_ARCHS=$(inherited) $(EXCLUDED_ARCHS_$(XCODE_VERSION_MAJOR))
From c8b24acbdde0154ea1522b76dd82d006414124c9 Mon Sep 17 00:00:00 2001
From: Samuel Giddins
Date: Wed, 2 Sep 2020 14:45:27 -0700
Subject: [PATCH 018/284] Allow creating intermediary groups outside of the
project directory (#892)
---
CHANGELOG.md | 3 ++-
Sources/Core/PathExtensions.swift | 8 ++++++
Sources/XcodeGenKit/SourceGenerator.swift | 26 ++++++++++++++++---
.../SourceGeneratorTests.swift | 2 +-
4 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b92010d7a..1689d398f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,7 +11,8 @@
- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
#### Fixed
-- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
+- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
+- Allow creating intermediary groups outside of the project directory. [#892](https://github.com/yonaskolb/XcodeGen/pull/892) @segiddins
## 2.17.0
diff --git a/Sources/Core/PathExtensions.swift b/Sources/Core/PathExtensions.swift
index 7c174b072..6b72a56f7 100644
--- a/Sources/Core/PathExtensions.swift
+++ b/Sources/Core/PathExtensions.swift
@@ -73,4 +73,12 @@ extension Path {
relativeTo: ArraySlice(base.simplifyingParentDirectoryReferences().components),
memo: []))
}
+
+ /// Returns whether `self` is a strict parent of `child`.
+ ///
+ /// Both paths must be asbolute or relative paths.
+ public func isParent(of child: Path) throws -> Bool {
+ let relativePath = try child.relativePath(from: self)
+ return relativePath.components.allSatisfy { $0 != ".." }
+ }
}
diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift
index 17255a904..5abb5e1bf 100644
--- a/Sources/XcodeGenKit/SourceGenerator.swift
+++ b/Sources/XcodeGenKit/SourceGenerator.swift
@@ -294,11 +294,15 @@ class SourceGenerator {
// lives outside the project base path
let isOutOfBasePath = !path.absolute().string.contains(project.basePath.absolute().string)
+ // whether the given path is a strict parent of the project base path
+ // e.g. foo/bar is a parent of foo/bar/baz, but not foo/baz
+ let isParentOfBasePath = isOutOfBasePath && ((try? path.isParent(of: project.basePath)) == true)
+
// has no valid parent paths
- let isRootPath = (isBaseGroup && isOutOfBasePath) || path.parent() == project.basePath
+ let isRootPath = (isBaseGroup && isOutOfBasePath && isParentOfBasePath) || path.parent() == project.basePath
// is a top level group in the project
- let isTopLevelGroup = !hasCustomParent && ((isBaseGroup && !createIntermediateGroups) || isRootPath)
+ let isTopLevelGroup = !hasCustomParent && ((isBaseGroup && !createIntermediateGroups) || isRootPath || isParentOfBasePath)
let groupName = name ?? path.lastComponent
@@ -683,12 +687,26 @@ class SourceGenerator {
private func createIntermediaGroups(for fileElement: PBXFileElement, at path: Path) {
let parentPath = path.parent()
- guard parentPath != project.basePath && path.string.contains(project.basePath.string) else {
- // we've reached the top or are out of the root directory
+ guard parentPath != project.basePath else {
+ // we've reached the top
return
}
let hasParentGroup = groupsByPath[parentPath] != nil
+ if !hasParentGroup {
+ do {
+ // if the path is a parent of the project base path (or if calculating that fails)
+ // do not create a parent group
+ // e.g. for project path foo/bar/baz
+ // - create foo/baz
+ // - create baz/
+ // - do not create foo
+ let pathIsParentOfProject = try path.isParent(of: project.basePath)
+ if pathIsParentOfProject { return }
+ } catch {
+ return
+ }
+ }
let parentGroup = getGroup(
path: parentPath,
mergingChildren: [fileElement],
diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
index 2a38a7f30..e06112330 100644
--- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
@@ -492,7 +492,7 @@ class SourceGeneratorTests: XCTestCase {
let pbxProj = try project.generatePbxProj()
try pbxProj.expectFile(paths: ["Sources", "A", "b.swift"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["Sources", "F", "G", "h.swift"], buildPhase: .sources)
- try pbxProj.expectFile(paths: ["../OtherDirectory/C/D", "e.swift"], names: ["D", "e.swift"], buildPhase: .sources)
+ try pbxProj.expectFile(paths: ["..", "OtherDirectory", "C", "D", "e.swift"], names: [".", "OtherDirectory", "C", "D", "e.swift"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["Sources/B", "b.swift"], names: ["B", "b.swift"], buildPhase: .sources)
}
From 5ac96741bcdc9942e0e5edf7ff206901049242fa Mon Sep 17 00:00:00 2001
From: Brentley Jones
Date: Sun, 6 Sep 2020 00:40:32 -0500
Subject: [PATCH 019/284] Improved Application Extension scheme generation
(#932)
* Default extensions to launchAutomaticallySubstyle "2"
* Don't use debugger launcher with extensions
Xcode schemes don't use the LLDB launcher, even when debugging is enabled.
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 3 +-
Sources/XcodeGenKit/SchemeGenerator.swift | 35 +++++++++++++++++--
.../xcschemes/iMessageExtension.xcscheme | 7 ++--
.../xcschemes/iMessageExtension.xcscheme | 7 ++--
4 files changed, 42 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1689d398f..98423bfd0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@
- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
- Added ability to set custom LLDBInit scripts for launch and test schemes [#929](https://github.com/yonaskolb/XcodeGen/pull/929) @polac24
- Adds App Clip support. [#909](https://github.com/yonaskolb/XcodeGen/pull/909) @brentleyjones @dflems
+- Application extension schemes now default to `launchAutomaticallySubstyle = 2` and the correct debugger and launcher identifiers [#932](https://github.com/yonaskolb/XcodeGen/pull/932) @brentleyjones
#### Internal
- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
@@ -23,7 +24,7 @@
#### Fixed
- Treat all directories with known UTI as file wrapper. [#896](https://github.com/yonaskolb/XcodeGen/pull/896) @KhaosT
- Generated schemes for application extensions now contain `wasCreatedForAppExtension = YES`. [#898](https://github.com/yonaskolb/XcodeGen/issues/898) @muizidn
-- Allow package dependencies to use `link: false` [#920](https://github.com/yonaskolb/XcodeGen/pull/920) @k-thorat
+- Allow package dependencies to use `link: false` [#920](https://github.com/yonaskolb/XcodeGen/pull/920) @k-thorat
- Fixed issue computing relative paths. [#915](https://github.com/yonaskolb/XcodeGen/pull/915) @andrewreach
#### Internal
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 111043249..3d1686cc4 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -240,8 +240,8 @@ public class SchemeGenerator {
preActions: scheme.run?.preActions.map(getExecutionAction) ?? [],
postActions: scheme.run?.postActions.map(getExecutionAction) ?? [],
macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference,
- selectedDebuggerIdentifier: (scheme.run?.debugEnabled ?? Scheme.Run.debugEnabledDefault) ? XCScheme.defaultDebugger : "",
- selectedLauncherIdentifier: (scheme.run?.debugEnabled ?? Scheme.Run.debugEnabledDefault) ? XCScheme.defaultLauncher : "Xcode.IDEFoundation.Launcher.PosixSpawn",
+ selectedDebuggerIdentifier: selectedDebuggerIdentifier(for: schemeTarget, run: scheme.run),
+ selectedLauncherIdentifier: selectedLauncherIdentifier(for: schemeTarget, run: scheme.run),
askForAppToLaunch: scheme.run?.askForAppToLaunch,
allowLocationSimulation: allowLocationSimulation,
locationScenarioReference: locationScenarioReference,
@@ -251,7 +251,7 @@ public class SchemeGenerator {
environmentVariables: launchVariables,
language: scheme.run?.language,
region: scheme.run?.region,
- launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle,
+ launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle ?? launchAutomaticallySubstyle(for: schemeTarget),
customLLDBInitFile: scheme.run?.customLLDBInit
)
@@ -290,6 +290,14 @@ public class SchemeGenerator {
)
}
+ private func launchAutomaticallySubstyle(for target: Target?) -> String? {
+ if target?.type.isExtension == true {
+ return "2"
+ } else {
+ return nil
+ }
+ }
+
private func makeProductRunnables(for target: Target?, buildableReference: XCScheme.BuildableReference) -> (launch: XCScheme.Runnable, profile: XCScheme.BuildableProductRunnable) {
let buildable = XCScheme.BuildableProductRunnable(buildableReference: buildableReference)
if target?.type.isWatchApp == true {
@@ -303,6 +311,22 @@ public class SchemeGenerator {
return (buildable, buildable)
}
}
+
+ private func selectedDebuggerIdentifier(for target: Target?, run: Scheme.Run?) -> String {
+ if target?.type.canUseDebugLauncher != false && run?.debugEnabled ?? Scheme.Run.debugEnabledDefault {
+ return XCScheme.defaultDebugger
+ } else {
+ return ""
+ }
+ }
+
+ private func selectedLauncherIdentifier(for target: Target?, run: Scheme.Run?) -> String {
+ if target?.type.canUseDebugLauncher != false && run?.debugEnabled ?? Scheme.Run.debugEnabledDefault {
+ return XCScheme.defaultLauncher
+ } else {
+ return "Xcode.IDEFoundation.Launcher.PosixSpawn"
+ }
+ }
}
enum SchemeGenerationError: Error, CustomStringConvertible {
@@ -380,6 +404,11 @@ extension Scheme {
}
extension PBXProductType {
+ var canUseDebugLauncher: Bool {
+ // Extensions don't use the lldb launcher
+ return !isExtension
+ }
+
var isWatchApp: Bool {
switch self {
case .watchApp, .watch2App:
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
index 3cc5c5fad..c1fd6aaa6 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
@@ -45,14 +45,15 @@
+ allowLocationSimulation = "YES"
+ launchAutomaticallySubstyle = "2">
+ allowLocationSimulation = "YES"
+ launchAutomaticallySubstyle = "2">
Date: Mon, 14 Sep 2020 11:16:40 +1000
Subject: [PATCH 020/284] Fix Xcode 12 compiler error
---
Tests/ProjectSpecTests/SpecLoadingTests.swift | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 047789df2..58617b9b4 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -1213,7 +1213,7 @@ class SpecLoadingTests: XCTestCase {
$0.it("is an invalid package version") {
for dictionary in invalidPackages {
- try expect { _ = try SwiftPackage(jsonDictionary: dictionary) }.toThrow()
+ try expect(expression: { _ = try SwiftPackage(jsonDictionary: dictionary) }).toThrow()
}
}
}
From 19a5428c8afa36dcc828d54b124d247819f64514 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Mon, 14 Sep 2020 13:12:42 +1000
Subject: [PATCH 021/284] Update ProjectSpec.md
---
Docs/ProjectSpec.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 50bf35ba0..7d33a0203 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -47,6 +47,7 @@ You can also use environment variables in your configuration file, by using `${S
- [ ] **targets**: **[String: [Target](#target)]** - The list of targets in the project mapped by name
- [ ] **fileGroups**: **[String]** - A list of paths to add to the root of the project. These aren't files that will be included in your targets, but that you'd like to include in the project hierarchy anyway. For example a folder of xcconfig files that aren't already added by any target sources, or a Readme file.
- [ ] **schemes**: **[Scheme](#scheme)** - A list of schemes by name. This allows more control over what is found in [Target Scheme](#target-scheme)
+ [ ] **schemeTemplates**: **[String: [Scheme Template](#scheme-template)]** - a list of schemes that can be used as templates for actual schems which reference them via a `template` property. They can be used to extract common scheme settings. Works great in combination with `include`.
- [ ] **targetTemplates**: **[String: [Target Template](#target-template)]** - a list of targets that can be used as templates for actual targets which reference them via a `template` property. They can be used to extract common target settings. Works great in combination with `include`.
- [ ] **packages**: **[String: [Swift Package](#swift-package)]** - a map of Swift packages by name.
- [ ] **projectReferences**: **[String: [Project Reference](#project-reference)]** - a map of project references by name
From a8a2c20b11a6e9af9140c76509701a6ce8764f2a Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Mon, 14 Sep 2020 13:13:16 +1000
Subject: [PATCH 022/284] Update ProjectSpec.md
---
Docs/ProjectSpec.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 7d33a0203..e8b13677f 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -47,7 +47,7 @@ You can also use environment variables in your configuration file, by using `${S
- [ ] **targets**: **[String: [Target](#target)]** - The list of targets in the project mapped by name
- [ ] **fileGroups**: **[String]** - A list of paths to add to the root of the project. These aren't files that will be included in your targets, but that you'd like to include in the project hierarchy anyway. For example a folder of xcconfig files that aren't already added by any target sources, or a Readme file.
- [ ] **schemes**: **[Scheme](#scheme)** - A list of schemes by name. This allows more control over what is found in [Target Scheme](#target-scheme)
- [ ] **schemeTemplates**: **[String: [Scheme Template](#scheme-template)]** - a list of schemes that can be used as templates for actual schems which reference them via a `template` property. They can be used to extract common scheme settings. Works great in combination with `include`.
+- [ ] **schemeTemplates**: **[String: [Scheme Template](#scheme-template)]** - a list of schemes that can be used as templates for actual schems which reference them via a `template` property. They can be used to extract common scheme settings. Works great in combination with `include`.
- [ ] **targetTemplates**: **[String: [Target Template](#target-template)]** - a list of targets that can be used as templates for actual targets which reference them via a `template` property. They can be used to extract common target settings. Works great in combination with `include`.
- [ ] **packages**: **[String: [Swift Package](#swift-package)]** - a map of Swift packages by name.
- [ ] **projectReferences**: **[String: [Project Reference](#project-reference)]** - a map of project references by name
From 775e14c48f0f55be3faecf550e39da50932dfa74 Mon Sep 17 00:00:00 2001
From: rinsuki <428rinsuki+git@gmail.com>
Date: Mon, 21 Sep 2020 17:44:37 +0900
Subject: [PATCH 023/284] Fix appex's Runpath Search Paths under macOS target
(#952)
* Fix appex's Runpath Search Paths under macOS target
* Update CHANGELOG.md
---
CHANGELOG.md | 1 +
SettingPresets/Product_Platform/app-extension_macOS.yml | 1 +
2 files changed, 2 insertions(+)
create mode 100644 SettingPresets/Product_Platform/app-extension_macOS.yml
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 98423bfd0..7ff0a5759 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@
#### Fixed
- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
- Allow creating intermediary groups outside of the project directory. [#892](https://github.com/yonaskolb/XcodeGen/pull/892) @segiddins
+- Fix appex's Runpath Search Paths under macOS target. [#952](https://github.com/yonaskolb/XcodeGen/pull/952) @rinsuki
## 2.17.0
diff --git a/SettingPresets/Product_Platform/app-extension_macOS.yml b/SettingPresets/Product_Platform/app-extension_macOS.yml
new file mode 100644
index 000000000..65b36ca7d
--- /dev/null
+++ b/SettingPresets/Product_Platform/app-extension_macOS.yml
@@ -0,0 +1 @@
+LD_RUNPATH_SEARCH_PATHS: ["$(inherited)", "@executable_path/../Frameworks", "@executable_path/../../../../Frameworks"]
From 43177dec49ef8a8097ea994e3b08f0ac27880ee9 Mon Sep 17 00:00:00 2001
From: Cody Vandermyn <721474+codeman9@users.noreply.github.com>
Date: Mon, 28 Sep 2020 23:44:53 -0700
Subject: [PATCH 024/284] Select the first runnable target (#957)
* Select the first runnable target, if there is one
Instead of just selecting the first target as the scheme target, instead search for and select the first runnable target. If there are no runnables found, then select the first target.
* update docs
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 +-
Sources/XcodeGenKit/SchemeGenerator.swift | 3 ++-
.../SchemeGeneratorTests.swift | 18 ++++++++++++++++++
4 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7ff0a5759..286cf2b4b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@
- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
#### Fixed
+- Select the first runnable build target, if present. [#957](https://github.com/yonaskolb/XcodeGen/pull/957) @codeman9
- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
- Allow creating intermediary groups outside of the project directory. [#892](https://github.com/yonaskolb/XcodeGen/pull/892) @segiddins
- Fix appex's Runpath Search Paths under macOS target. [#952](https://github.com/yonaskolb/XcodeGen/pull/952) @rinsuki
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index e8b13677f..aec3502aa 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -783,7 +783,7 @@ Scheme run scripts added via **preActions** or **postActions**. They run before
A multiline script can be written using the various YAML multiline methods, for example with `|`. See [Build Script](#build-script).
### Run Action
-- [ ] **executable**: **String** - the name of the target to launch as an executable. Defaults to the first build target in the scheme
+- [ ] **executable**: **String** - the name of the target to launch as an executable. Defaults to the first runnable build target in the scheme, or the first build target if a runnable build target is not found
- [ ] **customLLDBInit**: **String** - the absolute path to the custom `.lldbinit` file
### Test Action
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 3d1686cc4..94ba4ffab 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -165,7 +165,8 @@ public class SchemeGenerator {
if let targetName = scheme.run?.executable {
schemeTarget = project.getTarget(targetName)
} else {
- schemeTarget = target ?? project.getTarget(scheme.build.targets.first!.target.name)
+ let name = scheme.build.targets.first { $0.buildTypes.contains(.running) }?.target.name ?? scheme.build.targets.first!.target.name
+ schemeTarget = target ?? project.getTarget(name)
}
let shouldExecuteOnLaunch = schemeTarget?.shouldExecuteOnLaunch == true
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 85481d63d..0d4e1701c 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -104,6 +104,24 @@ class SchemeGeneratorTests: XCTestCase {
try expect(xcscheme.testAction?.customLLDBInitFile) == "/test/.lldbinit"
}
+ let frameworkTarget = Scheme.BuildTarget(target: .local(framework.name), buildTypes: [.archiving])
+ $0.it("generates a scheme with the first runnable selected") {
+ let scheme = Scheme(
+ name: "MyScheme",
+ build: Scheme.Build(targets: [frameworkTarget, buildTarget])
+ )
+ let project = Project(
+ name: "test",
+ targets: [framework, app],
+ schemes: [scheme]
+ )
+ let xcodeProject = try project.generateXcodeProject()
+ let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
+
+ let buildableReference = xcscheme.launchAction?.runnable?.buildableReference
+ try expect(buildableReference?.buildableName) == "MyApp.app"
+ }
+
$0.it("generates scheme with multiple configs") {
let configs: [Config] = [
Config(name: "Beta", type: .debug),
From 162635243cee7c91794ae9e264cd9008c1564f9b Mon Sep 17 00:00:00 2001
From: Masaki Haga
Date: Tue, 29 Sep 2020 15:45:30 +0900
Subject: [PATCH 025/284] Update ProjectSpec.md (#956)
---
Docs/ProjectSpec.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index aec3502aa..31ef26b03 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -250,7 +250,7 @@ Settings are merged in the following order: groups, base, configs.
- [ ] **transitivelyLinkDependencies**: **Bool** - If this is not specified the value from the project set in [Options](#options)`.transitivelyLinkDependencies` will be used.
- [ ] **directlyEmbedCarthageDependencies**: **Bool** - If this is `true` Carthage dependencies will be embedded using an `Embed Frameworks` build phase instead of the `copy-frameworks` script. Defaults to `true` for all targets except iOS/tvOS/watchOS Applications.
- [ ] **requiresObjCLinking**: **Bool** - If this is `true` any targets that link to this target will have `-ObjC` added to their `OTHER_LDFLAGS`. This is required if a static library has any catagories or extensions on Objective-C code. See [this guide](https://pewpewthespells.com/blog/objc_linker_flags.html#objc) for more details. Defaults to `true` if `type` is `library.static`. If you are 100% sure you don't have catagories or extensions on Objective-C code (pure Swift with no use of Foundation/UIKit) you can set this to `false`, otherwise it's best to leave it alone.
-- [ ]**onlyCopyFilesOnInstall**: **Bool** – If this is `true`, the `Embed Frameworks` build phase will have the "Copy only when installing" chekbox checked. Defaults to `false`.
+- [ ] **onlyCopyFilesOnInstall**: **Bool** – If this is `true`, the `Embed Frameworks` build phase will have the "Copy only when installing" chekbox checked. Defaults to `false`.
- [ ] **preBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *before* any other build phases
- [ ] **postCompileScripts**: **[[Build Script](#build-script)]** - Build scripts that run after the Compile Sources phase
- [ ] **postBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *after* any other build phases
From 742fe69c5b1f4b481882f1952824116885856539 Mon Sep 17 00:00:00 2001
From: Roman Podymov
Date: Fri, 2 Oct 2020 09:48:32 +0200
Subject: [PATCH 026/284] "Copy only when installing" for "Embed App
Extensions" (#948)
* Added onlyCopyExtensionsOnInstall
* Fix for Xcode 12
* Fixed PBXCopyFilesBuildPhase for "Embed App Extensions"
* Test for onlyCopyExtensionsOnInstall
* Update CHANGELOG.md
* Update ProjectSpec.md
* Refactoring
* More tests for onlyCopyExtensionsOnInstall
* Reverted
* Refactoring with getPBXCopyFilesBuildPhase
* Deleted similar tests
* onlyCopyExtensionsOnInstall -> onlyCopyFilesOnInstall
* Update ProjectSpec.md
* Update CHANGELOG.md
* Update ProjectGeneratorTests.swift
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 +-
Sources/XcodeGenKit/PBXProjGenerator.swift | 32 ++++----
.../ProjectGeneratorTests.swift | 81 ++++++++++++++++++-
4 files changed, 96 insertions(+), 20 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 286cf2b4b..0d4227a21 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@
- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat
- Allow creating intermediary groups outside of the project directory. [#892](https://github.com/yonaskolb/XcodeGen/pull/892) @segiddins
- Fix appex's Runpath Search Paths under macOS target. [#952](https://github.com/yonaskolb/XcodeGen/pull/952) @rinsuki
+- `onlyCopyFilesOnInstall` is extended for the Embed App Extensions build phase. [#948](https://github.com/yonaskolb/XcodeGen/pull/948) @RomanPodymov
## 2.17.0
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 31ef26b03..3d4fb2f3b 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -250,7 +250,7 @@ Settings are merged in the following order: groups, base, configs.
- [ ] **transitivelyLinkDependencies**: **Bool** - If this is not specified the value from the project set in [Options](#options)`.transitivelyLinkDependencies` will be used.
- [ ] **directlyEmbedCarthageDependencies**: **Bool** - If this is `true` Carthage dependencies will be embedded using an `Embed Frameworks` build phase instead of the `copy-frameworks` script. Defaults to `true` for all targets except iOS/tvOS/watchOS Applications.
- [ ] **requiresObjCLinking**: **Bool** - If this is `true` any targets that link to this target will have `-ObjC` added to their `OTHER_LDFLAGS`. This is required if a static library has any catagories or extensions on Objective-C code. See [this guide](https://pewpewthespells.com/blog/objc_linker_flags.html#objc) for more details. Defaults to `true` if `type` is `library.static`. If you are 100% sure you don't have catagories or extensions on Objective-C code (pure Swift with no use of Foundation/UIKit) you can set this to `false`, otherwise it's best to leave it alone.
-- [ ] **onlyCopyFilesOnInstall**: **Bool** – If this is `true`, the `Embed Frameworks` build phase will have the "Copy only when installing" chekbox checked. Defaults to `false`.
+- [ ] **onlyCopyFilesOnInstall**: **Bool** – If this is `true`, the `Embed Frameworks` and `Embed App Extensions` (if available) build phases will have the "Copy only when installing" chekbox checked. Defaults to `false`.
- [ ] **preBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *before* any other build phases
- [ ] **postCompileScripts**: **[[Build Script](#build-script)]** - Build scripts that run after the Compile Sources phase
- [ ] **postBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *after* any other build phases
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 886cd70cc..8a89814b8 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -13,6 +13,8 @@ public class PBXProjGenerator {
let projectDirectory: Path?
let carthageResolver: CarthageDependencyResolver
+ public static let copyFilesActionMask: UInt = 8
+
var sourceGenerator: SourceGenerator!
var targetObjects: [String: PBXTarget] = [:]
@@ -979,6 +981,17 @@ public class PBXProjGenerator {
return sourceFilesByCopyFiles.mapValues { getBuildFilesForSourceFiles($0) }
}
+ func getPBXCopyFilesBuildPhase(dstSubfolderSpec: PBXCopyFilesBuildPhase.SubFolder, name: String, files: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {
+ return PBXCopyFilesBuildPhase(
+ dstPath: "",
+ dstSubfolderSpec: dstSubfolderSpec,
+ name: name,
+ buildActionMask: target.onlyCopyFilesOnInstall ? PBXProjGenerator.copyFilesActionMask : PBXBuildPhase.defaultBuildActionMask,
+ files: files,
+ runOnlyForDeploymentPostprocessing: target.onlyCopyFilesOnInstall ? true : false
+ )
+ }
+
copyFilesBuildPhasesFiles.merge(getBuildFilesForCopyFilesPhases()) { $0 + $1 }
buildPhases += try target.preBuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }
@@ -1076,13 +1089,8 @@ public class PBXProjGenerator {
if !extensions.isEmpty {
- let copyFilesPhase = addObject(
- PBXCopyFilesBuildPhase(
- dstPath: "",
- dstSubfolderSpec: .plugins,
- name: "Embed App Extensions",
- files: extensions
- )
+ let copyFilesPhase = addObject(
+ getPBXCopyFilesBuildPhase(dstSubfolderSpec: .plugins, name: "Embed App Extensions", files: extensions)
)
buildPhases.append(copyFilesPhase)
@@ -1105,16 +1113,8 @@ public class PBXProjGenerator {
copyFrameworksReferences += getBuildFilesForPhase(.frameworks)
if !copyFrameworksReferences.isEmpty {
- let copyFilesActionMask: UInt = 8
let copyFilesPhase = addObject(
- PBXCopyFilesBuildPhase(
- dstPath: "",
- dstSubfolderSpec: .frameworks,
- name: "Embed Frameworks",
- buildActionMask: target.onlyCopyFilesOnInstall ? copyFilesActionMask : PBXBuildPhase.defaultBuildActionMask,
- files: copyFrameworksReferences,
- runOnlyForDeploymentPostprocessing: target.onlyCopyFilesOnInstall ? true : false
- )
+ getPBXCopyFilesBuildPhase(dstSubfolderSpec: .frameworks, name: "Embed Frameworks", files: copyFrameworksReferences)
)
buildPhases.append(copyFilesPhase)
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 1f2e329ea..81c12d34a 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -805,16 +805,91 @@ class ProjectGeneratorTests: XCTestCase {
let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))
let buildPhases = nativeTarget.buildPhases
- let embedFrameworkPhase = pbxProject
+ let embedFrameworksPhase = pbxProject
.copyFilesBuildPhases
.filter { buildPhases.contains($0) }
.first { $0.dstSubfolderSpec == .frameworks }
- let phase = try unwrap(embedFrameworkPhase)
- try expect(phase.buildActionMask) == 8
+ let phase = try unwrap(embedFrameworksPhase)
+ try expect(phase.buildActionMask) == PBXProjGenerator.copyFilesActionMask
try expect(phase.runOnlyForDeploymentPostprocessing) == true
}
+ $0.it("copies files only on install in the Embed App Extensions step") {
+ let appExtension = Target(
+ name: "AppExtension",
+ type: .appExtension,
+ platform: .tvOS
+ )
+
+ let app = Target(
+ name: "App",
+ type: .application,
+ platform: .tvOS,
+ dependencies: [
+ Dependency(type: .target, reference: "AppExtension")
+ ],
+ onlyCopyFilesOnInstall: true
+ )
+
+ let project = Project(name: "test", targets: [app, appExtension])
+ let pbxProject = try project.generatePbxProj()
+ let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))
+ let buildPhases = nativeTarget.buildPhases
+
+ let embedAppExtensionsPhase = pbxProject
+ .copyFilesBuildPhases
+ .filter { buildPhases.contains($0) }
+ .first { $0.dstSubfolderSpec == .plugins }
+
+ let phase = try unwrap(embedAppExtensionsPhase)
+ try expect(phase.buildActionMask) == PBXProjGenerator.copyFilesActionMask
+ try expect(phase.runOnlyForDeploymentPostprocessing) == true
+ }
+
+ $0.it("copies files only on install in the Embed Frameworks and Embed App Extensions steps") {
+ let appExtension = Target(
+ name: "AppExtension",
+ type: .appExtension,
+ platform: .tvOS
+ )
+
+ let app = Target(
+ name: "App",
+ type: .application,
+ platform: .tvOS,
+ dependencies: [
+ Dependency(type: .target, reference: "AppExtension"),
+ Dependency(type: .framework, reference: "FrameworkA.framework"),
+ Dependency(type: .framework, reference: "FrameworkB.framework", embed: false),
+ ],
+ onlyCopyFilesOnInstall: true
+ )
+
+ let project = Project(name: "test", targets: [app, appExtension])
+ let pbxProject = try project.generatePbxProj()
+ let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))
+ let buildPhases = nativeTarget.buildPhases
+
+ let embedFrameworksPhase = pbxProject
+ .copyFilesBuildPhases
+ .filter { buildPhases.contains($0) }
+ .first { $0.dstSubfolderSpec == .frameworks }
+
+ let embedFrameworksPhaseValue = try unwrap(embedFrameworksPhase)
+ try expect(embedFrameworksPhaseValue.buildActionMask) == PBXProjGenerator.copyFilesActionMask
+ try expect(embedFrameworksPhaseValue.runOnlyForDeploymentPostprocessing) == true
+
+ let embedAppExtensionsPhase = pbxProject
+ .copyFilesBuildPhases
+ .filter { buildPhases.contains($0) }
+ .first { $0.dstSubfolderSpec == .plugins }
+
+ let embedAppExtensionsPhaseValue = try unwrap(embedAppExtensionsPhase)
+ try expect(embedAppExtensionsPhaseValue.buildActionMask) == PBXProjGenerator.copyFilesActionMask
+ try expect(embedAppExtensionsPhaseValue.runOnlyForDeploymentPostprocessing) == true
+ }
+
$0.it("sets -ObjC for targets that depend on requiresObjCLinking targets") {
let requiresObjCLinking = Target(
name: "requiresObjCLinking",
From 5ea9b4eec4c3ec7ec91147b26edef062a0366f5b Mon Sep 17 00:00:00 2001
From: Liam Nichols
Date: Fri, 2 Oct 2020 08:52:30 +0100
Subject: [PATCH 027/284] Update SettingsPresets to include new and modified
values as part of Xcode 12 (#953)
* Update SettingsPresets to include new and modified values as part of Xcode 12's TemplateInfo.plist
* Update CHANGELOG.md
* Update Test Fixtures after running unit tests
* Revert change to GCC_PREPROCESSOR_DEFINITIONS order (https://github.com/yonaskolb/XcodeGen/pull/953\#discussion_r497486482)
* Run tests to update fixtures
---
CHANGELOG.md | 1 +
SettingPresets/Configs/debug.yml | 2 +-
SettingPresets/Configs/release.yml | 3 +-
SettingPresets/base.yml | 7 +++-
.../Project.xcodeproj/project.pbxproj | 11 +++++--
.../SPM/SPM.xcodeproj/project.pbxproj | 11 +++++--
.../AnotherProject.xcodeproj/project.pbxproj | 33 +++++++++++++++----
.../Project.xcodeproj/project.pbxproj | 33 +++++++++++++++----
.../ProjectXcode12.xcodeproj/project.pbxproj | 33 +++++++++++++++----
.../TestProject.xcodeproj/project.pbxproj | 11 +++++--
10 files changed, 118 insertions(+), 27 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d4227a21..fe51065e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Added ability to set custom LLDBInit scripts for launch and test schemes [#929](https://github.com/yonaskolb/XcodeGen/pull/929) @polac24
- Adds App Clip support. [#909](https://github.com/yonaskolb/XcodeGen/pull/909) @brentleyjones @dflems
- Application extension schemes now default to `launchAutomaticallySubstyle = 2` and the correct debugger and launcher identifiers [#932](https://github.com/yonaskolb/XcodeGen/pull/932) @brentleyjones
+- Updated SettingsPresets to use new defaults from Xcode 12. [#953](https://github.com/yonaskolb/XcodeGen/pull/953) @liamnichols
#### Internal
- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
diff --git a/SettingPresets/Configs/debug.yml b/SettingPresets/Configs/debug.yml
index 5b0b75213..6c3e3c20f 100644
--- a/SettingPresets/Configs/debug.yml
+++ b/SettingPresets/Configs/debug.yml
@@ -6,7 +6,7 @@ ENABLE_TESTABILITY: YES
GCC_DYNAMIC_NO_PIC: NO
GCC_OPTIMIZATION_LEVEL: '0'
GCC_PREPROCESSOR_DEFINITIONS: ["$(inherited)", "DEBUG=1"]
-MTL_ENABLE_DEBUG_INFO: YES
+MTL_ENABLE_DEBUG_INFO: INCLUDE_SOURCE
ONLY_ACTIVE_ARCH: YES
# Swift Settings
diff --git a/SettingPresets/Configs/release.yml b/SettingPresets/Configs/release.yml
index ce6d9f247..7a14baa93 100644
--- a/SettingPresets/Configs/release.yml
+++ b/SettingPresets/Configs/release.yml
@@ -3,7 +3,8 @@
# /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_ProjectSettings.xctemplate/TemplateInfo.plist
DEBUG_INFORMATION_FORMAT: dwarf-with-dsym
ENABLE_NS_ASSERTIONS: NO
-VALIDATE_PRODUCT: YES
+MTL_ENABLE_DEBUG_INFO: NO
# Swift Settings
SWIFT_COMPILATION_MODE: wholemodule
+SWIFT_OPTIMIZATION_LEVEL: -O
diff --git a/SettingPresets/base.yml b/SettingPresets/base.yml
index 0cb9ea15d..d7533a841 100644
--- a/SettingPresets/base.yml
+++ b/SettingPresets/base.yml
@@ -8,6 +8,7 @@ CLANG_CXX_LANGUAGE_STANDARD: gnu++14
CLANG_CXX_LIBRARY: libc++
CLANG_ENABLE_MODULES: YES
CLANG_ENABLE_OBJC_ARC: YES
+CLANG_ENABLE_OBJC_WEAK: YES
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING: YES
CLANG_WARN_BOOL_CONVERSION: YES
CLANG_WARN_COMMA: YES
@@ -23,6 +24,7 @@ CLANG_WARN_NON_LITERAL_NULL_CONVERSION: YES
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF: YES
CLANG_WARN_OBJC_LITERAL_CONVERSION: YES
CLANG_WARN_OBJC_ROOT_CLASS: YES_ERROR
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER: YES
CLANG_WARN_RANGE_LOOP_ANALYSIS: YES
CLANG_WARN_STRICT_PROTOTYPES: YES
CLANG_WARN_SUSPICIOUS_MOVE: YES
@@ -39,7 +41,10 @@ GCC_WARN_UNDECLARED_SELECTOR: YES
GCC_WARN_UNINITIALIZED_AUTOS: YES_AGGRESSIVE
GCC_WARN_UNUSED_FUNCTION: YES
GCC_WARN_UNUSED_VARIABLE: YES
+MTL_FAST_MATH: YES
-# Swift Settings
+# Target Settings
PRODUCT_NAME: $(TARGET_NAME)
+
+# Swift Settings
SWIFT_VERSION: '5.0'
diff --git a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
index 191fe8a67..300eb080a 100644
--- a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
@@ -377,6 +377,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -392,6 +393,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -410,10 +412,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
};
name = Release;
};
@@ -549,6 +553,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -564,6 +569,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -588,7 +594,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
index 350ddef65..8236165a9 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
@@ -403,6 +403,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -418,6 +419,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -442,7 +444,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -477,6 +480,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -492,6 +496,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -510,11 +515,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
};
name = Release;
};
diff --git a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
index 2e4c099f7..c9952f548 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
@@ -120,6 +120,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -135,6 +136,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -153,11 +155,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
};
name = "Test Release";
};
@@ -171,6 +175,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -186,6 +191,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -204,11 +210,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
};
name = "Production Release";
};
@@ -223,6 +231,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -238,6 +247,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -256,11 +266,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
};
name = "Staging Release";
};
@@ -296,6 +308,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -311,6 +324,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -335,7 +349,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -454,6 +469,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -469,6 +485,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -493,7 +510,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -581,6 +599,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -596,6 +615,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -620,7 +640,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 96e72c628..e43c217af 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -4797,6 +4797,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -4812,6 +4813,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -4836,7 +4838,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -5004,6 +5007,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5019,6 +5023,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5037,10 +5042,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 4.0;
};
name = "Production Release";
@@ -5072,6 +5079,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5087,6 +5095,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5105,10 +5114,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 4.0;
};
name = "Test Release";
@@ -5426,6 +5437,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5441,6 +5453,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5465,7 +5478,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -5651,6 +5665,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5666,6 +5681,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5690,7 +5706,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -5927,6 +5944,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5942,6 +5960,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5960,10 +5979,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 4.0;
};
name = "Staging Release";
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
index 509316aae..96d15fb9e 100644
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
@@ -3204,6 +3204,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -3219,6 +3220,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -3237,10 +3239,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 4.0;
};
name = "Production Release";
@@ -3716,6 +3720,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -3731,6 +3736,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -3755,7 +3761,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -3965,6 +3972,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -3980,6 +3988,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -4004,7 +4013,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -4549,6 +4559,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -4564,6 +4575,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -4582,10 +4594,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 4.0;
};
name = "Staging Release";
@@ -5213,6 +5227,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5228,6 +5243,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5246,10 +5262,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 4.0;
};
name = "Test Release";
@@ -5524,6 +5542,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -5539,6 +5558,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -5563,7 +5583,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
diff --git a/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj b/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
index e907f8e29..c63f27c29 100644
--- a/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
@@ -91,6 +91,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -106,6 +107,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -124,11 +126,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
};
name = Release;
};
@@ -184,6 +188,7 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
@@ -199,6 +204,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -223,7 +229,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
From d959bdfdddb9563980a7b777ee85514f966d2dff Mon Sep 17 00:00:00 2001
From: Liam Nichols
Date: Fri, 2 Oct 2020 09:23:38 +0100
Subject: [PATCH 028/284] Enable Base Localization by default (#955)
* Update PBXProjGenerator to include 'Base' developmentRegion and file system derived knownRegions in the output knownRegions
* Update CHANGELOG.md
* Run tests to update fixtures
---
CHANGELOG.md | 1 +
Sources/XcodeGenKit/PBXProjGenerator.swift | 6 +++---
.../CarthageProject/Project.xcodeproj/project.pbxproj | 1 +
Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj | 1 +
.../AnotherProject/AnotherProject.xcodeproj/project.pbxproj | 1 +
.../scheme_test/TestProject.xcodeproj/project.pbxproj | 1 +
6 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fe51065e6..1282f8fbd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@
- Adds App Clip support. [#909](https://github.com/yonaskolb/XcodeGen/pull/909) @brentleyjones @dflems
- Application extension schemes now default to `launchAutomaticallySubstyle = 2` and the correct debugger and launcher identifiers [#932](https://github.com/yonaskolb/XcodeGen/pull/932) @brentleyjones
- Updated SettingsPresets to use new defaults from Xcode 12. [#953](https://github.com/yonaskolb/XcodeGen/pull/953) @liamnichols
+- Enable Base Internationalization by default as per Xcode 12 behavior. [#954](https://github.com/yonaskolb/XcodeGen/issues/954) @liamnichols
#### Internal
- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 8a89814b8..06116064f 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -95,13 +95,14 @@ public class PBXProjGenerator {
)
)
+ let developmentRegion = project.options.developmentLanguage ?? "en"
let pbxProject = addObject(
PBXProject(
name: project.name,
buildConfigurationList: buildConfigList,
compatibilityVersion: project.compatibilityVersion,
mainGroup: mainGroup,
- developmentRegion: project.options.developmentLanguage ?? "en"
+ developmentRegion: developmentRegion
)
)
@@ -291,8 +292,7 @@ public class PBXProjGenerator {
projectAttributes["knownAssetTags"] = assetTags
}
- let knownRegions = sourceGenerator.knownRegions.sorted()
- pbxProject.knownRegions = knownRegions.isEmpty ? ["en"] : knownRegions
+ pbxProject.knownRegions = sourceGenerator.knownRegions.union(["Base", developmentRegion]).sorted()
pbxProject.packages = packageReferences.sorted { $0.key < $1.key }.map { $1 }
diff --git a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
index 300eb080a..df3662bc1 100644
--- a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
@@ -321,6 +321,7 @@
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
+ Base,
en,
);
mainGroup = 293D0FF827366B513839236A;
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
index 8236165a9..cda4da212 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
@@ -213,6 +213,7 @@
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
+ Base,
en,
);
mainGroup = 218F6C96DF9E182F526258CF;
diff --git a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
index c9952f548..a3083ce0b 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
@@ -86,6 +86,7 @@
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
+ Base,
en,
);
mainGroup = 4E8CFA4275C972686621210C;
diff --git a/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj b/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
index c63f27c29..441fd45e9 100644
--- a/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
@@ -59,6 +59,7 @@
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
+ Base,
en,
);
mainGroup = 2D08B11F4EE060D112B7BCA1;
From 61a389b83f32f002d666813f3c78c06544302474 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Wed, 30 Sep 2020 23:08:24 +1000
Subject: [PATCH 029/284] Update to 2.18.0
---
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 904dd784e..83e2c99a8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.17.0
+VERSION = 2.18.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index e4e094e2c..7ab3471dd 100644
--- a/README.md
+++ b/README.md
@@ -110,7 +110,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.17.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.18.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index 944091cdc..de2b414c6 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.17.0")
+let version = Version("2.18.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From 4988388cc5ca335963eb10cc121329155219d051 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Fri, 2 Oct 2020 18:42:50 +1000
Subject: [PATCH 030/284] Update to Xcode 12 (#960)
* update to final xcode 12 version
* only generate and test xcode 12 project
* update default xcode version to 12
* update changelog
---
.github/workflows/ci.yml | 2 +-
CHANGELOG.md | 5 +-
Sources/XcodeGenKit/Version.swift | 2 +-
.../Project.xcodeproj/project.pbxproj | 2 +-
.../SPM/SPM.xcodeproj/project.pbxproj | 2 +-
.../xcshareddata/xcschemes/App.xcscheme | 2 +-
.../AnotherProject.xcodeproj/project.pbxproj | 2 +-
.../Project.xcodeproj/project.pbxproj | 770 +-
.../xcshareddata/xcschemes/App_Clip.xcscheme | 26 +-
.../xcschemes/App_Scheme.xcscheme | 2 +-
.../xcschemes/App_iOS Production.xcscheme | 2 +-
.../xcschemes/App_iOS Staging.xcscheme | 2 +-
.../xcschemes/App_iOS Test.xcscheme | 2 +-
.../xcshareddata/xcschemes/App_macOS.xcscheme | 2 +-
.../xcschemes/App_watchOS.xcscheme | 2 +-
.../xcshareddata/xcschemes/Framework.xcscheme | 2 +-
.../xcshareddata/xcschemes/Tool.xcscheme | 2 +-
.../xcschemes/iMessageApp.xcscheme | 2 +-
.../xcschemes/iMessageExtension.xcscheme | 2 +-
.../ProjectXcode12.xcodeproj/project.pbxproj | 7504 -----------------
.../contents.xcworkspacedata | 7 -
.../xcschemes/App_Scheme.xcscheme | 121 -
.../xcschemes/App_iOS Production.xcscheme | 142 -
.../xcschemes/App_iOS Staging.xcscheme | 142 -
.../xcschemes/App_iOS Test.xcscheme | 142 -
.../App_iOS_With_Clip Production.xcscheme | 94 -
.../App_iOS_With_Clip Staging.xcscheme | 94 -
.../xcschemes/App_iOS_With_Clip Test.xcscheme | 94 -
.../xcshareddata/xcschemes/App_macOS.xcscheme | 94 -
.../xcschemes/App_watchOS.xcscheme | 109 -
.../xcshareddata/xcschemes/Framework.xcscheme | 120 -
.../xcshareddata/xcschemes/Tool.xcscheme | 94 -
.../xcschemes/iMessageApp.xcscheme | 94 -
.../xcschemes/iMessageExtension.xcscheme | 96 -
Tests/Fixtures/TestProject/build.sh | 7 -
.../Fixtures/TestProject/project-xcode-12.yml | 72 -
Tests/Fixtures/TestProject/project.yml | 39 +
.../TestProject.xcodeproj/project.pbxproj | 2 +-
scripts/gen-fixtures.sh | 1 -
39 files changed, 838 insertions(+), 9063 deletions(-)
rename Tests/Fixtures/TestProject/{ProjectXcode12.xcodeproj => Project.xcodeproj}/xcshareddata/xcschemes/App_Clip.xcscheme (80%)
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.pbxproj
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/project.xcworkspace/contents.xcworkspacedata
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
delete mode 100644 Tests/Fixtures/TestProject/project-xcode-12.yml
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 49dc8be5f..bcb9f46e3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,7 +8,7 @@ jobs:
name: Xcode ${{ matrix.xcode }}
strategy:
matrix:
- xcode: ["11", "12_beta"]
+ xcode: ["12"]
steps:
- uses: actions/checkout@master
- name: Set Xcode
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1282f8fbd..4dd13892e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,8 +10,11 @@
- Updated SettingsPresets to use new defaults from Xcode 12. [#953](https://github.com/yonaskolb/XcodeGen/pull/953) @liamnichols
- Enable Base Internationalization by default as per Xcode 12 behavior. [#954](https://github.com/yonaskolb/XcodeGen/issues/954) @liamnichols
+#### Changed
+- Change default project version to Xcode 12 [#960](https://github.com/yonaskolb/XcodeGen/pull/960) @yonaskolb
+
#### Internal
-- Updates CI to run on Xcode 12 beta. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) @dflems
+- Updates CI to run on Xcode 12. [#936](https://github.com/yonaskolb/XcodeGen/pull/936) [#960](https://github.com/yonaskolb/XcodeGen/pull/960) @dflems @yonaskolb
#### Fixed
- Select the first runnable build target, if present. [#957](https://github.com/yonaskolb/XcodeGen/pull/957) @codeman9
diff --git a/Sources/XcodeGenKit/Version.swift b/Sources/XcodeGenKit/Version.swift
index ca0e6a39d..eb2449152 100644
--- a/Sources/XcodeGenKit/Version.swift
+++ b/Sources/XcodeGenKit/Version.swift
@@ -4,7 +4,7 @@ import ProjectSpec
extension Project {
var xcodeVersion: String {
- XCodeVersion.parse(options.xcodeVersion ?? "10.2")
+ XCodeVersion.parse(options.xcodeVersion ?? "12.0")
}
var schemeVersion: String {
diff --git a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
index df3662bc1..1c1440059 100644
--- a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj
@@ -312,7 +312,7 @@
0FBAE303E3CFC2ABAC876A77 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1200;
TargetAttributes = {
};
};
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
index cda4da212..d1d85e21c 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
@@ -204,7 +204,7 @@
F7B09D77DB7447B17DCDA3C4 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1200;
TargetAttributes = {
};
};
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme b/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme
index 5547dad3d..3c95caf37 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme
@@ -1,6 +1,6 @@
+ ReferencedContainer = "container:Project.xcodeproj">
@@ -33,30 +33,30 @@
skipped = "NO">
+ ReferencedContainer = "container:Project.xcodeproj">
+ ReferencedContainer = "container:Project.xcodeproj">
+ ReferencedContainer = "container:Project.xcodeproj">
@@ -76,10 +76,10 @@
runnableDebuggingMode = "0">
+ ReferencedContainer = "container:Project.xcodeproj">
@@ -95,10 +95,10 @@
runnableDebuggingMode = "0">
+ ReferencedContainer = "container:Project.xcodeproj">
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
index 16b808cbe..df89ce7cd 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
deleted file mode 100644
index 5ae081082..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme
deleted file mode 100644
index 34f5b11cf..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme
deleted file mode 100644
index ef31e1396..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme
deleted file mode 100644
index bca1a44e2..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme
deleted file mode 100644
index f9998d3eb..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Production.xcscheme
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme
deleted file mode 100644
index c87911bb4..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Staging.xcscheme
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme
deleted file mode 100644
index c82da690f..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_iOS_With_Clip Test.xcscheme
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme
deleted file mode 100644
index e5bb89782..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme
deleted file mode 100644
index 97721bafc..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
deleted file mode 100644
index f808f3f18..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
deleted file mode 100644
index 8d5688667..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme
deleted file mode 100644
index ca0000609..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme b/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
deleted file mode 100644
index e1305825a..000000000
--- a/Tests/Fixtures/TestProject/ProjectXcode12.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh
index ea5876da3..590d02387 100755
--- a/Tests/Fixtures/TestProject/build.sh
+++ b/Tests/Fixtures/TestProject/build.sh
@@ -17,13 +17,6 @@ echo "
xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_iOS Test" -configuration "Test Debug" -xcconfig fixtures.xcconfig
echo "✅ Successfully built iOS app"
-if [[ "$XCODE_VERSION" == 12* ]]; then
- echo "
- ⚙️ Building iOS app (Xcode 12+)"
- xcodebuild -quiet -project ProjectXcode12.xcodeproj -scheme "App_iOS_With_Clip Test" -configuration "Test Debug" -xcconfig fixtures.xcconfig
- echo "✅ Successfully built iOS app (Xcode 12+)"
-fi
-
echo "
⚙️ Building macOS app"
xcodebuild -quiet -workspace Workspace.xcworkspace -scheme "App_macOS" -configuration "Test Debug" -xcconfig fixtures.xcconfig
diff --git a/Tests/Fixtures/TestProject/project-xcode-12.yml b/Tests/Fixtures/TestProject/project-xcode-12.yml
deleted file mode 100644
index 5c5da3337..000000000
--- a/Tests/Fixtures/TestProject/project-xcode-12.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-# NOTE: when Xcode 12 goes GM and the Xcode 11 CI can be dropped,
-# this file can be merged into project.yml. As-is, it generates
-# targets that Xcode 11 doesn't understand or know how to build.
-name: ProjectXcode12
-include: [project.yml]
-targets:
- App_iOS_With_Clip:
- type: application
- platform: iOS
- attributes:
- ProvisioningStyle: Automatic
- sources:
- - path: StandaloneFiles/Standalone.swift
- - path: App_iOS
- name: App
- compilerFlags:
- - "-Werror"
- excludes:
- - "**/excluded-file"
- - "excluded-file"
- - "Model.xcmappingmodel"
- settings:
- INFOPLIST_FILE: App_iOS/Info.plist
- PRODUCT_BUNDLE_IDENTIFIER: com.project.appwithclip
- dependencies:
- - target: Framework_iOS
- - target: StaticLibrary_ObjC_iOS
- - target: App_Clip
- - sdk: Contacts.framework
- scheme:
- configVariants:
- - Test
- - Staging
- - Production
-
- App_Clip:
- type: application.on-demand-install-capable
- platform: iOS
- entitlements:
- path: App_Clip/Clip.entitlements
- properties:
- com.apple.developer.parent-application-identifiers: [$(AppIdentifierPrefix)com.project.appwithclip]
- com.apple.security.application-groups: group.com.app
- sources:
- App_Clip
- settings:
- INFOPLIST_FILE: App_Clip/Info.plist
- PRODUCT_BUNDLE_IDENTIFIER: com.project.appwithclip.clip
- dependencies:
- - target: Framework_iOS
- - target: StaticLibrary_ObjC_iOS
- scheme:
- testTargets:
- - App_Clip_Tests
- - App_Clip_UITests
-
- App_Clip_Tests:
- type: bundle.unit-test
- platform: iOS
- sources: App_iOS_Tests
- dependencies:
- - target: App_Clip
- - target: TestFramework
- - carthage: swift-tagged
- linkType: static
-
- App_Clip_UITests:
- type: bundle.ui-testing
- platform: iOS
- sources: App_Clip_UITests
- dependencies:
- - target: App_Clip
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 34895d906..dd129f356 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -124,6 +124,7 @@ targets:
- sdk: Contacts.framework
- bundle: BundleX.bundle
- target: AnotherProject/ExternalTarget
+ - target: App_Clip
onlyCopyFilesOnInstall: true
scheme:
testTargets:
@@ -285,6 +286,44 @@ targets:
sources: [Tool]
scheme: {}
+ App_Clip:
+ type: application.on-demand-install-capable
+ platform: iOS
+ entitlements:
+ path: App_Clip/Clip.entitlements
+ properties:
+ com.apple.developer.parent-application-identifiers: [$(AppIdentifierPrefix)com.project.appwithclip]
+ com.apple.security.application-groups: group.com.app
+ sources:
+ App_Clip
+ settings:
+ INFOPLIST_FILE: App_Clip/Info.plist
+ PRODUCT_BUNDLE_IDENTIFIER: com.project.app.clip
+ dependencies:
+ - target: Framework_iOS
+ - target: StaticLibrary_ObjC_iOS
+ scheme:
+ testTargets:
+ - App_Clip_Tests
+ - App_Clip_UITests
+
+ App_Clip_Tests:
+ type: bundle.unit-test
+ platform: iOS
+ sources: App_iOS_Tests
+ dependencies:
+ - target: App_Clip
+ - target: TestFramework
+ - carthage: swift-tagged
+ linkType: static
+
+ App_Clip_UITests:
+ type: bundle.ui-testing
+ platform: iOS
+ sources: App_Clip_UITests
+ dependencies:
+ - target: App_Clip
+
schemes:
Framework:
build:
diff --git a/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj b/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
index 441fd45e9..4cbb19508 100644
--- a/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj
@@ -50,7 +50,7 @@
8702E0566EC7EF0ABE948569 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1200;
TargetAttributes = {
};
};
diff --git a/scripts/gen-fixtures.sh b/scripts/gen-fixtures.sh
index a7b14a1b7..a3785436b 100755
--- a/scripts/gen-fixtures.sh
+++ b/scripts/gen-fixtures.sh
@@ -3,6 +3,5 @@ set -e
swift run xcodegen --spec Tests/Fixtures/TestProject/AnotherProject/project.yml
swift run xcodegen --spec Tests/Fixtures/TestProject/project.yml
-swift run xcodegen --spec Tests/Fixtures/TestProject/project-xcode-12.yml
swift run xcodegen --spec Tests/Fixtures/CarthageProject/project.yml
swift run xcodegen --spec Tests/Fixtures/SPM/project.yml
From bb4a3fa2dd720594e47f33cd48cce84fcf9f7066 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Fri, 2 Oct 2020 18:38:16 +1000
Subject: [PATCH 031/284] update changelog for 2.18.0
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4dd13892e..78c5977b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Next Version
+## 2.18.0
+
#### Added
- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9
- Added ability to set custom LLDBInit scripts for launch and test schemes [#929](https://github.com/yonaskolb/XcodeGen/pull/929) @polac24
@@ -23,6 +25,8 @@
- Fix appex's Runpath Search Paths under macOS target. [#952](https://github.com/yonaskolb/XcodeGen/pull/952) @rinsuki
- `onlyCopyFilesOnInstall` is extended for the Embed App Extensions build phase. [#948](https://github.com/yonaskolb/XcodeGen/pull/948) @RomanPodymov
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.17.0...2.18.0)
+
## 2.17.0
#### Added
From 36932f4f87ed41f250b448079299b3b932f6346e Mon Sep 17 00:00:00 2001
From: Ken Tominaga
Date: Tue, 6 Oct 2020 16:12:21 +0900
Subject: [PATCH 032/284] Update Crashlytics FAQ (#962)
---
Docs/FAQ.md | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/Docs/FAQ.md b/Docs/FAQ.md
index 6f47f1f5a..a5a6fbb10 100644
--- a/Docs/FAQ.md
+++ b/Docs/FAQ.md
@@ -24,13 +24,12 @@ Yes, but you need to use a little trick when using CocoaPods. Add this script in
```ruby:Podfile
// Your dependencies
-pod 'Fabric'
-pod 'Crashlytics'
-
-script_phase :name => 'Run Fabric',
- :script => '"${PODS_ROOT}/Fabric/run"',
- :input_files => ['$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)']
+pod 'Firebase/Crashlytics'
+script_phase name: 'Run Firebase Crashlytics',
+ shell_path: '/bin/sh',
+ script: '"${PODS_ROOT}/FirebaseCrashlytics/run"',
+ input_files: ['$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)']
```
This script will be added after `[CP] Embed Pods Frameworks.`
From 9fdc194771168c9128bf7833edbf16391b1b848d Mon Sep 17 00:00:00 2001
From: Liam Nichols
Date: Tue, 13 Oct 2020 05:20:53 +0100
Subject: [PATCH 033/284] Add useBaseInternationalization to SpecOptions (#961)
* Add 'useBaseInternationalization' setting to SpecOptions (default value of true)
* Update PBXProjGenerator to only include Base into knownRegions if it was either detected on the filesystem or if the project spec options opt into it
* Update ProjectSpec.md to include useBaseInternationalization
* Update AnotherProject to demonstrate Base Internationalization opt out
* Update CHANGELOG.md
---
CHANGELOG.md | 3 +++
Docs/ProjectSpec.md | 1 +
Sources/ProjectSpec/SpecOptions.swift | 10 +++++++++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 7 ++++++-
.../AnotherProject.xcodeproj/project.pbxproj | 1 -
Tests/Fixtures/TestProject/AnotherProject/project.yml | 2 ++
6 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78c5977b8..e19e65cb0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+#### Added
+- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
+
## 2.18.0
#### Added
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 3d4fb2f3b..b10a84ffd 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -127,6 +127,7 @@ Note that target names can also be changed by adding a `name` property to a targ
- [ ] **fileTypes**: **[String: [FileType](#filetype)]** - A list of default file options for specific file extensions across the project. Values in [Sources](#sources) will overwrite these settings.
- [ ] **preGenCommand**: **String** - A bash command to run before the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like generating resources files before the project is regenerated.
- [ ] **postGenCommand**: **String** - A bash command to run after the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like `pod install` only if the project is actually regenerated.
+- [ ] **useBaseInternationalization**: **Bool** If this is `false` and your project does not include resources located in a **Base.lproj** directory then `Base` will not be included in the projects 'known regions'. The default value is `true`.
```yaml
options:
diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift
index b2d35a9d7..f44fb2aab 100644
--- a/Sources/ProjectSpec/SpecOptions.swift
+++ b/Sources/ProjectSpec/SpecOptions.swift
@@ -9,6 +9,7 @@ public struct SpecOptions: Equatable {
public static let groupSortPositionDefault = GroupSortPosition.bottom
public static let generateEmptyDirectoriesDefault = false
public static let findCarthageFrameworksDefault = false
+ public static let useBaseInternationalizationDefault = true
public var minimumXcodeGenVersion: Version?
public var carthageBuildPath: String?
@@ -33,6 +34,7 @@ public struct SpecOptions: Equatable {
public var localPackagesGroup: String?
public var preGenCommand: String?
public var postGenCommand: String?
+ public var useBaseInternationalization: Bool
public enum ValidationType: String {
case missingConfigs
@@ -93,7 +95,8 @@ public struct SpecOptions: Equatable {
findCarthageFrameworks: Bool = findCarthageFrameworksDefault,
localPackagesGroup: String? = nil,
preGenCommand: String? = nil,
- postGenCommand: String? = nil
+ postGenCommand: String? = nil,
+ useBaseInternationalization: Bool = useBaseInternationalizationDefault
) {
self.minimumXcodeGenVersion = minimumXcodeGenVersion
self.carthageBuildPath = carthageBuildPath
@@ -118,6 +121,7 @@ public struct SpecOptions: Equatable {
self.localPackagesGroup = localPackagesGroup
self.preGenCommand = preGenCommand
self.postGenCommand = postGenCommand
+ self.useBaseInternationalization = useBaseInternationalization
}
}
@@ -149,6 +153,7 @@ extension SpecOptions: JSONObjectConvertible {
localPackagesGroup = jsonDictionary.json(atKeyPath: "localPackagesGroup")
preGenCommand = jsonDictionary.json(atKeyPath: "preGenCommand")
postGenCommand = jsonDictionary.json(atKeyPath: "postGenCommand")
+ useBaseInternationalization = jsonDictionary.json(atKeyPath: "useBaseInternationalization") ?? SpecOptions.useBaseInternationalizationDefault
if jsonDictionary["fileTypes"] != nil {
fileTypes = try jsonDictionary.json(atKeyPath: "fileTypes")
} else {
@@ -192,6 +197,9 @@ extension SpecOptions: JSONEncodable {
if findCarthageFrameworks != SpecOptions.findCarthageFrameworksDefault {
dict["findCarthageFrameworks"] = findCarthageFrameworks
}
+ if useBaseInternationalization != SpecOptions.useBaseInternationalizationDefault {
+ dict["useBaseInternationalization"] = useBaseInternationalization
+ }
return dict
}
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 06116064f..ae765f1bd 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -292,7 +292,12 @@ public class PBXProjGenerator {
projectAttributes["knownAssetTags"] = assetTags
}
- pbxProject.knownRegions = sourceGenerator.knownRegions.union(["Base", developmentRegion]).sorted()
+ var knownRegions = Set(sourceGenerator.knownRegions)
+ knownRegions.insert(developmentRegion)
+ if project.options.useBaseInternationalization {
+ knownRegions.insert("Base")
+ }
+ pbxProject.knownRegions = knownRegions.sorted()
pbxProject.packages = packageReferences.sorted { $0.key < $1.key }.map { $1 }
diff --git a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
index c9dc9f55c..e4ae5449e 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
@@ -86,7 +86,6 @@
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
- Base,
en,
);
mainGroup = 4E8CFA4275C972686621210C;
diff --git a/Tests/Fixtures/TestProject/AnotherProject/project.yml b/Tests/Fixtures/TestProject/AnotherProject/project.yml
index 5dbb17be0..012d6062a 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/project.yml
+++ b/Tests/Fixtures/TestProject/AnotherProject/project.yml
@@ -1,5 +1,7 @@
name: AnotherProject
include: [../environments.yml]
+options:
+ useBaseInternationalization: false
configFiles:
Test Debug: ../Configs/config.xcconfig
targets:
From 297a25eda1ddeeaaa61c085f38e8eeacec901afb Mon Sep 17 00:00:00 2001
From: swiftty <62803132+swiftty@users.noreply.github.com>
Date: Tue, 10 Nov 2020 12:18:04 +0900
Subject: [PATCH 034/284] Update Yams to 4.0.0 (#984)
---
CHANGELOG.md | 3 +++
Package.resolved | 4 ++--
Package.swift | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e19e65cb0..7adb1d14a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,9 @@
#### Added
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
+#### Internal
+- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
+
## 2.18.0
#### Added
diff --git a/Package.resolved b/Package.resolved
index 6dc3e99de..672c86107 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -96,8 +96,8 @@
"repositoryURL": "https://github.com/jpsim/Yams.git",
"state": {
"branch": null,
- "revision": "c947a306d2e80ecb2c0859047b35c73b8e1ca27f",
- "version": "2.0.0"
+ "revision": "88caa2e6fffdbef2e91c2022d038576062042907",
+ "version": "4.0.0"
}
}
]
diff --git a/Package.swift b/Package.swift
index 69e6d5fd5..baf313736 100644
--- a/Package.swift
+++ b/Package.swift
@@ -12,7 +12,7 @@ let package = Package(
],
dependencies: [
.package(url: "https://github.com/kylef/PathKit.git", from: "1.0.0"),
- .package(url: "https://github.com/jpsim/Yams.git", from: "2.0.0"),
+ .package(url: "https://github.com/jpsim/Yams.git", from: "4.0.0"),
.package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.2.0"),
.package(url: "https://github.com/kylef/Spectre.git", from: "0.9.0"),
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.0.0"),
From 1e7c1c2da0299b26f1bf3985f418631b42696cdd Mon Sep 17 00:00:00 2001
From: Josh Walker
Date: Thu, 12 Nov 2020 16:30:35 -0500
Subject: [PATCH 035/284] throw SpecValidationError for minimumXcodeGenVers
(#967)
* throw SpecValidationError for minimumXcodeGenVers
* update changelog
# Conflicts:
# CHANGELOG.md
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 3 +++
Sources/ProjectSpec/SpecValidation.swift | 2 +-
Tests/ProjectSpecTests/ProjectSpecTests.swift | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7adb1d14a..708192f4a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,9 @@
#### Added
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
+#### Fixed
+- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
+
#### Internal
- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift
index 3594e658a..923f99684 100644
--- a/Sources/ProjectSpec/SpecValidation.swift
+++ b/Sources/ProjectSpec/SpecValidation.swift
@@ -228,7 +228,7 @@ extension Project {
public func validateMinimumXcodeGenVersion(_ xcodeGenVersion: Version) throws {
if let minimumXcodeGenVersion = options.minimumXcodeGenVersion, xcodeGenVersion < minimumXcodeGenVersion {
- throw SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumXcodeGenVersion, version: xcodeGenVersion)
+ throw SpecValidationError(errors: [SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumXcodeGenVersion, version: xcodeGenVersion)])
}
}
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index 22944d4fe..1f4651549 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -111,7 +111,7 @@ class ProjectSpecTests: XCTestCase {
project.options = SpecOptions(minimumXcodeGenVersion: minimumVersion)
func expectMinimumXcodeGenVersionError(_ project: Project, minimumVersion: Version, xcodeGenVersion: Version, file: String = #file, line: Int = #line) throws {
- try expectError(SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumVersion, version: xcodeGenVersion), file: file, line: line) {
+ try expectError(SpecValidationError(errors: [SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumVersion, version: xcodeGenVersion)]), file: file, line: line) {
try project.validateMinimumXcodeGenVersion(xcodeGenVersion)
}
}
From 2601d397929139c7a839354477af983454e209be Mon Sep 17 00:00:00 2001
From: Elliott Williams
Date: Mon, 23 Nov 2020 16:28:41 -0800
Subject: [PATCH 036/284] Support Linux by upgrading XcodeProj and Spectre
(#988)
* Bump XcodeProj and Spectre
* Add LinuxMain.swift
* Linux test fixups
* Add CI job for ubuntu-latest
* Use URLs in glob logic to avoid Linux/Mac foundation inconsistencies
* fatalError when --enable-test-discovery is not used
* Update fixtures
They changed because of a bugfix in XcodeProj: https://github.com/tuist/XcodeProj/pull/563
* Update CHANGELOG.md
---
.github/workflows/ci.yml | 7 ++++
CHANGELOG.md | 1 +
Package.resolved | 33 +++++++-----------
Package.swift | 4 +--
Sources/Core/Glob.swift | 34 +++++++++++--------
Sources/ProjectSpec/Linkage.swift | 1 +
Sources/XcodeGenKit/SchemeGenerator.swift | 2 +-
Tests/CoreTests/GlobTests.swift | 2 +-
.../AnotherProject.xcodeproj/project.pbxproj | 2 +-
.../Project.xcodeproj/project.pbxproj | 6 ++--
Tests/LinuxMain.swift | 3 ++
Tests/ProjectSpecTests/SpecLoadingTests.swift | 2 +-
12 files changed, 53 insertions(+), 44 deletions(-)
create mode 100644 Tests/LinuxMain.swift
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bcb9f46e3..c396e3489 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -32,3 +32,10 @@ jobs:
run: scripts/diff-fixtures.sh
- name: Build fixtures
run: scripts/build-fixtures.sh
+ run-linux:
+ runs-on: ubuntu-latest
+ name: Linux
+ steps:
+ - uses: actions/checkout@master
+ - name: Build and run tests
+ run: swift test --enable-test-discovery
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 708192f4a..fc5565d6b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
## Next Version
#### Added
+- Support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
#### Fixed
diff --git a/Package.resolved b/Package.resolved
index 672c86107..e42136a42 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/tadija/AEXML",
"state": {
"branch": null,
- "revision": "e4d517844dd03dac557e35d77a8e9ab438de91a6",
- "version": "4.4.0"
+ "revision": "8623e73b193386909566a9ca20203e33a09af142",
+ "version": "4.5.0"
}
},
{
@@ -15,8 +15,8 @@
"repositoryURL": "https://github.com/SwiftDocOrg/GraphViz.git",
"state": {
"branch": null,
- "revision": "08e0cddd013fa2272379d27ec3e0093db51f34fb",
- "version": "0.1.0"
+ "revision": "c4746cb3ff6f5e7c5d5540c40b98555521c3ee43",
+ "version": "0.1.3"
}
},
{
@@ -42,8 +42,8 @@
"repositoryURL": "https://github.com/onevcat/Rainbow.git",
"state": {
"branch": null,
- "revision": "9c52c1952e9b2305d4507cf473392ac2d7c9b155",
- "version": "3.1.5"
+ "revision": "626c3d4b6b55354b4af3aa309f998fae9b31a3d9",
+ "version": "3.2.0"
}
},
{
@@ -51,8 +51,8 @@
"repositoryURL": "https://github.com/kylef/Spectre.git",
"state": {
"branch": null,
- "revision": "f14ff47f45642aa5703900980b014c2e9394b6e5",
- "version": "0.9.0"
+ "revision": "f79d4ecbf8bc4e1579fbd86c3e1d652fb6876c53",
+ "version": "0.9.2"
}
},
{
@@ -60,8 +60,8 @@
"repositoryURL": "https://github.com/jakeheis/SwiftCLI.git",
"state": {
"branch": null,
- "revision": "c72c4564f8c0a24700a59824880536aca45a4cae",
- "version": "6.0.1"
+ "revision": "2816678bcc37f4833d32abeddbdf5e757fa891d8",
+ "version": "6.0.2"
}
},
{
@@ -78,17 +78,8 @@
"repositoryURL": "https://github.com/tuist/XcodeProj.git",
"state": {
"branch": null,
- "revision": "545bfa746b6eb4ea0ad8d3a12c6590445392bb50",
- "version": "7.13.0"
- }
- },
- {
- "package": "XcodeProjCExt",
- "repositoryURL": "https://github.com/tuist/XcodeProjCExt",
- "state": {
- "branch": null,
- "revision": "21a510c225ff2bc83d5920a21d902af4b1e7e218",
- "version": "0.1.0"
+ "revision": "82bf5efcaa27e94ed8c761c1eb3e397b6dea82b9",
+ "version": "7.18.0"
}
},
{
diff --git a/Package.swift b/Package.swift
index baf313736..3d5c5b40c 100644
--- a/Package.swift
+++ b/Package.swift
@@ -14,9 +14,9 @@ let package = Package(
.package(url: "https://github.com/kylef/PathKit.git", from: "1.0.0"),
.package(url: "https://github.com/jpsim/Yams.git", from: "4.0.0"),
.package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.2.0"),
- .package(url: "https://github.com/kylef/Spectre.git", from: "0.9.0"),
+ .package(url: "https://github.com/kylef/Spectre.git", from: "0.9.2"),
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.0.0"),
- .package(url: "https://github.com/tuist/XcodeProj.git", .exact("7.13.0")),
+ .package(url: "https://github.com/tuist/XcodeProj.git", from: "7.18.0"),
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", from: "0.1.0"),
diff --git a/Sources/Core/Glob.swift b/Sources/Core/Glob.swift
index 9eccc61dc..b263cf5d3 100644
--- a/Sources/Core/Glob.swift
+++ b/Sources/Core/Glob.swift
@@ -136,7 +136,7 @@ public class Glob: Collection {
let firstPart = parts.removeFirst()
var lastPart = parts.joined(separator: "**")
- var directories: [String]
+ var directories: [URL]
if FileManager.default.fileExists(atPath: firstPart) {
do {
@@ -151,7 +151,7 @@ public class Glob: Collection {
if behavior.includesFilesFromRootOfGlobstar {
// Check the base directory for the glob star as well.
- directories.insert(firstPart, at: 0)
+ directories.insert(URL(fileURLWithPath: firstPart), at: 0)
// Include the globstar root directory ("dir/") in a pattern like "dir/**" or "dir/**/"
if lastPart.isEmpty {
@@ -163,29 +163,30 @@ public class Glob: Collection {
lastPart = "*"
}
for directory in directories {
- let partiallyResolvedPattern = NSString(string: directory).appendingPathComponent(lastPart)
- results.append(contentsOf: expandGlobstar(pattern: partiallyResolvedPattern))
+ let partiallyResolvedPattern = directory.appendingPathComponent(lastPart)
+ let standardizedPattern = (partiallyResolvedPattern.relativePath as NSString).standardizingPath
+ results.append(contentsOf: expandGlobstar(pattern: standardizedPattern))
}
return results
}
- private func exploreDirectories(path: String) throws -> [String] {
+ private func exploreDirectories(path: String) throws -> [URL] {
try FileManager.default.contentsOfDirectory(atPath: path)
- .compactMap { subpath -> [String]? in
+ .compactMap { subpath -> [URL]? in
if blacklistedDirectories.contains(subpath) {
return nil
}
- let firstLevelPath = NSString(string: path).appendingPathComponent(subpath)
- guard isDirectory(path: firstLevelPath) else {
+ let firstLevel = URL(fileURLWithPath: path).appendingPathComponent(subpath, isDirectory: true)
+ guard isDirectory(path: firstLevel.path) else {
return nil
}
- var subDirs: [String] = try FileManager.default.subpathsOfDirectory(atPath: firstLevelPath)
- .compactMap { subpath -> String? in
- let fullPath = NSString(string: firstLevelPath).appendingPathComponent(subpath)
- return isDirectory(path: fullPath) ? fullPath : nil
+ var subDirs: [URL] = try FileManager.default.subpathsOfDirectory(atPath: firstLevel.path)
+ .compactMap { subpath -> URL? in
+ let full = firstLevel.appendingPathComponent(subpath, isDirectory: true)
+ return isDirectory(path: full.path) ? full : nil
}
- subDirs.append(firstLevelPath)
+ subDirs.append(firstLevel)
return subDirs
}
.joined()
@@ -211,7 +212,12 @@ public class Glob: Collection {
private func populateFiles(gt: glob_t, includeFiles: Bool) {
let includeDirectories = behavior.includesDirectoriesInResults
- for i in 0.. String {
- var tmpDirTmpl = "/tmp/glob-test.XXXXX".cString(using: .utf8)!
+ var tmpDirTmpl = "/tmp/glob-test.XXXXXX".cString(using: .utf8)!
return String(validatingUTF8: mkdtemp(&tmpDirTmpl))!
}
diff --git a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
index e4ae5449e..9ca477779 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
@@ -7,7 +7,7 @@
objects = {
/* Begin PBXFileReference section */
- 6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
60D6679FB526839EAFEA2EEE /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
D6340FC7DEBC81E0127BAFD6 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 0a3bace0e..185a17811 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -617,7 +617,7 @@
3FC04772130400920D68A167 /* App_Clip_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
40863AE6202CFCD0529D8438 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 45C12576F5AA694DD0CE2132 /* BundleX.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 45C12576F5AA694DD0CE2132 /* BundleX.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
46DD8F9AAC104BDB63793625 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
4BF4D16042A80576D259160C /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; };
@@ -636,7 +636,7 @@
70A8E15C81E454DC950C59F0 /* SomeXPCService.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = SomeXPCService.xpc; sourceTree = ""; };
72A14C887EF7E9C8CBE914AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
77C0C341F1865224E0596086 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
- 7B5068D64404C61A67A18458 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; };
+ 7B5068D64404C61A67A18458 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = MyBundle.bundle; sourceTree = ""; };
7C176A8297AC2F5207352BA8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; };
7C7EC00B53FF878007F6ECAB /* App_Clip_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
7D67F1C1BFBACE101DE7DB51 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -648,7 +648,7 @@
86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
8A9274BE42A03DC5DA1FAD04 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 8AF20308873AEEEC4D8C45D1 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; };
+ 8AF20308873AEEEC4D8C45D1 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = Settings.bundle; sourceTree = ""; };
8CAF6C55B555E3E1352645B6 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; };
8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
8D88C6BF7355702B74396791 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift
new file mode 100644
index 000000000..711a949e9
--- /dev/null
+++ b/Tests/LinuxMain.swift
@@ -0,0 +1,3 @@
+// LinuxMain.swift
+fatalError("Run the tests with `swift test --enable-test-discovery`.")
+
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 58617b9b4..3a7b5ec58 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -202,7 +202,7 @@ class SpecLoadingTests: XCTestCase {
throw failure("\(key): \(parsedValue) does not equal \(expectedValue)")
}
}
- if !(dictionary as NSDictionary).isEqual(expectedDictionary) {
+ if !(dictionary as NSDictionary).isEqual(expectedDictionary as NSDictionary) {
throw failure("parsed yaml types don't match:\n\nParsed:\n\t\(dictionary.map { "\($0.key): \($0.value)" }.joined(separator: "\n\t"))\nExpected:\n\t\(expectedDictionary.map { "\($0.key): \($0.value)" }.joined(separator: "\n\t"))")
}
}
From f9d140668307152e9b69c360a8b3386c2447ba52 Mon Sep 17 00:00:00 2001
From: Alvar Hansen
Date: Mon, 30 Nov 2020 03:26:56 +0200
Subject: [PATCH 037/284] Add missing quotation marks (#974)
Co-authored-by: Alvar Hansen
---
Docs/ProjectSpec.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index b10a84ffd..a6ce3d4af 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -392,7 +392,7 @@ targets:
- "configs/server[0-2].json"
- "*-Private.h"
- "**/*.md" # excludes all files with the .md extension
- - "ios/**/*Tests.[hm] # excludes all files with an h or m extension within the ios directory.
+ - "ios/**/*Tests.[hm]" # excludes all files with an h or m extension within the ios directory.
compilerFlags:
- "-Werror"
- "-Wextra"
From 79738b3e95bc4c1d488b5f2f8451adbf0e472f31 Mon Sep 17 00:00:00 2001
From: bannzai
Date: Tue, 1 Dec 2020 16:46:28 +0900
Subject: [PATCH 038/284] More detailed error message with method arguments
(#990)
* More detailed error message with method arguments
* Add pr title to CHANGELOG.md
---
CHANGELOG.md | 1 +
Sources/XcodeGenKit/PBXProjGenerator.swift | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fc5565d6b..ed6127e67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
#### Added
- Support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
+- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index ae765f1bd..8cce6abfe 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -370,13 +370,13 @@ public class PBXProjGenerator {
func generateExternalTargetDependency(from: String, to target: String, in project: String, platform: Platform) throws -> (PBXTargetDependency, Target, PBXReferenceProxy) {
guard let projectReference = self.project.getProjectReference(project) else {
- fatalError("project not found")
+ fatalError("project '\(project)' not found")
}
let pbxProj = try getPBXProj(from: projectReference)
guard let targetObject = pbxProj.targets(named: target).first else {
- fatalError("target not found")
+ fatalError("target '\(target)' not found in project '\(project)'")
}
let projectFileReferenceIndex = self.pbxProj.rootObject!
From 983e60e29ffa2d12c61c39880f1c3d22777be3a2 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Wed, 2 Dec 2020 12:18:29 +1100
Subject: [PATCH 039/284] update badges
---
README.md | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 7ab3471dd..76877d7a5 100644
--- a/README.md
+++ b/README.md
@@ -4,14 +4,17 @@
-
-
-
-
+
+
+
+
+
+
+
-
+
From 6a5604f4b0750b5d6f7f5f188ce4dfbbaa1db60b Mon Sep 17 00:00:00 2001
From: Joseph Colicchio
Date: Tue, 1 Dec 2020 20:46:39 -0600
Subject: [PATCH 040/284] Project Reference LegacyTarget Crash Fix (#982)
* Avoid force-unwrapping and allow `.none` type target to continue
* Add changelog entry
---
CHANGELOG.md | 3 +++
Sources/XcodeGenKit/PBXProjGenerator.swift | 8 ++++----
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed6127e67..b9a465857 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,9 @@
#### Internal
- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
+#### Fixed
+- Remove force-unwrapping causing crash for `LegacyTarget`s [#982](https://github.com/yonaskolb/XcodeGen/pull/982) @jcolicchio
+
## 2.18.0
#### Added
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 8cce6abfe..55e13ce72 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -402,7 +402,7 @@ public class PBXProjGenerator {
let productProxy = addObject(
PBXContainerItemProxy(
containerPortal: .fileReference(projectFileReference),
- remoteGlobalID: .object(targetObject.product!),
+ remoteGlobalID: targetObject.product.flatMap(PBXContainerItemProxy.RemoteGlobalID.object),
proxyType: .reference,
remoteInfo: target
)
@@ -417,7 +417,7 @@ public class PBXProjGenerator {
let productReferenceProxy = addObject(
PBXReferenceProxy(
- fileType: Xcode.fileType(path: Path(targetObject.productNameWithExtension()!)),
+ fileType: targetObject.productNameWithExtension().flatMap { Xcode.fileType(path: Path($0)) },
path: path,
remote: productProxy,
sourceTree: .buildProductsDir
@@ -433,14 +433,14 @@ public class PBXProjGenerator {
)
)
- guard let productType = targetObject.productType,
- let buildConfigurations = targetObject.buildConfigurationList?.buildConfigurations,
+ guard let buildConfigurations = targetObject.buildConfigurationList?.buildConfigurations,
let defaultConfigurationName = targetObject.buildConfigurationList?.defaultConfigurationName,
let defaultConfiguration = buildConfigurations.first(where: { $0.name == defaultConfigurationName }) ?? buildConfigurations.first else {
fatalError("Missing target info")
}
+ let productType: PBXProductType = targetObject.productType ?? .none
let buildSettings = defaultConfiguration.buildSettings
let settings = Settings(buildSettings: buildSettings, configSettings: [:], groups: [])
let deploymentTargetString = buildSettings[platform.deploymentTargetSetting] as? String
From efed786cec1fac143d72801d5e516d464a073029 Mon Sep 17 00:00:00 2001
From: Jierong Li
Date: Thu, 3 Dec 2020 06:52:24 +0900
Subject: [PATCH 041/284] Add baseOnDependencyAnalysis to Project Spec Build
Script (#992)
* Add baseOnDependencyAnalysis to BuildScript
* Add tests for baseOnDependencyAnalysis
* Update CHANGELOG.md
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 1 +
Sources/ProjectSpec/BuildScript.swift | 11 ++++++++++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 3 ++-
.../TestProject/Project.xcodeproj/project.pbxproj | 1 +
Tests/Fixtures/TestProject/project.yml | 1 +
Tests/ProjectSpecTests/ProjectSpecTests.swift | 12 ++++++++----
Tests/ProjectSpecTests/SpecLoadingTests.swift | 12 ++++++++----
8 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b9a465857..c0c22cf1c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@
- Support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
+- Added `baseOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index a6ce3d4af..c992af488 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -563,6 +563,7 @@ Each script can contain:
- [ ] **shell**: **String** - shell used for the script. Defaults to `/bin/sh`
- [ ] **showEnvVars**: **Bool** - whether the environment variables accessible to the script show be printed to the build log. Defaults to yes
- [ ] **runOnlyWhenInstalling**: **Bool** - whether the script is only run when installing (`runOnlyForDeploymentPostprocessing`). Defaults to no
+- [ ] **baseOnDependencyAnalysis**: **Bool** - whether to skip the script if inputs, context, or outputs haven't changed. Defaults to yes
Either a **path** or **script** must be defined, the rest are optional.
diff --git a/Sources/ProjectSpec/BuildScript.swift b/Sources/ProjectSpec/BuildScript.swift
index 9c280e1d3..0fccf54bb 100644
--- a/Sources/ProjectSpec/BuildScript.swift
+++ b/Sources/ProjectSpec/BuildScript.swift
@@ -4,6 +4,7 @@ import JSONUtilities
public struct BuildScript: Equatable {
public static let runOnlyWhenInstallingDefault = false
public static let showEnvVarsDefault = true
+ public static let baseOnDependencyAnalysisDefault = true
public var script: ScriptType
public var name: String?
@@ -14,6 +15,7 @@ public struct BuildScript: Equatable {
public var outputFileLists: [String]
public var runOnlyWhenInstalling: Bool
public let showEnvVars: Bool
+ public let baseOnDependencyAnalysis: Bool
public enum ScriptType: Equatable {
case path(String)
@@ -29,7 +31,8 @@ public struct BuildScript: Equatable {
outputFileLists: [String] = [],
shell: String? = nil,
runOnlyWhenInstalling: Bool = runOnlyWhenInstallingDefault,
- showEnvVars: Bool = showEnvVarsDefault
+ showEnvVars: Bool = showEnvVarsDefault,
+ baseOnDependencyAnalysis: Bool = baseOnDependencyAnalysisDefault
) {
self.script = script
self.name = name
@@ -40,6 +43,7 @@ public struct BuildScript: Equatable {
self.shell = shell
self.runOnlyWhenInstalling = runOnlyWhenInstalling
self.showEnvVars = showEnvVars
+ self.baseOnDependencyAnalysis = baseOnDependencyAnalysis
}
}
@@ -61,6 +65,7 @@ extension BuildScript: JSONObjectConvertible {
shell = jsonDictionary.json(atKeyPath: "shell")
runOnlyWhenInstalling = jsonDictionary.json(atKeyPath: "runOnlyWhenInstalling") ?? BuildScript.runOnlyWhenInstallingDefault
showEnvVars = jsonDictionary.json(atKeyPath: "showEnvVars") ?? BuildScript.showEnvVarsDefault
+ baseOnDependencyAnalysis = jsonDictionary.json(atKeyPath: "baseOnDependencyAnalysis") ?? BuildScript.baseOnDependencyAnalysisDefault
}
}
@@ -80,6 +85,10 @@ extension BuildScript: JSONEncodable {
dict["showEnvVars"] = showEnvVars
}
+ if baseOnDependencyAnalysis != BuildScript.baseOnDependencyAnalysisDefault {
+ dict["baseOnDependencyAnalysis"] = baseOnDependencyAnalysis
+ }
+
switch script {
case .path(let string):
dict["path"] = string
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 55e13ce72..4cff3b27f 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -478,7 +478,8 @@ public class PBXProjGenerator {
shellPath: buildScript.shell ?? "/bin/sh",
shellScript: shellScript,
runOnlyForDeploymentPostprocessing: buildScript.runOnlyWhenInstalling,
- showEnvVarsInLog: buildScript.showEnvVars
+ showEnvVarsInLog: buildScript.showEnvVars,
+ alwaysOutOfDate: !buildScript.baseOnDependencyAnalysis
)
return addObject(shellScriptPhase)
}
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 185a17811..6d4ccc57e 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -2115,6 +2115,7 @@
};
71A4CC6ECC8522178F566E7B /* Strip Unused Architectures from Frameworks */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index dd129f356..ff0f75f73 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -144,6 +144,7 @@ targets:
- path: scripts/strip-frameworks.sh
name: Strip Unused Architectures from Frameworks
runOnlyWhenInstalling: true
+ baseOnDependencyAnalysis: false
- name: MyScript
script: |
echo "You ran a script!"
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index 1f4651549..a1a32df7b 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -388,7 +388,8 @@ class ProjectSpecTests: XCTestCase {
outputFileLists: ["bar.xcfilelist"],
shell: "/bin/bash",
runOnlyWhenInstalling: true,
- showEnvVars: true)],
+ showEnvVars: true,
+ baseOnDependencyAnalysis: false)],
postCompileScripts: [BuildScript(script: .path("cmd.sh"),
name: "Bar script",
inputFiles: ["foo"],
@@ -397,7 +398,8 @@ class ProjectSpecTests: XCTestCase {
outputFileLists: ["bar.xcfilelist"],
shell: "/bin/bash",
runOnlyWhenInstalling: true,
- showEnvVars: true)],
+ showEnvVars: true,
+ baseOnDependencyAnalysis: false)],
postBuildScripts: [BuildScript(script: .path("cmd.sh"),
name: "an another script",
inputFiles: ["foo"],
@@ -406,7 +408,8 @@ class ProjectSpecTests: XCTestCase {
outputFileLists: ["bar.xcfilelist"],
shell: "/bin/bash",
runOnlyWhenInstalling: true,
- showEnvVars: true)],
+ showEnvVars: true,
+ baseOnDependencyAnalysis: false)],
buildRules: [BuildRule(fileType: .pattern("*.xcassets"),
action: .script("pre_process_swift.py"),
name: "My Build Rule",
@@ -455,7 +458,8 @@ class ProjectSpecTests: XCTestCase {
outputFileLists: ["bar.xcfilelist"],
shell: "/bin/bash",
runOnlyWhenInstalling: true,
- showEnvVars: false)],
+ showEnvVars: false,
+ baseOnDependencyAnalysis: false)],
scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(targetReference: "test target",
randomExecutionOrder: false,
parallelizable: false)],
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 3a7b5ec58..ba3b450cb 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -1052,8 +1052,10 @@ class SpecLoadingTests: XCTestCase {
["path": "script.sh"],
["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "runOnlyWhenInstalling": true],
["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "showEnvVars": false],
+ ["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "baseOnDependencyAnalysis": false],
["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "runOnlyWhenInstalling": true],
["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "showEnvVars": false],
+ ["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "baseOnDependencyAnalysis": false],
]
target["preBuildScripts"] = scripts
target["postCompileScripts"] = scripts
@@ -1061,10 +1063,12 @@ class SpecLoadingTests: XCTestCase {
let expectedScripts = [
BuildScript(script: .path("script.sh")),
- BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true),
- BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false),
- BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true),
- BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false),
+ BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true, baseOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false, baseOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: true, baseOnDependencyAnalysis: false),
+ BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true, baseOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false, baseOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: true, baseOnDependencyAnalysis: false),
]
let parsedTarget = try Target(name: "test", jsonDictionary: target)
From 9fa02584ab6ecb5ba63041d7e81fc434dd5a8f85 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Thu, 3 Dec 2020 08:54:44 +1100
Subject: [PATCH 042/284] Update ProjectSpec.md
---
Docs/ProjectSpec.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index c992af488..08f3fcd13 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -23,7 +23,7 @@
- [Aggregate Target](#aggregate-target)
- [Target Template](#target-template)
- [Scheme](#scheme)
- - [Scheme Template](#scheme-template)
+- [Scheme Template](#scheme-template)
- [Swift Package](#swift-package)
## General
@@ -879,7 +879,7 @@ schemes:
revealArchiveInOrganizer: false
```
-### Scheme Template
+## Scheme Template
This is a template that can be referenced from a normal scheme using the `templates` property. The properties of this template are the same as a [Scheme](#scheme). This functions identically in practice to [Target Template](#target-template).
Any instances of `${scheme_name}` within each template will be replaced by the final scheme name which references the template.
From 04d6749441eedd65eab6d966922907455597ebe3 Mon Sep 17 00:00:00 2001
From: Jierong Li
Date: Thu, 3 Dec 2020 09:20:13 +0900
Subject: [PATCH 043/284] Fix a typo (#993)
Rename baseOnDependencyAnalysis to basedOnDependencyAnalysis.
---
CHANGELOG.md | 2 +-
Docs/ProjectSpec.md | 2 +-
Sources/ProjectSpec/BuildScript.swift | 14 +++++++-------
Sources/XcodeGenKit/PBXProjGenerator.swift | 2 +-
Tests/Fixtures/TestProject/project.yml | 2 +-
Tests/ProjectSpecTests/ProjectSpecTests.swift | 8 ++++----
Tests/ProjectSpecTests/SpecLoadingTests.swift | 16 ++++++++--------
7 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c0c22cf1c..6b9ac9ad3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,7 @@
- Support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
-- Added `baseOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
+- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 08f3fcd13..e7374fe7f 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -563,7 +563,7 @@ Each script can contain:
- [ ] **shell**: **String** - shell used for the script. Defaults to `/bin/sh`
- [ ] **showEnvVars**: **Bool** - whether the environment variables accessible to the script show be printed to the build log. Defaults to yes
- [ ] **runOnlyWhenInstalling**: **Bool** - whether the script is only run when installing (`runOnlyForDeploymentPostprocessing`). Defaults to no
-- [ ] **baseOnDependencyAnalysis**: **Bool** - whether to skip the script if inputs, context, or outputs haven't changed. Defaults to yes
+- [ ] **basedOnDependencyAnalysis**: **Bool** - whether to skip the script if inputs, context, or outputs haven't changed. Defaults to yes
Either a **path** or **script** must be defined, the rest are optional.
diff --git a/Sources/ProjectSpec/BuildScript.swift b/Sources/ProjectSpec/BuildScript.swift
index 0fccf54bb..4b7fdc8de 100644
--- a/Sources/ProjectSpec/BuildScript.swift
+++ b/Sources/ProjectSpec/BuildScript.swift
@@ -4,7 +4,7 @@ import JSONUtilities
public struct BuildScript: Equatable {
public static let runOnlyWhenInstallingDefault = false
public static let showEnvVarsDefault = true
- public static let baseOnDependencyAnalysisDefault = true
+ public static let basedOnDependencyAnalysisDefault = true
public var script: ScriptType
public var name: String?
@@ -15,7 +15,7 @@ public struct BuildScript: Equatable {
public var outputFileLists: [String]
public var runOnlyWhenInstalling: Bool
public let showEnvVars: Bool
- public let baseOnDependencyAnalysis: Bool
+ public let basedOnDependencyAnalysis: Bool
public enum ScriptType: Equatable {
case path(String)
@@ -32,7 +32,7 @@ public struct BuildScript: Equatable {
shell: String? = nil,
runOnlyWhenInstalling: Bool = runOnlyWhenInstallingDefault,
showEnvVars: Bool = showEnvVarsDefault,
- baseOnDependencyAnalysis: Bool = baseOnDependencyAnalysisDefault
+ basedOnDependencyAnalysis: Bool = basedOnDependencyAnalysisDefault
) {
self.script = script
self.name = name
@@ -43,7 +43,7 @@ public struct BuildScript: Equatable {
self.shell = shell
self.runOnlyWhenInstalling = runOnlyWhenInstalling
self.showEnvVars = showEnvVars
- self.baseOnDependencyAnalysis = baseOnDependencyAnalysis
+ self.basedOnDependencyAnalysis = basedOnDependencyAnalysis
}
}
@@ -65,7 +65,7 @@ extension BuildScript: JSONObjectConvertible {
shell = jsonDictionary.json(atKeyPath: "shell")
runOnlyWhenInstalling = jsonDictionary.json(atKeyPath: "runOnlyWhenInstalling") ?? BuildScript.runOnlyWhenInstallingDefault
showEnvVars = jsonDictionary.json(atKeyPath: "showEnvVars") ?? BuildScript.showEnvVarsDefault
- baseOnDependencyAnalysis = jsonDictionary.json(atKeyPath: "baseOnDependencyAnalysis") ?? BuildScript.baseOnDependencyAnalysisDefault
+ basedOnDependencyAnalysis = jsonDictionary.json(atKeyPath: "basedOnDependencyAnalysis") ?? BuildScript.basedOnDependencyAnalysisDefault
}
}
@@ -85,8 +85,8 @@ extension BuildScript: JSONEncodable {
dict["showEnvVars"] = showEnvVars
}
- if baseOnDependencyAnalysis != BuildScript.baseOnDependencyAnalysisDefault {
- dict["baseOnDependencyAnalysis"] = baseOnDependencyAnalysis
+ if basedOnDependencyAnalysis != BuildScript.basedOnDependencyAnalysisDefault {
+ dict["basedOnDependencyAnalysis"] = basedOnDependencyAnalysis
}
switch script {
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 4cff3b27f..7327c65c6 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -479,7 +479,7 @@ public class PBXProjGenerator {
shellScript: shellScript,
runOnlyForDeploymentPostprocessing: buildScript.runOnlyWhenInstalling,
showEnvVarsInLog: buildScript.showEnvVars,
- alwaysOutOfDate: !buildScript.baseOnDependencyAnalysis
+ alwaysOutOfDate: !buildScript.basedOnDependencyAnalysis
)
return addObject(shellScriptPhase)
}
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index ff0f75f73..a1008ffad 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -144,7 +144,7 @@ targets:
- path: scripts/strip-frameworks.sh
name: Strip Unused Architectures from Frameworks
runOnlyWhenInstalling: true
- baseOnDependencyAnalysis: false
+ basedOnDependencyAnalysis: false
- name: MyScript
script: |
echo "You ran a script!"
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index a1a32df7b..d9112a017 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -389,7 +389,7 @@ class ProjectSpecTests: XCTestCase {
shell: "/bin/bash",
runOnlyWhenInstalling: true,
showEnvVars: true,
- baseOnDependencyAnalysis: false)],
+ basedOnDependencyAnalysis: false)],
postCompileScripts: [BuildScript(script: .path("cmd.sh"),
name: "Bar script",
inputFiles: ["foo"],
@@ -399,7 +399,7 @@ class ProjectSpecTests: XCTestCase {
shell: "/bin/bash",
runOnlyWhenInstalling: true,
showEnvVars: true,
- baseOnDependencyAnalysis: false)],
+ basedOnDependencyAnalysis: false)],
postBuildScripts: [BuildScript(script: .path("cmd.sh"),
name: "an another script",
inputFiles: ["foo"],
@@ -409,7 +409,7 @@ class ProjectSpecTests: XCTestCase {
shell: "/bin/bash",
runOnlyWhenInstalling: true,
showEnvVars: true,
- baseOnDependencyAnalysis: false)],
+ basedOnDependencyAnalysis: false)],
buildRules: [BuildRule(fileType: .pattern("*.xcassets"),
action: .script("pre_process_swift.py"),
name: "My Build Rule",
@@ -459,7 +459,7 @@ class ProjectSpecTests: XCTestCase {
shell: "/bin/bash",
runOnlyWhenInstalling: true,
showEnvVars: false,
- baseOnDependencyAnalysis: false)],
+ basedOnDependencyAnalysis: false)],
scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(targetReference: "test target",
randomExecutionOrder: false,
parallelizable: false)],
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index ba3b450cb..5db5b1aa3 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -1052,10 +1052,10 @@ class SpecLoadingTests: XCTestCase {
["path": "script.sh"],
["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "runOnlyWhenInstalling": true],
["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "showEnvVars": false],
- ["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "baseOnDependencyAnalysis": false],
+ ["script": "shell script\ndo thing", "name": "myscript", "inputFiles": ["file", "file2"], "outputFiles": ["file", "file2"], "shell": "bin/customshell", "basedOnDependencyAnalysis": false],
["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "runOnlyWhenInstalling": true],
["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "showEnvVars": false],
- ["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "baseOnDependencyAnalysis": false],
+ ["script": "shell script\nwith file lists", "name": "myscript", "inputFileLists": ["inputList.xcfilelist"], "outputFileLists": ["outputList.xcfilelist"], "shell": "bin/customshell", "basedOnDependencyAnalysis": false],
]
target["preBuildScripts"] = scripts
target["postCompileScripts"] = scripts
@@ -1063,12 +1063,12 @@ class SpecLoadingTests: XCTestCase {
let expectedScripts = [
BuildScript(script: .path("script.sh")),
- BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true, baseOnDependencyAnalysis: true),
- BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false, baseOnDependencyAnalysis: true),
- BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: true, baseOnDependencyAnalysis: false),
- BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true, baseOnDependencyAnalysis: true),
- BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false, baseOnDependencyAnalysis: true),
- BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: true, baseOnDependencyAnalysis: false),
+ BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true, basedOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false, basedOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\ndo thing"), name: "myscript", inputFiles: ["file", "file2"], outputFiles: ["file", "file2"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: true, basedOnDependencyAnalysis: false),
+ BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: true, showEnvVars: true, basedOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: false, basedOnDependencyAnalysis: true),
+ BuildScript(script: .script("shell script\nwith file lists"), name: "myscript", inputFileLists: ["inputList.xcfilelist"], outputFileLists: ["outputList.xcfilelist"], shell: "bin/customshell", runOnlyWhenInstalling: false, showEnvVars: true, basedOnDependencyAnalysis: false),
]
let parsedTarget = try Target(name: "test", jsonDictionary: target)
From 282761cb215b08b16dc26265c53bd234db7ff466 Mon Sep 17 00:00:00 2001
From: Vasiliy Anisimov
Date: Mon, 11 Jan 2021 05:33:44 +0300
Subject: [PATCH 044/284] Fixed adding Info.plists with custom names to Copy
Bundle Resources build phase (#945)
* Fixed adding Info.plists with custom names to Copy Bundle Resources build phase
- Extended check for Info.plist, because they usually named not just "Info.plist", but "-Info.plist"
* Update CHANGELOG.md
* Update CHANGELOG.md
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 3 +++
Sources/XcodeGenKit/SourceGenerator.swift | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6b9ac9ad3..d4f25428b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,9 @@
#### Fixed
- Remove force-unwrapping causing crash for `LegacyTarget`s [#982](https://github.com/yonaskolb/XcodeGen/pull/982) @jcolicchio
+#### Changed
+- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
+
## 2.18.0
#### Added
diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift
index 5abb5e1bf..b66346f15 100644
--- a/Sources/XcodeGenKit/SourceGenerator.swift
+++ b/Sources/XcodeGenKit/SourceGenerator.swift
@@ -250,7 +250,7 @@ class SourceGenerator {
/// returns a default build phase for a given path. This is based off the filename
private func getDefaultBuildPhase(for path: Path, targetType: PBXProductType) -> BuildPhaseSpec? {
- if path.lastComponent == "Info.plist" {
+ if path.lastComponent.hasSuffix("Info.plist") {
return nil
}
if let buildPhase = getFileType(path: path)?.buildPhase {
From 7e536e5a3a0e77017808bb325a440765c158f2df Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Tue, 12 Jan 2021 21:13:32 +1100
Subject: [PATCH 045/284] Update CHANGELOG.md
---
CHANGELOG.md | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d4f25428b..5a56707f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,18 +8,16 @@
- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
+#### Changed
+- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
+
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
+- Remove force-unwrapping causing crash for `LegacyTarget`s [#982](https://github.com/yonaskolb/XcodeGen/pull/982) @jcolicchio
#### Internal
- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
-#### Fixed
-- Remove force-unwrapping causing crash for `LegacyTarget`s [#982](https://github.com/yonaskolb/XcodeGen/pull/982) @jcolicchio
-
-#### Changed
-- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
-
## 2.18.0
#### Added
From 2277b323f217b0087a545fef9028dcfc386d6126 Mon Sep 17 00:00:00 2001
From: Sascha Schwabbauer
Date: Tue, 12 Jan 2021 23:51:11 +0100
Subject: [PATCH 046/284] Add support for runOncePerArchitecture (#950)
Add changelog and small change
Fix build error
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 ++
Sources/ProjectSpec/BuildRule.swift | 19 +++++++++++++++++--
Sources/XcodeGenKit/PBXProjGenerator.swift | 3 ++-
Tests/ProjectSpecTests/ProjectSpecTests.swift | 6 ++++--
5 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a56707f9..3b2929c95 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
+- Add `BuildRule.runOncePerArchitecture` to allow running build rules once per architecture. [#950](https://github.com/yonaskolb/XcodeGen/pull/950) @sascha
#### Changed
- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index e7374fe7f..4cf4f2a16 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -605,6 +605,7 @@ targets:
- [ ] **name**: **String** - The name of a build rule. Defaults to `Build Rule`
- [ ] **outputFiles**: **[String]** - The list of output files
- [ ] **outputFilesCompilerFlags**: **[String]** - The list of compiler flags to apply to the output files
+- [ ] **runOncePerArchitecture**: **Bool** - a boolean that indicates if this rule should run once per architecture. This defaults to true
```yaml
targets:
@@ -619,6 +620,7 @@ targets:
compilerSpec: com.apple.xcode.tools.swift.compiler
outputFiles:
- $(SRCROOT)/Generated.swift
+ runOncePerArchitecture: false
```
### Target Scheme
diff --git a/Sources/ProjectSpec/BuildRule.swift b/Sources/ProjectSpec/BuildRule.swift
index 760b57c7a..f5fefc013 100644
--- a/Sources/ProjectSpec/BuildRule.swift
+++ b/Sources/ProjectSpec/BuildRule.swift
@@ -5,6 +5,7 @@ public struct BuildRule: Equatable {
public static let scriptCompilerSpec = "com.apple.compilers.proxy.script"
public static let filePatternFileType = "pattern.proxy"
+ public static let runOncePerArchitectureDefault = true
public enum FileType: Equatable {
case type(String)
@@ -49,13 +50,22 @@ public struct BuildRule: Equatable {
public var outputFiles: [String]
public var outputFilesCompilerFlags: [String]
public var name: String?
-
- public init(fileType: FileType, action: Action, name: String? = nil, outputFiles: [String] = [], outputFilesCompilerFlags: [String] = []) {
+ public var runOncePerArchitecture: Bool
+
+ public init(
+ fileType: FileType,
+ action: Action,
+ name: String? = nil,
+ outputFiles: [String] = [],
+ outputFilesCompilerFlags: [String] = [],
+ runOncePerArchitecture: Bool = runOncePerArchitectureDefault
+ ) {
self.fileType = fileType
self.action = action
self.name = name
self.outputFiles = outputFiles
self.outputFilesCompilerFlags = outputFilesCompilerFlags
+ self.runOncePerArchitecture = runOncePerArchitecture
}
}
@@ -78,6 +88,7 @@ extension BuildRule: JSONObjectConvertible {
outputFiles = jsonDictionary.json(atKeyPath: "outputFiles") ?? []
outputFilesCompilerFlags = jsonDictionary.json(atKeyPath: "outputFilesCompilerFlags") ?? []
name = jsonDictionary.json(atKeyPath: "name")
+ runOncePerArchitecture = jsonDictionary.json(atKeyPath: "runOncePerArchitecture") ?? BuildRule.runOncePerArchitectureDefault
}
}
@@ -103,6 +114,10 @@ extension BuildRule: JSONEncodable {
dict["script"] = string
}
+ if runOncePerArchitecture != BuildRule.runOncePerArchitectureDefault {
+ dict["runOncePerArchitecture"] = runOncePerArchitecture
+ }
+
return dict
}
}
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 7327c65c6..52060d93b 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -1150,7 +1150,8 @@ public class PBXProjGenerator {
name: buildRule.name ?? "Build Rule",
outputFiles: buildRule.outputFiles,
outputFilesCompilerFlags: buildRule.outputFilesCompilerFlags,
- script: buildRule.action.script
+ script: buildRule.action.script,
+ runOncePerArchitecture: buildRule.runOncePerArchitecture
)
)
}
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index d9112a017..2878697d5 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -414,12 +414,14 @@ class ProjectSpecTests: XCTestCase {
action: .script("pre_process_swift.py"),
name: "My Build Rule",
outputFiles: ["$(SRCROOT)/Generated.swift"],
- outputFilesCompilerFlags: ["foo"]),
+ outputFilesCompilerFlags: ["foo"],
+ runOncePerArchitecture: false),
BuildRule(fileType: .type("sourcecode.swift"),
action: .compilerSpec("com.apple.xcode.tools.swift.compiler"),
name: nil,
outputFiles: ["bar"],
- outputFilesCompilerFlags: ["foo"])],
+ outputFilesCompilerFlags: ["foo"],
+ runOncePerArchitecture: true)],
scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(targetReference: "test target",
randomExecutionOrder: false,
parallelizable: false)],
From c194a2e4e311f7611c8aaa87930c9ba4a9a79475 Mon Sep 17 00:00:00 2001
From: Elliott Williams
Date: Wed, 13 Jan 2021 20:42:43 -0800
Subject: [PATCH 047/284] Fix race condition in json decoder (#995)
* Fix race condition in json decoder
* Update CHANGELOG.md
---
CHANGELOG.md | 1 +
Sources/ProjectSpec/Decoding.swift | 31 ++++++++----------------------
2 files changed, 9 insertions(+), 23 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3b2929c95..2de0668e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
- Remove force-unwrapping causing crash for `LegacyTarget`s [#982](https://github.com/yonaskolb/XcodeGen/pull/982) @jcolicchio
+- Fixed a race condition in an internal JSON decoder, which would occasionally fail with an error like `Parsing project spec failed: Error Domain=Unspecified error Code=0`. [#995](https://github.com/yonaskolb/XcodeGen/pull/995) @elliottwilliams
#### Internal
- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
diff --git a/Sources/ProjectSpec/Decoding.swift b/Sources/ProjectSpec/Decoding.swift
index 2c4fe3f38..24d158d91 100644
--- a/Sources/ProjectSpec/Decoding.swift
+++ b/Sources/ProjectSpec/Decoding.swift
@@ -10,36 +10,21 @@ extension Dictionary where Key: JSONKey {
}
if parallel {
let defaultError = NSError(domain: "Unspecified error", code: 0, userInfo: nil)
- var itemResults: [Result] = Array(repeating: .failure(defaultError), count: dictionary.count)
- var ops: [BlockOperation] = []
- var idx: Int = 0
- for (key, _) in dictionary {
- ops.append(BlockOperation { [idx] in
+ let keys = Array(dictionary.keys)
+ var itemResults: [Result] = Array(repeating: .failure(defaultError), count: keys.count)
+ itemResults.withUnsafeMutableBufferPointer { buffer in
+ DispatchQueue.concurrentPerform(iterations: dictionary.count) { idx in
do {
+ let key = keys[idx]
let jsonDictionary: JSONDictionary = try dictionary.json(atKeyPath: .key(key))
let item = try T(name: key, jsonDictionary: jsonDictionary)
- itemResults[idx] = .success(item)
+ buffer[idx] = .success(item)
} catch {
- itemResults[idx] = .failure(error)
+ buffer[idx] = .failure(error)
}
- })
- idx += 1
- }
- let queue = OperationQueue()
- queue.qualityOfService = .userInteractive
- queue.maxConcurrentOperationCount = 8
- queue.addOperations(ops, waitUntilFinished: true)
- var items = ContiguousArray()
- items.reserveCapacity(itemResults.count)
- for result in itemResults {
- switch result {
- case .failure(let error):
- throw error
- case .success(let item):
- items.append(item)
}
}
- return Array(items)
+ return try itemResults.map { try $0.get() }
} else {
var items: [T] = []
for (key, _) in dictionary {
From 0eeb6369ecb407e5bc5940fb563e486fbf225883 Mon Sep 17 00:00:00 2001
From: Joseph Colicchio
Date: Wed, 13 Jan 2021 21:59:59 -0800
Subject: [PATCH 048/284] Legacy / Settings Relative Paths (#981)
* Adjust header search paths and legacy working directory for relative included projects
* Undo change to HEADER_SEARCH_PATHS
* Add test
* Update changelog
* Fix test
* Undo test changes
* Fix tests
---
CHANGELOG.md | 1 +
Sources/ProjectSpec/Target.swift | 10 +
.../AnotherProject.xcodeproj/project.pbxproj | 110 +++++
.../TestProject/AnotherProject/project.yml | 7 +
.../Project.xcodeproj/project.pbxproj | 391 ++++++++++++++++++
Tests/Fixtures/TestProject/project.yml | 2 +-
6 files changed, 520 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2de0668e4..c5c975121 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@
#### Changed
- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
+- **Breaking**: `workingDirectory` of included legacy targets is now made relative to including project [#981](https://github.com/yonaskolb/XcodeGen/pull/981) @jcolicchio
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift
index c746129bd..851aa4ef5 100644
--- a/Sources/ProjectSpec/Target.swift
+++ b/Sources/ProjectSpec/Target.swift
@@ -24,6 +24,15 @@ public struct LegacyTarget: Equatable {
}
}
+extension LegacyTarget: PathContainer {
+
+ static var pathProperties: [PathProperty] {
+ [
+ .string("workingDirectory"),
+ ]
+ }
+}
+
public struct Target: ProjectTarget {
public var name: String
public var type: PBXProductType
@@ -134,6 +143,7 @@ extension Target: PathContainer {
.object("prebuildScripts", BuildScript.pathProperties),
.object("postCompileScripts", BuildScript.pathProperties),
.object("postBuildScripts", BuildScript.pathProperties),
+ .object("legacy", LegacyTarget.pathProperties),
]),
]
}
diff --git a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
index 9ca477779..c0b561029 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
@@ -41,6 +41,23 @@
};
/* End PBXGroup section */
+/* Begin PBXLegacyTarget section */
+ A6D9FB94860C005F0B723B5F /* IncludedLegacy */ = {
+ isa = PBXLegacyTarget;
+ buildConfigurationList = AC68886F4CEE08D3593D0877 /* Build configuration list for PBXLegacyTarget "IncludedLegacy" */;
+ buildPhases = (
+ 69078D1DA3F942D5BC752081 /* Sources */,
+ );
+ buildToolPath = /usr/bin/true;
+ buildWorkingDirectory = .;
+ dependencies = (
+ );
+ name = IncludedLegacy;
+ passBuildSettingsInEnvironment = 0;
+ productName = IncludedLegacy;
+ };
+/* End PBXLegacyTarget section */
+
/* Begin PBXNativeTarget section */
63A2D4898D974A06E85B07F8 /* BundleX */ = {
isa = PBXNativeTarget;
@@ -94,11 +111,19 @@
targets = (
63A2D4898D974A06E85B07F8 /* BundleX */,
E76A5F5E363E470416D3B487 /* ExternalTarget */,
+ A6D9FB94860C005F0B723B5F /* IncludedLegacy */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
+ 69078D1DA3F942D5BC752081 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
F08051CAC5E72EEEB8FB447B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -360,6 +385,18 @@
};
name = "Staging Debug";
};
+ 2D7C07F1D50007A04EF6C0EE /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
30E2E954A636A240B1CE5C15 /* Staging Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -447,6 +484,18 @@
};
name = "Production Debug";
};
+ 5280A75613CFD83BA7EE6AD4 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
56ADF89C9058B2C25F6C80CE /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -554,6 +603,30 @@
};
name = "Production Release";
};
+ 683A510C4120CF5D216E1667 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ 6C48009F842BEC2467546ADF /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
7919FDD28F9A535EA26FB151 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -663,6 +736,30 @@
};
name = "Test Release";
};
+ CB49A0C6C6CF7FC894E453BE /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ E1A76975608AFAA966038B93 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -692,6 +789,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ AC68886F4CEE08D3593D0877 /* Build configuration list for PBXLegacyTarget "IncludedLegacy" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 6C48009F842BEC2467546ADF /* Production Debug */,
+ E1A76975608AFAA966038B93 /* Production Release */,
+ 2D7C07F1D50007A04EF6C0EE /* Staging Debug */,
+ CB49A0C6C6CF7FC894E453BE /* Staging Release */,
+ 683A510C4120CF5D216E1667 /* Test Debug */,
+ 5280A75613CFD83BA7EE6AD4 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
B5049D72EC10A5C87F29B6B1 /* Build configuration list for PBXNativeTarget "ExternalTarget" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/Tests/Fixtures/TestProject/AnotherProject/project.yml b/Tests/Fixtures/TestProject/AnotherProject/project.yml
index 012d6062a..65e729ede 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/project.yml
+++ b/Tests/Fixtures/TestProject/AnotherProject/project.yml
@@ -11,3 +11,10 @@ targets:
ExternalTarget:
type: framework
platform: iOS
+ IncludedLegacy:
+ type: ""
+ platform: iOS
+ legacy:
+ toolPath: /usr/bin/true
+ workingDirectory: .
+
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 6d4ccc57e..8ba9c0601 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -597,6 +597,7 @@
1FA5E208EC184E3030D2A21D /* Clip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Clip.entitlements; sourceTree = ""; };
22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; };
2233774B86539B1574D206B0 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
23A2F16890ECF2EE3FED72AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
28360ECA4D727FAA58557A81 /* example.mp4 */ = {isa = PBXFileReference; path = example.mp4; sourceTree = ""; };
2A5F527F2590C14956518174 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; };
@@ -645,6 +646,7 @@
7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7FDC16E1938AA114B67D87A9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; };
814822136AF3C64428D69DD6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 84317819C92F78425870E483 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
8A9274BE42A03DC5DA1FAD04 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1095,7 +1097,9 @@
33F6DCDC37D2E66543D4965D /* App_macOS.app */,
0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */,
A680BE9F68A255B0FB291AE6 /* App_watchOS.app */,
+ 84317819C92F78425870E483 /* BundleX.bundle */,
7D700FA699849D2F95216883 /* EntitledApp.app */,
+ 2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */,
8A9274BE42A03DC5DA1FAD04 /* Framework.framework */,
41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */,
7D67F1C1BFBACE101DE7DB51 /* Framework.framework */,
@@ -1323,6 +1327,20 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXLegacyTarget section */
+ 700328EE1570207608D6ADB3 /* IncludedLegacy */ = {
+ isa = PBXLegacyTarget;
+ buildConfigurationList = 02B721AF7361EBCFA91410BF /* Build configuration list for PBXLegacyTarget "IncludedLegacy" */;
+ buildPhases = (
+ 82E24A8257F299AC04F44A8F /* Sources */,
+ );
+ buildToolPath = /usr/bin/true;
+ buildWorkingDirectory = AnotherProject;
+ dependencies = (
+ );
+ name = IncludedLegacy;
+ passBuildSettingsInEnvironment = 0;
+ productName = IncludedLegacy;
+ };
72C923899DE05F1281872160 /* Legacy */ = {
isa = PBXLegacyTarget;
buildConfigurationList = BE0FF81B67730F081F45BC78 /* Build configuration list for PBXLegacyTarget "Legacy" */;
@@ -1800,6 +1818,20 @@
productReference = 38DB679FF1CF4E379D1AB103 /* App_Clip.app */;
productType = "com.apple.product-type.application.on-demand-install-capable";
};
+ DA40AB367B606CCE2FDD398D /* BundleX */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2C39D94CF9C8B1CB79F04AC8 /* Build configuration list for PBXNativeTarget "BundleX" */;
+ buildPhases = (
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = BundleX;
+ productName = BundleX;
+ productReference = 84317819C92F78425870E483 /* BundleX.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
DC2F16BAA6E13B44AB62F888 /* App_iOS_Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = F888428CB91ACDDAAE8C8F21 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */;
@@ -1819,6 +1851,21 @@
productReference = CB77A637470A3CDA2BDDBE99 /* App_iOS_Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
+ E7454C10EA126A93537DD57E /* ExternalTarget */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D9EF39CA9A17477264F02057 /* Build configuration list for PBXNativeTarget "ExternalTarget" */;
+ buildPhases = (
+ E3C67D44BD5D2820592267FD /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = ExternalTarget;
+ productName = ExternalTarget;
+ productReference = 2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */;
+ productType = "com.apple.product-type.framework";
+ };
E7815F2F0D9CDECF9185AAF3 /* XPC Service */ = {
isa = PBXNativeTarget;
buildConfigurationList = D379D1BBEF24ED05EB6ADEB3 /* Build configuration list for PBXNativeTarget "XPC Service" */;
@@ -1924,7 +1971,9 @@
71E2BDAC4B8E8FC2BBF75C55 /* App_macOS_Tests */,
208179651927D1138D19B5AD /* App_watchOS */,
307AE3FA155FFD09B74AE351 /* App_watchOS Extension */,
+ DA40AB367B606CCE2FDD398D /* BundleX */,
B61ED4688789B071275E2B7A /* EntitledApp */,
+ E7454C10EA126A93537DD57E /* ExternalTarget */,
CE7D183D3752B5B35D2D8E6D /* Framework2_iOS */,
FC26AF2506D3B2B40DE8A5F8 /* Framework2_macOS */,
8B9A14DC280CCE013CC86440 /* Framework2_tvOS */,
@@ -1933,6 +1982,7 @@
53A3B531E3947D8A8722745E /* Framework_macOS */,
536ACF18E4603B59207D43CE /* Framework_tvOS */,
71B5187E710718C1A205D4DC /* Framework_watchOS */,
+ 700328EE1570207608D6ADB3 /* IncludedLegacy */,
72C923899DE05F1281872160 /* Legacy */,
13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */,
578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */,
@@ -2355,6 +2405,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 82E24A8257F299AC04F44A8F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
8A616537E6E1BEAB59E069C7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -2468,6 +2525,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ E3C67D44BD5D2820592267FD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
EA88FE285DA490166635BE98 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -2827,6 +2891,28 @@
};
name = "Staging Release";
};
+ 045CB2D74D9A3532E128BDD2 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.ExternalTarget;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
0579BA94EA238151DAFC2FFC /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3253,6 +3339,19 @@
};
name = "Production Debug";
};
+ 221A50372FFB2F1202940FDC /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
234640A811EF6EB9CC9081CA /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3381,6 +3480,28 @@
};
name = "Production Release";
};
+ 2C6AB16720ADFB2436337A8F /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.ExternalTarget;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
2E5159957368A9CF77A3C9FC /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3447,6 +3568,19 @@
};
name = "Test Debug";
};
+ 31931061043C66589547105C /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
3236B7B20520584116A96C0D /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4122,6 +4256,19 @@
};
name = "Test Release";
};
+ 57CEA8537C6F3E5B425C5A8E /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
580039D71F71A98572051157 /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4344,6 +4491,19 @@
};
name = "Production Release";
};
+ 64EC1B53D612851D51D18FD2 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
65A21512F2B980615DF51D77 /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4745,6 +4905,19 @@
};
name = "Staging Debug";
};
+ 85E6B40848AC2A0B1F921553 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
862658ACA3BF7AE7FA22870C /* Production Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4761,6 +4934,19 @@
};
name = "Production Debug";
};
+ 8A380D322263800338FA5139 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
8C9F67C7AA56DBE79F0F2640 /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4789,6 +4975,19 @@
};
name = "Test Debug";
};
+ 917341F64B3A9B883FE942AD /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
921EC740167F616C38809275 /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4856,6 +5055,28 @@
};
name = "Production Debug";
};
+ 94ECCEFE29DB30C48B227A16 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.ExternalTarget;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
9666BFAAA42CE2DC7E368E7D /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5321,6 +5542,41 @@
};
name = "Staging Release";
};
+ AF3DD6DCF141F35D4129FFF5 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.ExternalTarget;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ AF4B5E2FF8B6C883C40737C6 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
B008685BA25BB8FD771F0AE3 /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5453,6 +5709,41 @@
};
name = "Staging Release";
};
+ B5E1584A197C52FC47245FC8 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.ExternalTarget;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ B7EBD1A3A3A7E66100F5C845 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
B928E061A126AC8D17D81D1E /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5782,6 +6073,28 @@
};
name = "Production Debug";
};
+ C745E36B41A4ABD1E24A69AF /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.ExternalTarget;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
C7EF8D96FA7893ADD61CF4C0 /* Production Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5917,6 +6230,19 @@
};
name = "Test Release";
};
+ D4A6D5FE11C6652E092629BF /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
D70B7AB6D219453ABF475EED /* Production Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6432,6 +6758,19 @@
};
name = "Production Release";
};
+ EBA3332D0144AAAA57630865 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
EBD2F70285E21FFAB1C23D01 /* Staging Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6507,6 +6846,19 @@
};
name = "Production Release";
};
+ EF6AB18F2D803CB530422BAE /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
F3AC6A112F81D0958A316D82 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6779,6 +7131,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ 02B721AF7361EBCFA91410BF /* Build configuration list for PBXLegacyTarget "IncludedLegacy" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 221A50372FFB2F1202940FDC /* Production Debug */,
+ AF4B5E2FF8B6C883C40737C6 /* Production Release */,
+ D4A6D5FE11C6652E092629BF /* Staging Debug */,
+ EF6AB18F2D803CB530422BAE /* Staging Release */,
+ 57CEA8537C6F3E5B425C5A8E /* Test Debug */,
+ 8A380D322263800338FA5139 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
02E5A42C8065AF7CCB48FACE /* Build configuration list for PBXNativeTarget "Framework2_macOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -6831,6 +7196,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ 2C39D94CF9C8B1CB79F04AC8 /* Build configuration list for PBXNativeTarget "BundleX" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 64EC1B53D612851D51D18FD2 /* Production Debug */,
+ 917341F64B3A9B883FE942AD /* Production Release */,
+ 31931061043C66589547105C /* Staging Debug */,
+ EBA3332D0144AAAA57630865 /* Staging Release */,
+ 85E6B40848AC2A0B1F921553 /* Test Debug */,
+ B7EBD1A3A3A7E66100F5C845 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
3F3C272D2EA61F6B88B80D44 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -7156,6 +7534,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ D9EF39CA9A17477264F02057 /* Build configuration list for PBXNativeTarget "ExternalTarget" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C745E36B41A4ABD1E24A69AF /* Production Debug */,
+ 045CB2D74D9A3532E128BDD2 /* Production Release */,
+ B5E1584A197C52FC47245FC8 /* Staging Debug */,
+ 94ECCEFE29DB30C48B227A16 /* Staging Release */,
+ 2C6AB16720ADFB2436337A8F /* Test Debug */,
+ AF3DD6DCF141F35D4129FFF5 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
ED1A174BA92C6E5172B519B7 /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index a1008ffad..9ab40ade4 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -1,5 +1,5 @@
name: Project
-include: [environments.yml]
+include: [environments.yml, AnotherProject/project.yml]
options:
bundleIdPrefix: com.project
usesTabs: false
From 6b7ab91440d58f4e6b103a71e641a01ba341caae Mon Sep 17 00:00:00 2001
From: Max Rabiciuc
Date: Thu, 14 Jan 2021 14:51:38 -0800
Subject: [PATCH 049/284] Fix issue where frameworks with MACH_O_TYPE:staticlib
were being embedded (#1003)
---
CHANGELOG.md | 1 +
Sources/ProjectSpec/Linkage.swift | 19 +++-
Sources/ProjectSpec/XCProjExtensions.swift | 15 ++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 4 +-
.../ProjectGeneratorTests.swift | 96 +++++++++++++++++++
5 files changed, 121 insertions(+), 14 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c5c975121..79403fe48 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
- Remove force-unwrapping causing crash for `LegacyTarget`s [#982](https://github.com/yonaskolb/XcodeGen/pull/982) @jcolicchio
- Fixed a race condition in an internal JSON decoder, which would occasionally fail with an error like `Parsing project spec failed: Error Domain=Unspecified error Code=0`. [#995](https://github.com/yonaskolb/XcodeGen/pull/995) @elliottwilliams
+- Fixed issue where frameworks with `MACH_O_TYPE: staticlib` were being incorrectly embedded. [#1003](https://github.com/yonaskolb/XcodeGen/pull/1003) @mrabiciu
#### Internal
- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
diff --git a/Sources/ProjectSpec/Linkage.swift b/Sources/ProjectSpec/Linkage.swift
index fec8023ee..cceda53ec 100644
--- a/Sources/ProjectSpec/Linkage.swift
+++ b/Sources/ProjectSpec/Linkage.swift
@@ -7,10 +7,10 @@ public enum Linkage {
case none
}
-extension PBXProductType {
+extension Target {
public var defaultLinkage: Linkage {
- switch self {
+ switch type {
case .none,
.appExtension,
.application,
@@ -36,8 +36,12 @@ extension PBXProductType {
.xpcService:
return .none
case .framework, .xcFramework:
- // TODO: This should check `MACH_O_TYPE` in case this is a "Static Framework"
- return .dynamic
+ // Check the MACH_O_TYPE for "Static Framework"
+ if settings.buildSettings.machOType == "staticlib" {
+ return .static
+ } else {
+ return .dynamic
+ }
case .dynamicLibrary:
return .dynamic
case .staticLibrary, .staticFramework:
@@ -45,3 +49,10 @@ extension PBXProductType {
}
}
}
+
+private extension BuildSettings {
+
+ var machOType: String? {
+ self["MACH_O_TYPE"] as? String
+ }
+}
diff --git a/Sources/ProjectSpec/XCProjExtensions.swift b/Sources/ProjectSpec/XCProjExtensions.swift
index 089bb4059..c6e194c2a 100644
--- a/Sources/ProjectSpec/XCProjExtensions.swift
+++ b/Sources/ProjectSpec/XCProjExtensions.swift
@@ -54,17 +54,16 @@ extension PBXProductType {
}
/// Function to determine when a dependendency should be embedded into the target
- public func shouldEmbed(_ dependencyType: PBXProductType) -> Bool {
- switch dependencyType {
- case .staticLibrary, .staticFramework:
- // Some dependendencies should not be embed, independently of the target type
+ public func shouldEmbed(_ dependencyTarget: Target) -> Bool {
+ switch dependencyTarget.defaultLinkage {
+ case .static:
+ // Static dependencies should never embed
return false
-
- default:
+ case .dynamic, .none:
if isApp {
- // If target is an app, all dependencies should be embed (except for the ones mentioned above)
+ // If target is an app, all dependencies should be embed (unless they're static)
return true
- } else if isTest, [.framework, .bundle].contains(dependencyType) {
+ } else if isTest, [.framework, .bundle].contains(dependencyTarget.type) {
// If target is test, some dependencies should be embed (depending on their type)
return true
} else {
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 52060d93b..5be56ccec 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -690,7 +690,7 @@ public class PBXProjGenerator {
}
func processTargetDependency(_ dependency: Dependency, dependencyTarget: Target, embedFileReference: PBXFileElement?) {
- let dependencyLinkage = dependencyTarget.type.defaultLinkage
+ let dependencyLinkage = dependencyTarget.defaultLinkage
let link = dependency.link ??
((dependencyLinkage == .dynamic && target.type != .staticLibrary) ||
(dependencyLinkage == .static && target.type.isExecutable))
@@ -707,7 +707,7 @@ public class PBXProjGenerator {
}
}
- let embed = dependency.embed ?? target.type.shouldEmbed(dependencyTarget.type)
+ let embed = dependency.embed ?? target.type.shouldEmbed(dependencyTarget)
if embed {
let embedFile = addObject(
PBXBuildFile(
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 81c12d34a..0a189ea5a 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -786,6 +786,102 @@ class ProjectGeneratorTests: XCTestCase {
try expect(copyFilesPhases.count) == expectedCopyFilesPhasesCount
}
}
+
+ $0.it("ensures static frameworks are not embedded by default") {
+
+ let app = Target(
+ name: "App",
+ type: .application,
+ platform: .iOS,
+ dependencies: [
+ Dependency(type: .target, reference: "DynamicFramework"),
+ Dependency(type: .target, reference: "DynamicFrameworkNotEmbedded", embed: false),
+ Dependency(type: .target, reference: "StaticFramework"),
+ Dependency(type: .target, reference: "StaticFrameworkExplicitlyEmbedded", embed: true),
+ Dependency(type: .target, reference: "StaticFramework2"),
+ Dependency(type: .target, reference: "StaticFramework2ExplicitlyEmbedded", embed: true),
+ Dependency(type: .target, reference: "StaticLibrary"),
+ ]
+ )
+
+ let targets = [
+ app,
+ Target(
+ name: "DynamicFramework",
+ type: .framework,
+ platform: .iOS
+ ),
+ Target(
+ name: "DynamicFrameworkNotEmbedded",
+ type: .framework,
+ platform: .iOS
+ ),
+ Target(
+ name: "StaticFramework",
+ type: .framework,
+ platform: .iOS,
+ settings: Settings(buildSettings: ["MACH_O_TYPE": "staticlib"])
+ ),
+ Target(
+ name: "StaticFrameworkExplicitlyEmbedded",
+ type: .framework,
+ platform: .iOS,
+ settings: Settings(buildSettings: ["MACH_O_TYPE": "staticlib"])
+ ),
+ Target(
+ name: "StaticFramework2",
+ type: .staticFramework,
+ platform: .iOS
+ ),
+ Target(
+ name: "StaticFramework2ExplicitlyEmbedded",
+ type: .staticFramework,
+ platform: .iOS
+ ),
+ Target(
+ name: "StaticLibrary",
+ type: .staticLibrary,
+ platform: .iOS
+ ),
+ ]
+
+ let expectedLinkedFiles = Set([
+ "DynamicFramework.framework",
+ "DynamicFrameworkNotEmbedded.framework",
+ "StaticFramework.framework",
+ "StaticFrameworkExplicitlyEmbedded.framework",
+ "StaticFramework2.framework",
+ "StaticFramework2ExplicitlyEmbedded.framework",
+ "libStaticLibrary.a",
+ ])
+
+ let expectedEmbeddedFrameworks = Set([
+ "DynamicFramework.framework",
+ "StaticFrameworkExplicitlyEmbedded.framework",
+ "StaticFramework2ExplicitlyEmbedded.framework"
+ ])
+
+ let project = Project(
+ name: "test",
+ targets: targets
+ )
+ let pbxProject = try project.generatePbxProj()
+
+ let appTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))
+ let buildPhases = appTarget.buildPhases
+ let frameworkPhases = pbxProject.frameworksBuildPhases.filter { buildPhases.contains($0) }
+ let copyFilesPhases = pbxProject.copyFilesBuildPhases.filter { buildPhases.contains($0) }
+ let embedFrameworkPhase = copyFilesPhases.first { $0.dstSubfolderSpec == .frameworks }
+
+ // Ensure all targets are linked
+ let linkFrameworks = (frameworkPhases[0].files ?? []).compactMap { $0.file?.nameOrPath }
+ let linkPackages = (frameworkPhases[0].files ?? []).compactMap { $0.product?.productName }
+ try expect(Set(linkFrameworks + linkPackages)) == expectedLinkedFiles
+
+ // Ensure only dynamic frameworks are embedded (unless there's an explicit override)
+ let embeddedFrameworks = Set((embedFrameworkPhase?.files ?? []).compactMap { $0.file?.nameOrPath })
+ try expect(embeddedFrameworks) == expectedEmbeddedFrameworks
+ }
$0.it("copies files only on install in the Embed Frameworks step") {
let app = Target(
From 0ba3cf588862cc48dc9f221301c5ba6fc0c639c9 Mon Sep 17 00:00:00 2001
From: Benjamin Kindle
Date: Wed, 20 Jan 2021 20:17:40 -0500
Subject: [PATCH 050/284] Readme improvements (#1011)
I'm pretty sure this wording better communicates what you were trying to say
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 76877d7a5..61bfd9f9b 100644
--- a/README.md
+++ b/README.md
@@ -165,7 +165,7 @@ git clone https://github.com/yonaskolb/XcodeGen.git
cd XcodeGen
swift package generate-xcodeproj
```
-This use Swift Project Manager to create an `xcodeproj` file that you can open, edit and run in Xcode, which makes editing any code easier.
+This uses Swift Package Manager to create an `xcodeproj` file that you can open, edit and run in Xcode, which makes editing any code easier.
If you want to pass any required arguments when running in Xcode, you can edit the scheme to include launch arguments.
From 50aedc451192cfed020ece05c837da01320cbe14 Mon Sep 17 00:00:00 2001
From: Joseph Colicchio
Date: Sun, 14 Feb 2021 16:58:16 -0800
Subject: [PATCH 051/284] Feature/Store Kit Configuration (#964)
* Preemptively fix compilation for latest XcodeProj
* Add StoreKitConfiguration to scheme and generator
* Add scheme generator test
* Fix and add tests
* Support StoreKitConfiguration in TargetScheme
* Set default type of `storekit` to `.none`
* Upgrade XcodeProj to 7.15.0
* Create struct for StoreKitConfiguration
* Update tests
* Add storekit configuration to test project
* Update changelog
* Update project spec
* Fix xcodeprojs
* Fix projects
* Capitalize String
* Update CHANGELOG.md
Co-authored-by: Gemma Barlow
* Refactor StoreKitConfiguration init from json
* Change `forWorkspace` to `pathPrefix` and add tests
* Replace StoreKitConfiguration struct with string + option
* Fix tests
* Update project spec
* Fixup changelog
* Add `See Options` to `storeKitConfiguration` in project spec
Co-authored-by: Gemma Barlow
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 3 +
Package.resolved | 8 +--
Sources/ProjectSpec/FileType.swift | 1 +
Sources/ProjectSpec/Scheme.swift | 8 +++
Sources/ProjectSpec/SpecOptions.swift | 10 +++-
Sources/ProjectSpec/TargetScheme.swift | 8 +++
Sources/XcodeGenKit/SchemeGenerator.swift | 10 +++-
.../App_iOS/Configuration.storekit | 29 ++++++++++
.../Project.xcodeproj/project.pbxproj | 2 +
.../xcschemes/App_Scheme.xcscheme | 3 +
.../xcschemes/App_iOS Production.xcscheme | 3 +
.../xcschemes/App_iOS Staging.xcscheme | 3 +
.../xcschemes/App_iOS Test.xcscheme | 3 +
Tests/Fixtures/TestProject/project.yml | 2 +
Tests/PerformanceTests/TestProject.swift | 1 +
Tests/ProjectSpecTests/ProjectSpecTests.swift | 4 +-
Tests/ProjectSpecTests/SpecLoadingTests.swift | 56 ++++++++++++++++++-
.../SchemeGeneratorTests.swift | 29 +++++++---
19 files changed, 165 insertions(+), 19 deletions(-)
create mode 100644 Tests/Fixtures/TestProject/App_iOS/Configuration.storekit
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 79403fe48..2a5b3eed2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
#### Added
- Support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
+- Add `storeKitConfiguration` to allow specifying StoreKit Configuration in Scheme and TargetScheme, supporting either xcodeproj or xcworkspace via `schemePathPrefix` option. [#964](https://github.com/yonaskolb/XcodeGen/pull/964) @jcolicchio
- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
- Add `BuildRule.runOncePerArchitecture` to allow running build rules once per architecture. [#950](https://github.com/yonaskolb/XcodeGen/pull/950) @sascha
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 4cf4f2a16..58ade4d97 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -128,6 +128,7 @@ Note that target names can also be changed by adding a `name` property to a targ
- [ ] **preGenCommand**: **String** - A bash command to run before the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like generating resources files before the project is regenerated.
- [ ] **postGenCommand**: **String** - A bash command to run after the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like `pod install` only if the project is actually regenerated.
- [ ] **useBaseInternationalization**: **Bool** If this is `false` and your project does not include resources located in a **Base.lproj** directory then `Base` will not be included in the projects 'known regions'. The default value is `true`.
+- [ ] **schemePathPrefix**: **String** - A path prefix for relative paths in schemes, such as StoreKitConfiguration. The default is `"../../"`, which is suitable for non-workspace projects. For use in workspaces, use `"../"`.
```yaml
options:
@@ -639,6 +640,7 @@ This is a convenience used to automatically generate schemes for a target based
- [ ] **environmentVariables**: **[[Environment Variable](#environment-variable)]** or **[String:String]** - environment variables for Run, Test and Profile scheme actions. When passing a dictionary, every key-value entry maps to a corresponding variable that is enabled.
- [ ] **preActions**: **[[Execution Action](#execution-action)]** - Scripts that are run *before* the build action
- [ ] **postActions**: **[[Execution Action](#execution-action)]** - Scripts that are run *after* the build action
+- [ ] **storeKitConfiguration**: **String** - specify storekit configuration to use during run. See [Options](#options).
For example, the spec below would create 3 schemes called:
@@ -775,6 +777,7 @@ The different actions share some properties:
- [ ] **simulateLocation**: **[Simulate Location](#simulate-location)** - `run` action can define a simulated location
- [ ] **askForAppToLaunch**: **Bool** - `run` action can define the executable set to ask to launch. This defaults to false.
- [ ] **launchAutomaticallySubstyle**: **String** - `run` action can define the launch automatically substyle ('2' for extensions).
+- [ ] **storeKitConfiguration**: **String** - `run` action can specify a storekit configuration. See [Options](#options).
### Execution Action
diff --git a/Package.resolved b/Package.resolved
index e42136a42..26a8147f3 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -15,8 +15,8 @@
"repositoryURL": "https://github.com/SwiftDocOrg/GraphViz.git",
"state": {
"branch": null,
- "revision": "c4746cb3ff6f5e7c5d5540c40b98555521c3ee43",
- "version": "0.1.3"
+ "revision": "70bebcf4597b9ce33e19816d6bbd4ba9b7bdf038",
+ "version": "0.2.0"
}
},
{
@@ -87,8 +87,8 @@
"repositoryURL": "https://github.com/jpsim/Yams.git",
"state": {
"branch": null,
- "revision": "88caa2e6fffdbef2e91c2022d038576062042907",
- "version": "4.0.0"
+ "revision": "138cf1b701cf825233b92ceac919152d5aba8a3f",
+ "version": "4.0.1"
}
}
]
diff --git a/Sources/ProjectSpec/FileType.swift b/Sources/ProjectSpec/FileType.swift
index bc535a1d2..e26200027 100644
--- a/Sources/ProjectSpec/FileType.swift
+++ b/Sources/ProjectSpec/FileType.swift
@@ -110,5 +110,6 @@ extension FileType {
"xcfilelist": FileType(buildPhase: BuildPhaseSpec.none),
"apns": FileType(buildPhase: BuildPhaseSpec.none),
"pch": FileType(buildPhase: BuildPhaseSpec.none),
+ "storekit": FileType(buildPhase: BuildPhaseSpec.none),
]
}
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index d872129d0..d6481a3ab 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -1,5 +1,6 @@
import Foundation
import JSONUtilities
+import PathKit
import XcodeProj
public typealias BuildType = XCScheme.BuildAction.Entry.BuildFor
@@ -113,6 +114,7 @@ public struct Scheme: Equatable {
public var debugEnabled: Bool
public var simulateLocation: SimulateLocation?
public var executable: String?
+ public var storeKitConfiguration: String?
public var customLLDBInit: String?
public init(
@@ -130,6 +132,7 @@ public struct Scheme: Equatable {
launchAutomaticallySubstyle: String? = nil,
debugEnabled: Bool = debugEnabledDefault,
simulateLocation: SimulateLocation? = nil,
+ storeKitConfiguration: String? = nil,
customLLDBInit: String? = nil
) {
self.config = config
@@ -145,6 +148,7 @@ public struct Scheme: Equatable {
self.launchAutomaticallySubstyle = launchAutomaticallySubstyle
self.debugEnabled = debugEnabled
self.simulateLocation = simulateLocation
+ self.storeKitConfiguration = storeKitConfiguration
self.customLLDBInit = customLLDBInit
}
}
@@ -368,6 +372,7 @@ extension Scheme.Run: JSONObjectConvertible {
region = jsonDictionary.json(atKeyPath: "region")
debugEnabled = jsonDictionary.json(atKeyPath: "debugEnabled") ?? Scheme.Run.debugEnabledDefault
simulateLocation = jsonDictionary.json(atKeyPath: "simulateLocation")
+ storeKitConfiguration = jsonDictionary.json(atKeyPath: "storeKitConfiguration")
executable = jsonDictionary.json(atKeyPath: "executable")
// launchAutomaticallySubstyle is defined as a String in XcodeProj but its value is often
@@ -415,6 +420,9 @@ extension Scheme.Run: JSONEncodable {
if let simulateLocation = simulateLocation {
dict["simulateLocation"] = simulateLocation.toJSONValue()
}
+ if let storeKitConfiguration = storeKitConfiguration {
+ dict["storeKitConfiguration"] = storeKitConfiguration
+ }
if let customLLDBInit = customLLDBInit {
dict["customLLDBInit"] = customLLDBInit
}
diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift
index f44fb2aab..c1f0645d4 100644
--- a/Sources/ProjectSpec/SpecOptions.swift
+++ b/Sources/ProjectSpec/SpecOptions.swift
@@ -10,6 +10,7 @@ public struct SpecOptions: Equatable {
public static let generateEmptyDirectoriesDefault = false
public static let findCarthageFrameworksDefault = false
public static let useBaseInternationalizationDefault = true
+ public static let schemePathPrefixDefault = "../../"
public var minimumXcodeGenVersion: Version?
public var carthageBuildPath: String?
@@ -35,6 +36,7 @@ public struct SpecOptions: Equatable {
public var preGenCommand: String?
public var postGenCommand: String?
public var useBaseInternationalization: Bool
+ public var schemePathPrefix: String
public enum ValidationType: String {
case missingConfigs
@@ -96,7 +98,8 @@ public struct SpecOptions: Equatable {
localPackagesGroup: String? = nil,
preGenCommand: String? = nil,
postGenCommand: String? = nil,
- useBaseInternationalization: Bool = useBaseInternationalizationDefault
+ useBaseInternationalization: Bool = useBaseInternationalizationDefault,
+ schemePathPrefix: String = schemePathPrefixDefault
) {
self.minimumXcodeGenVersion = minimumXcodeGenVersion
self.carthageBuildPath = carthageBuildPath
@@ -122,6 +125,7 @@ public struct SpecOptions: Equatable {
self.preGenCommand = preGenCommand
self.postGenCommand = postGenCommand
self.useBaseInternationalization = useBaseInternationalization
+ self.schemePathPrefix = schemePathPrefix
}
}
@@ -154,6 +158,7 @@ extension SpecOptions: JSONObjectConvertible {
preGenCommand = jsonDictionary.json(atKeyPath: "preGenCommand")
postGenCommand = jsonDictionary.json(atKeyPath: "postGenCommand")
useBaseInternationalization = jsonDictionary.json(atKeyPath: "useBaseInternationalization") ?? SpecOptions.useBaseInternationalizationDefault
+ schemePathPrefix = jsonDictionary.json(atKeyPath: "schemePathPrefix") ?? SpecOptions.schemePathPrefixDefault
if jsonDictionary["fileTypes"] != nil {
fileTypes = try jsonDictionary.json(atKeyPath: "fileTypes")
} else {
@@ -200,6 +205,9 @@ extension SpecOptions: JSONEncodable {
if useBaseInternationalization != SpecOptions.useBaseInternationalizationDefault {
dict["useBaseInternationalization"] = useBaseInternationalization
}
+ if schemePathPrefix != SpecOptions.schemePathPrefixDefault {
+ dict["schemePathPrefix"] = schemePathPrefix
+ }
return dict
}
diff --git a/Sources/ProjectSpec/TargetScheme.swift b/Sources/ProjectSpec/TargetScheme.swift
index ce54f6172..1beedb6a9 100644
--- a/Sources/ProjectSpec/TargetScheme.swift
+++ b/Sources/ProjectSpec/TargetScheme.swift
@@ -11,6 +11,7 @@ public struct TargetScheme: Equatable {
public var testTargets: [Scheme.Test.TestTarget]
public var configVariants: [String]
public var gatherCoverageData: Bool
+ public var storeKitConfiguration: String?
public var language: String?
public var region: String?
public var disableMainThreadChecker: Bool
@@ -25,6 +26,7 @@ public struct TargetScheme: Equatable {
testTargets: [Scheme.Test.TestTarget] = [],
configVariants: [String] = [],
gatherCoverageData: Bool = gatherCoverageDataDefault,
+ storeKitConfiguration: String? = nil,
language: String? = nil,
region: String? = nil,
disableMainThreadChecker: Bool = disableMainThreadCheckerDefault,
@@ -38,6 +40,7 @@ public struct TargetScheme: Equatable {
self.testTargets = testTargets
self.configVariants = configVariants
self.gatherCoverageData = gatherCoverageData
+ self.storeKitConfiguration = storeKitConfiguration
self.language = language
self.region = region
self.disableMainThreadChecker = disableMainThreadChecker
@@ -68,6 +71,7 @@ extension TargetScheme: JSONObjectConvertible {
}
configVariants = jsonDictionary.json(atKeyPath: "configVariants") ?? []
gatherCoverageData = jsonDictionary.json(atKeyPath: "gatherCoverageData") ?? TargetScheme.gatherCoverageDataDefault
+ storeKitConfiguration = jsonDictionary.json(atKeyPath: "storeKitConfiguration")
language = jsonDictionary.json(atKeyPath: "language")
region = jsonDictionary.json(atKeyPath: "region")
disableMainThreadChecker = jsonDictionary.json(atKeyPath: "disableMainThreadChecker") ?? TargetScheme.disableMainThreadCheckerDefault
@@ -95,6 +99,10 @@ extension TargetScheme: JSONEncodable {
dict["gatherCoverageData"] = gatherCoverageData
}
+ if let storeKitConfiguration = storeKitConfiguration {
+ dict["storeKitConfiguration"] = storeKitConfiguration
+ }
+
if disableMainThreadChecker != TargetScheme.disableMainThreadCheckerDefault {
dict["disableMainThreadChecker"] = disableMainThreadChecker
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 161befbc9..2729f88cd 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -235,6 +235,12 @@ public class SchemeGenerator {
locationScenarioReference = XCScheme.LocationScenarioReference(identifier: identifier, referenceType: referenceType.rawValue)
}
+ var storeKitConfigurationFileReference: XCScheme.StoreKitConfigurationFileReference?
+ if let storeKitConfiguration = scheme.run?.storeKitConfiguration {
+ let storeKitConfigurationPath = Path(components: [project.options.schemePathPrefix, storeKitConfiguration]).simplifyingParentDirectoryReferences()
+ storeKitConfigurationFileReference = XCScheme.StoreKitConfigurationFileReference(identifier: storeKitConfigurationPath.string)
+ }
+
let launchAction = XCScheme.LaunchAction(
runnable: shouldExecuteOnLaunch ? runnables.launch : nil,
buildConfiguration: scheme.run?.config ?? defaultDebugConfig.name,
@@ -253,6 +259,7 @@ public class SchemeGenerator {
language: scheme.run?.language,
region: scheme.run?.region,
launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle ?? launchAutomaticallySubstyle(for: schemeTarget),
+ storeKitConfigurationFileReference: storeKitConfigurationFileReference,
customLLDBInitFile: scheme.run?.customLLDBInit
)
@@ -362,7 +369,8 @@ extension Scheme {
disableMainThreadChecker: targetScheme.disableMainThreadChecker,
stopOnEveryMainThreadCheckerIssue: targetScheme.stopOnEveryMainThreadCheckerIssue,
language: targetScheme.language,
- region: targetScheme.region
+ region: targetScheme.region,
+ storeKitConfiguration: targetScheme.storeKitConfiguration
),
test: .init(
config: debugConfig,
diff --git a/Tests/Fixtures/TestProject/App_iOS/Configuration.storekit b/Tests/Fixtures/TestProject/App_iOS/Configuration.storekit
new file mode 100644
index 000000000..aa066b3fe
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_iOS/Configuration.storekit
@@ -0,0 +1,29 @@
+{
+ "products" : [
+ {
+ "displayPrice" : "0.00",
+ "familyShareable" : false,
+ "internalID" : "6D7919A3",
+ "localizations" : [
+ {
+ "description" : "",
+ "displayName" : "",
+ "locale" : "en_US"
+ }
+ ],
+ "productID" : "com.xcodegen.0",
+ "referenceName" : null,
+ "type" : "Consumable"
+ }
+ ],
+ "settings" : {
+
+ },
+ "subscriptionGroups" : [
+
+ ],
+ "version" : {
+ "major" : 1,
+ "minor" : 0
+ }
+}
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 8ba9c0601..964356a92 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -656,6 +656,7 @@
8D88C6BF7355702B74396791 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
93C033648A37D95027845BD3 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
9A87A926D563773658FB87FE /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9D4AB3FCF725428EFB56F542 /* Configuration.storekit */ = {isa = PBXFileReference; path = Configuration.storekit; sourceTree = ""; };
9F27382DD66E26C059E26EFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
A0DC40025AB59B688E758829 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A220DE4EB3CB2E598D034D9D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
@@ -854,6 +855,7 @@
F0D48A913C087D049C8EDDD7 /* App.entitlements */,
7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */,
3797E591F302ECC0AA2FC607 /* Assets.xcassets */,
+ 9D4AB3FCF725428EFB56F542 /* Configuration.storekit */,
C9DDE1B06BCC1CDE0ECF1589 /* Info.plist */,
AAA49985DFFE797EE8416887 /* inputList.xcfilelist */,
CE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */,
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
index df89ce7cd..d9809d0e1 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
@@ -93,6 +93,9 @@
+
+
+
+
+
+
+
+
Date: Mon, 15 Feb 2021 02:43:41 +0100
Subject: [PATCH 052/284] Add Discovered Dependency File (#1012)
* Upgrade XCodeProj to 7.14.0
* Bump to XcodeProj to fork
* Add script discoveredDependencyFile
* Align cfbundle test
* Add changelog mock
* Update Documentation
* Update SPM manifest
* Change property name
* Verify defult dependency file to nil
* Add JSON encodable test
* Add PR number
Co-authored-by: Fernanda Geraissate
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 ++
Sources/ProjectSpec/BuildScript.swift | 10 +++++++++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 3 ++-
.../TestProject/Project.xcodeproj/project.pbxproj | 3 ++-
Tests/Fixtures/TestProject/project.yml | 2 ++
Tests/ProjectSpecTests/ProjectSpecTests.swift | 13 ++++++++++++-
.../XcodeGenKitTests/ProjectGeneratorTests.swift | 15 ++++++++++++---
8 files changed, 42 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2a5b3eed2..d8cdfcc3f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@
- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
- Add `BuildRule.runOncePerArchitecture` to allow running build rules once per architecture. [#950](https://github.com/yonaskolb/XcodeGen/pull/950) @sascha
+- Adds discovered dependency file for a build script [#1012](https://github.com/yonaskolb/XcodeGen/pull/1012) @polac24 @fggeraissate
#### Changed
- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 58ade4d97..573c0b8d9 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -565,6 +565,7 @@ Each script can contain:
- [ ] **showEnvVars**: **Bool** - whether the environment variables accessible to the script show be printed to the build log. Defaults to yes
- [ ] **runOnlyWhenInstalling**: **Bool** - whether the script is only run when installing (`runOnlyForDeploymentPostprocessing`). Defaults to no
- [ ] **basedOnDependencyAnalysis**: **Bool** - whether to skip the script if inputs, context, or outputs haven't changed. Defaults to yes
+- [ ] **discoveredDependencyFile**: **String** - discovered dependency .d file. Defaults to none
Either a **path** or **script** must be defined, the rest are optional.
@@ -586,6 +587,7 @@ targets:
- $(DERIVED_FILE_DIR)/file2
outputFileLists:
- $(SRCROOT)/outputFiles.xcfilelist
+ discoveredDependencyFile: $(DERIVED_FILE_DIR)/target.d
postCompileScripts:
- script: swiftlint
name: Swiftlint
diff --git a/Sources/ProjectSpec/BuildScript.swift b/Sources/ProjectSpec/BuildScript.swift
index 4b7fdc8de..f22211bc4 100644
--- a/Sources/ProjectSpec/BuildScript.swift
+++ b/Sources/ProjectSpec/BuildScript.swift
@@ -16,6 +16,7 @@ public struct BuildScript: Equatable {
public var runOnlyWhenInstalling: Bool
public let showEnvVars: Bool
public let basedOnDependencyAnalysis: Bool
+ public let discoveredDependencyFile: String?
public enum ScriptType: Equatable {
case path(String)
@@ -32,7 +33,8 @@ public struct BuildScript: Equatable {
shell: String? = nil,
runOnlyWhenInstalling: Bool = runOnlyWhenInstallingDefault,
showEnvVars: Bool = showEnvVarsDefault,
- basedOnDependencyAnalysis: Bool = basedOnDependencyAnalysisDefault
+ basedOnDependencyAnalysis: Bool = basedOnDependencyAnalysisDefault,
+ discoveredDependencyFile: String? = nil
) {
self.script = script
self.name = name
@@ -44,6 +46,7 @@ public struct BuildScript: Equatable {
self.runOnlyWhenInstalling = runOnlyWhenInstalling
self.showEnvVars = showEnvVars
self.basedOnDependencyAnalysis = basedOnDependencyAnalysis
+ self.discoveredDependencyFile = discoveredDependencyFile
}
}
@@ -66,6 +69,7 @@ extension BuildScript: JSONObjectConvertible {
runOnlyWhenInstalling = jsonDictionary.json(atKeyPath: "runOnlyWhenInstalling") ?? BuildScript.runOnlyWhenInstallingDefault
showEnvVars = jsonDictionary.json(atKeyPath: "showEnvVars") ?? BuildScript.showEnvVarsDefault
basedOnDependencyAnalysis = jsonDictionary.json(atKeyPath: "basedOnDependencyAnalysis") ?? BuildScript.basedOnDependencyAnalysisDefault
+ discoveredDependencyFile = jsonDictionary.json(atKeyPath: "discoveredDependencyFile")
}
}
@@ -96,6 +100,10 @@ extension BuildScript: JSONEncodable {
dict["script"] = string
}
+ if let discoveredDependencyFile = discoveredDependencyFile {
+ dict["discoveredDependencyFile"] = discoveredDependencyFile
+ }
+
return dict
}
}
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 5be56ccec..933d3e463 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -479,7 +479,8 @@ public class PBXProjGenerator {
shellScript: shellScript,
runOnlyForDeploymentPostprocessing: buildScript.runOnlyWhenInstalling,
showEnvVarsInLog: buildScript.showEnvVars,
- alwaysOutOfDate: !buildScript.basedOnDependencyAnalysis
+ alwaysOutOfDate: !buildScript.basedOnDependencyAnalysis,
+ dependencyFile: buildScript.discoveredDependencyFile
)
return addObject(shellScriptPhase)
}
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 964356a92..594fdf965 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -2239,6 +2239,7 @@
CBE633966E8F3819F15270A3 /* MyScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
+ dependencyFile = "$(DERIVED_FILE_DIR)/target.d";
files = (
);
inputFileListPaths = (
@@ -2254,7 +2255,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "echo \"You ran a script!\"\n";
+ shellScript = "echo \"You ran a script!\"\ntouch \"${DERIVED_FILE_DIR}/target.d\"\n";
};
CF3AABFD4A48983B322677DA /* MyScript */ = {
isa = PBXShellScriptBuildPhase;
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 688657f1c..841d1bc86 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -149,10 +149,12 @@ targets:
- name: MyScript
script: |
echo "You ran a script!"
+ touch "${DERIVED_FILE_DIR}/target.d"
inputFileLists:
- App_iOS/inputList.xcfilelist
outputFileLists:
- App_iOS/outputList.xcfilelist
+ discoveredDependencyFile: $(DERIVED_FILE_DIR)/target.d
EntitledApp:
type: application
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index c06b75465..7284a799d 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -409,7 +409,18 @@ class ProjectSpecTests: XCTestCase {
shell: "/bin/bash",
runOnlyWhenInstalling: true,
showEnvVars: true,
- basedOnDependencyAnalysis: false)],
+ basedOnDependencyAnalysis: false),
+ BuildScript(script: .path("cmd.sh"),
+ name: "Dependency script",
+ inputFiles: ["foo"],
+ outputFiles: ["bar"],
+ inputFileLists: ["foo.xcfilelist"],
+ outputFileLists: ["bar.xcfilelist"],
+ shell: "/bin/bash",
+ runOnlyWhenInstalling: true,
+ showEnvVars: true,
+ basedOnDependencyAnalysis: true,
+ discoveredDependencyFile: "dep.d")],
buildRules: [BuildRule(fileType: .pattern("*.xcassets"),
action: .script("pre_process_swift.py"),
name: "My Build Rule",
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 0a189ea5a..7324374cb 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -1145,20 +1145,29 @@ class ProjectGeneratorTests: XCTestCase {
var scriptSpec = project
scriptSpec.targets[0].preBuildScripts = [BuildScript(script: .script("script1"))]
scriptSpec.targets[0].postCompileScripts = [BuildScript(script: .script("script2"))]
- scriptSpec.targets[0].postBuildScripts = [BuildScript(script: .script("script3"))]
+ scriptSpec.targets[0].postBuildScripts = [
+ BuildScript(script: .script("script3")),
+ BuildScript(script: .script("script4"), discoveredDependencyFile: "$(DERIVED_FILE_DIR)/target.d")
+ ]
let pbxProject = try scriptSpec.generatePbxProj()
- let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.buildPhases.count >= 3 }))
+ let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.buildPhases.count >= 4 }))
let buildPhases = nativeTarget.buildPhases
let scripts = pbxProject.shellScriptBuildPhases
- try expect(scripts.count) == 3
+ try expect(scripts.count) == 4
let script1 = scripts.first { $0.shellScript == "script1" }!
let script2 = scripts.first { $0.shellScript == "script2" }!
let script3 = scripts.first { $0.shellScript == "script3" }!
+ let script4 = scripts.first { $0.shellScript == "script4" }!
try expect(buildPhases.contains(script1)) == true
try expect(buildPhases.contains(script2)) == true
try expect(buildPhases.contains(script3)) == true
+ try expect(buildPhases.contains(script4)) == true
+ try expect(script1.dependencyFile).beNil()
+ try expect(script2.dependencyFile).beNil()
+ try expect(script3.dependencyFile).beNil()
+ try expect(script4.dependencyFile) == "$(DERIVED_FILE_DIR)/target.d"
}
$0.it("generates targets with cylical dependencies") {
From ae186edb6829b4558330184a93711680afbef6d8 Mon Sep 17 00:00:00 2001
From: Joseph Colicchio
Date: Mon, 15 Feb 2021 14:35:47 -0800
Subject: [PATCH 053/284] Bugfix/SimulateLocation Fix (#973)
* Preemptively fix compilation for latest XcodeProj
* Add StoreKitConfiguration to scheme and generator
* Add scheme generator test
* Fix and add tests
* Support StoreKitConfiguration in TargetScheme
* Set default type of `storekit` to `.none`
* Upgrade XcodeProj to 7.15.0
* Create struct for StoreKitConfiguration
* Update tests
* Add storekit configuration to test project
* Update changelog
* Update project spec
* Fix xcodeprojs
* Fix projects
* Capitalize String
* Update CHANGELOG.md
Co-authored-by: Gemma Barlow
* Refactor StoreKitConfiguration init from json
* Change `forWorkspace` to `pathPrefix` and add tests
* Replace StoreKitConfiguration struct with string + option
* Fix tests
* Update project spec
* Fixup changelog
* Add `See Options` to `storeKitConfiguration` in project spec
* Make `simulateLocation` respect `schemePathPrefix`
* Update docs
Co-authored-by: Gemma Barlow
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 ++
Sources/XcodeGenKit/SchemeGenerator.swift | 2 +-
Tests/XcodeGenKitTests/SchemeGeneratorTests.swift | 8 ++++++--
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8cdfcc3f..6350eb875 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@
#### Changed
- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
- **Breaking**: `workingDirectory` of included legacy targets is now made relative to including project [#981](https://github.com/yonaskolb/XcodeGen/pull/981) @jcolicchio
+- **Breaking**: Make `simulateLocation` respect `schemePathPrefix` option. [#973](https://github.com/yonaskolb/XcodeGen/pull/973) @jcolicchio
#### Fixed
- Fixed error message output for `minimumXcodeGenVersion`. [#967](https://github.com/yonaskolb/XcodeGen/pull/967) @joshwalker
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 573c0b8d9..ec71f8177 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -840,6 +840,8 @@ targets:
- location.gpx
```
+Note that the path the gpx file will be prefixed according to the `schemePathPrefix` option in order to support both `.xcodeproj` and `.xcworkspace` setups. See [Options](#options).
+
### Environment Variable
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 2729f88cd..c4c36ee7a 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -228,7 +228,7 @@ public class SchemeGenerator {
var locationScenarioReference: XCScheme.LocationScenarioReference?
if let simulateLocation = scheme.run?.simulateLocation, var identifier = simulateLocation.defaultLocation, let referenceType = simulateLocation.referenceType {
if referenceType == .gpx {
- var path = Path("../\(identifier)")
+ var path = Path(components: [project.options.schemePathPrefix, identifier])
path = path.simplifyingParentDirectoryReferences()
identifier = path.string
}
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 2386338fc..a8abb85ab 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -164,7 +164,7 @@ class SchemeGeneratorTests: XCTestCase {
let scheme = Scheme(
name: "EnvironmentVariablesScheme",
build: Scheme.Build(targets: [buildTarget]),
- run: Scheme.Run(config: "Debug", environmentVariables: runVariables, storeKitConfiguration: "Configuration.storekit"),
+ run: Scheme.Run(config: "Debug", environmentVariables: runVariables, simulateLocation: .init(allow: true, defaultLocation: "File.gpx"), storeKitConfiguration: "Configuration.storekit"),
test: Scheme.Test(config: "Debug"),
profile: Scheme.Profile(config: "Debug")
)
@@ -184,6 +184,8 @@ class SchemeGeneratorTests: XCTestCase {
).beTrue()
try expect(xcscheme.launchAction?.environmentVariables) == runVariables
try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == "../Configuration.storekit"
+ try expect(xcscheme.launchAction?.locationScenarioReference?.referenceType) == Scheme.SimulateLocation.ReferenceType.gpx.rawValue
+ try expect(xcscheme.launchAction?.locationScenarioReference?.identifier) == "../File.gpx"
try expect(xcscheme.testAction?.environmentVariables).to.beNil()
try expect(xcscheme.profileAction?.environmentVariables).to.beNil()
}
@@ -238,7 +240,7 @@ class SchemeGeneratorTests: XCTestCase {
let scheme = Scheme(
name: "TestScheme",
build: Scheme.Build(targets: [buildTarget]),
- run: Scheme.Run(config: "Debug", debugEnabled: false, storeKitConfiguration: "Configuration.storekit")
+ run: Scheme.Run(config: "Debug", debugEnabled: false, simulateLocation: .init(allow: true, defaultLocation: "File.gpx"), storeKitConfiguration: "Configuration.storekit")
)
let project = Project(
name: "test",
@@ -252,6 +254,8 @@ class SchemeGeneratorTests: XCTestCase {
try expect(xcscheme.launchAction?.selectedDebuggerIdentifier) == ""
try expect(xcscheme.launchAction?.selectedLauncherIdentifier) == "Xcode.IDEFoundation.Launcher.PosixSpawn"
try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == "../../Configuration.storekit"
+ try expect(xcscheme.launchAction?.locationScenarioReference?.referenceType) == Scheme.SimulateLocation.ReferenceType.gpx.rawValue
+ try expect(xcscheme.launchAction?.locationScenarioReference?.identifier) == "../../File.gpx"
}
$0.it("generate scheme without debugger - test") {
From 17b40a328889b3abca05dbee98598c1fec042116 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Mon, 22 Feb 2021 21:09:59 +1100
Subject: [PATCH 054/284] Update to 2.19.0
---
CHANGELOG.md | 16 ++++++++++------
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6350eb875..e45896c47 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,14 +2,16 @@
## Next Version
+## 2.19.0
+
#### Added
-- Support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
-- Add `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
-- Add `storeKitConfiguration` to allow specifying StoreKit Configuration in Scheme and TargetScheme, supporting either xcodeproj or xcworkspace via `schemePathPrefix` option. [#964](https://github.com/yonaskolb/XcodeGen/pull/964) @jcolicchio
-- More detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
+- Added support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. [#988](https://github.com/yonaskolb/XcodeGen/pull/988) @elliottwilliams
+- Added `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. [#961](https://github.com/yonaskolb/XcodeGen/pull/961) @liamnichols
+- Added `storeKitConfiguration` to allow specifying StoreKit Configuration in Scheme and TargetScheme, supporting either xcodeproj or xcworkspace via `schemePathPrefix` option. [#964](https://github.com/yonaskolb/XcodeGen/pull/964) @jcolicchio
+- Added more detailed error message with method arguments. [#990](https://github.com/yonaskolb/XcodeGen/pull/990) @bannzai
- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. [#992](https://github.com/yonaskolb/XcodeGen/pull/992) @myihsan
-- Add `BuildRule.runOncePerArchitecture` to allow running build rules once per architecture. [#950](https://github.com/yonaskolb/XcodeGen/pull/950) @sascha
-- Adds discovered dependency file for a build script [#1012](https://github.com/yonaskolb/XcodeGen/pull/1012) @polac24 @fggeraissate
+- Added `BuildRule.runOncePerArchitecture` to allow running build rules once per architecture. [#950](https://github.com/yonaskolb/XcodeGen/pull/950) @sascha
+- Added discovered dependency file for a build script [#1012](https://github.com/yonaskolb/XcodeGen/pull/1012) @polac24 @fggeraissate
#### Changed
- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase [#945](https://github.com/yonaskolb/XcodeGen/pull/945) @anivaros
@@ -25,6 +27,8 @@
#### Internal
- Updated to Yams 4.0.0 [#984](https://github.com/yonaskolb/XcodeGen/pull/984) @swiftty
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.18.0...2.19.0)
+
## 2.18.0
#### Added
diff --git a/Makefile b/Makefile
index 83e2c99a8..26afb1c30 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.18.0
+VERSION = 2.19.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 61bfd9f9b..c39ca8a16 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.18.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.19.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index de2b414c6..6e14e06f1 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.18.0")
+let version = Version("2.19.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From 05ea968f703792084cc70e5a3ddef5dfcc039f0a Mon Sep 17 00:00:00 2001
From: Joseph Colicchio
Date: Tue, 23 Feb 2021 13:33:54 -0800
Subject: [PATCH 055/284] Bugfix/StoreKitConfiguration BuildPhase (#1026)
* Copy storekit to bundle resources by default
* Fix tests
* Update changelog
---
CHANGELOG.md | 3 +++
Sources/ProjectSpec/FileType.swift | 2 +-
Tests/Fixtures/TestProject/project.yml | 2 ++
Tests/XcodeGenKitTests/SourceGeneratorTests.swift | 2 ++
4 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e45896c47..9c043ac7c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+#### Fixed
+- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
+
## 2.19.0
#### Added
diff --git a/Sources/ProjectSpec/FileType.swift b/Sources/ProjectSpec/FileType.swift
index e26200027..732f8b7cb 100644
--- a/Sources/ProjectSpec/FileType.swift
+++ b/Sources/ProjectSpec/FileType.swift
@@ -71,6 +71,7 @@ extension FileType {
// resources
"bundle": FileType(buildPhase: .resources),
"xcassets": FileType(buildPhase: .resources),
+ "storekit": FileType(buildPhase: .resources),
// sources
"swift": FileType(buildPhase: .sources),
@@ -110,6 +111,5 @@ extension FileType {
"xcfilelist": FileType(buildPhase: BuildPhaseSpec.none),
"apns": FileType(buildPhase: BuildPhaseSpec.none),
"pch": FileType(buildPhase: BuildPhaseSpec.none),
- "storekit": FileType(buildPhase: BuildPhaseSpec.none),
]
}
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 841d1bc86..a98f72d6a 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -21,6 +21,7 @@ fileGroups:
- FileGroup
- SomeFile
- Utilities
+ - App_iOS/Configuration.storekit
projectReferences:
AnotherProject:
path: ./AnotherProject/AnotherProject.xcodeproj
@@ -76,6 +77,7 @@ targets:
- "**/excluded-file"
- "excluded-file"
- "Model.xcmappingmodel"
+ - "Configuration.storekit"
- path: App_iOS
name: App
includes:
diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
index e06112330..90a84ab49 100644
--- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
@@ -591,6 +591,7 @@ class SourceGeneratorTests: XCTestCase {
- file.mlmodel
- Info.plist
- Intent.intentdefinition
+ - Configuration.storekit
- Settings.bundle:
- en.lproj:
- Root.strings
@@ -646,6 +647,7 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFile(paths: ["C", "file.metal"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["C", "file.mlmodel"], buildPhase: .sources)
try pbxProj.expectFile(paths: ["C", "Intent.intentdefinition"], buildPhase: .sources)
+ try pbxProj.expectFile(paths: ["C", "Configuration.storekit"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["C", "Settings.bundle"], buildPhase: .resources)
try pbxProj.expectFileMissing(paths: ["C", "Settings.bundle", "en.lproj"])
try pbxProj.expectFileMissing(paths: ["C", "Settings.bundle", "en.lproj", "Root.strings"])
From e8237903efa4d89ccdc1125d53466ac73b0c8b3e Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Wed, 24 Feb 2021 21:23:21 +1100
Subject: [PATCH 056/284] add github helper for swift package url (#1029)
---
CHANGELOG.md | 3 +++
Docs/ProjectSpec.md | 9 ++++-----
Sources/ProjectSpec/SwiftPackage.swift | 17 +++++++++++++++--
Tests/ProjectSpecTests/SpecLoadingTests.swift | 2 ++
4 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9c043ac7c..257b2713e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+#### Added
+- Allow specifying a `github` name like `JohnSundell/Ink` instead of a full `url` for Swift Packages [#1029](https://github.com/yonaskolb/XcodeGen/pull/1029) @yonaskolb
+
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index ec71f8177..47127ade9 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -936,6 +936,7 @@ Swift packages are defined at a project level, and then linked to individual tar
- `minVersion: 1.0.0, maxVersion: 1.2.9`
- `branch: master`
- `revision: xxxxxx`
+- [ ] **github** : **String**- this is an optional helper you can use for github repos. Instead of specifying the full url in `url` you can just specify the github org and repo
### Local Package
@@ -946,13 +947,11 @@ packages:
Yams:
url: https://github.com/jpsim/Yams
from: 2.0.0
+ Yams:
+ github: JohnSundell/Ink
+ from: 0.5.0
RxClient:
path: ../RxClient
-targets:
- App:
- dependencies:
- - package: Yams
- - package: RxClient
```
## Project Reference
diff --git a/Sources/ProjectSpec/SwiftPackage.swift b/Sources/ProjectSpec/SwiftPackage.swift
index 447d5dfa3..254882323 100644
--- a/Sources/ProjectSpec/SwiftPackage.swift
+++ b/Sources/ProjectSpec/SwiftPackage.swift
@@ -7,6 +7,8 @@ public enum SwiftPackage: Equatable {
public typealias VersionRequirement = XCRemoteSwiftPackageReference.VersionRequirement
+ static let githubPrefix = "https://github.com/"
+
case remote(url: String, versionRequirement: VersionRequirement)
case local(path: String)
@@ -26,7 +28,14 @@ extension SwiftPackage: JSONObjectConvertible {
} else {
let versionRequirement: VersionRequirement = try VersionRequirement(jsonDictionary: jsonDictionary)
try Self.validateVersion(versionRequirement: versionRequirement)
- self = .remote(url: try jsonDictionary.json(atKeyPath: "url"), versionRequirement: versionRequirement)
+ let url: String
+ if jsonDictionary["github"] != nil {
+ let github: String = try jsonDictionary.json(atKeyPath: "github")
+ url = "\(Self.githubPrefix)\(github)"
+ } else {
+ url = try jsonDictionary.json(atKeyPath: "url")
+ }
+ self = .remote(url: url, versionRequirement: versionRequirement)
}
}
@@ -58,7 +67,11 @@ extension SwiftPackage: JSONEncodable {
var dictionary: JSONDictionary = [:]
switch self {
case .remote(let url, let versionRequirement):
- dictionary["url"] = url
+ if url.hasPrefix(Self.githubPrefix) {
+ dictionary["github"] = url.replacingOccurrences(of: Self.githubPrefix, with: "")
+ } else {
+ dictionary["url"] = url
+ }
switch versionRequirement {
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 710fe7701..53175130e 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -1175,6 +1175,7 @@ class SpecLoadingTests: XCTestCase {
"package7": .remote(url: "package.git", versionRequirement: .exact("1.2.2")),
"package8": .remote(url: "package.git", versionRequirement: .upToNextMajorVersion("4.0.0-beta.5")),
"package9": .local(path: "package/package"),
+ "package10": .remote(url: "https://github.com/yonaskolb/XcodeGen", versionRequirement: .exact("1.2.2")),
"XcodeGen": .local(path: "../XcodeGen"),
], options: .init(localPackagesGroup: "MyPackages"))
@@ -1193,6 +1194,7 @@ class SpecLoadingTests: XCTestCase {
"package7": ["url": "package.git", "version": "1.2.2"],
"package8": ["url": "package.git", "majorVersion": "4.0.0-beta.5"],
"package9": ["path": "package/package"],
+ "package10": ["github": "yonaskolb/XcodeGen", "exactVersion": "1.2.2"],
],
"localPackages": ["../XcodeGen"],
]
From b8b457abdb29681b7692cf4148c299e213445d8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thi=20Do=C3=A3n?=
Date: Thu, 25 Feb 2021 11:51:50 +0900
Subject: [PATCH 057/284] Build universal binaries for release (#1024)
* Build universal binaries for release
Closes https://github.com/yonaskolb/XcodeGen/issues/994.
* Add a changelog entry for 'Build universal binaries for release'
---
CHANGELOG.md | 3 +++
Makefile | 5 +++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 257b2713e..170b5170c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,9 @@
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
+#### Internal
+- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
+
## 2.19.0
#### Added
diff --git a/Makefile b/Makefile
index 26afb1c30..846649f0b 100644
--- a/Makefile
+++ b/Makefile
@@ -9,17 +9,18 @@ CURRENT_PATH = $(PWD)
REPO = https://github.com/yonaskolb/$(TOOL_NAME)
RELEASE_TAR = $(REPO)/archive/$(VERSION).tar.gz
SHA = $(shell curl -L -s $(RELEASE_TAR) | shasum -a 256 | sed 's/ .*//')
+SWIFT_BUILD_FLAGS = --disable-sandbox -c release --arch arm64 --arch x86_64
.PHONY: install build uninstall format_code brew release
install: build
mkdir -p $(PREFIX)/bin
- cp -f .build/release/$(EXECUTABLE_NAME) $(INSTALL_PATH)
+ cp -f $(shell swift build $(SWIFT_BUILD_FLAGS) --show-bin-path)/$(EXECUTABLE_NAME) $(INSTALL_PATH)
mkdir -p $(SHARE_PATH)
cp -R $(CURRENT_PATH)/SettingPresets $(SHARE_PATH)/SettingPresets
build:
- swift build --disable-sandbox -c release
+ swift build $(SWIFT_BUILD_FLAGS)
uninstall:
rm -f $(INSTALL_PATH)
From f550d016789862c07e21346e52ddfa286acf6f52 Mon Sep 17 00:00:00 2001
From: "freddi(Yuki Aki)"
Date: Wed, 17 Mar 2021 16:10:04 +0900
Subject: [PATCH 058/284] Support `askForAppToLaunch` on profile scheme (#1035)
* add askForAppToLaunch to profile scheme
* add test
* add description for askForAppToLaunch
* add Change Log for askForAppToLaunch
* Update Docs/ProjectSpec.md
---
CHANGELOG.md | 2 ++
Docs/ProjectSpec.md | 2 +-
Sources/ProjectSpec/Scheme.swift | 10 +++++++++-
Sources/XcodeGenKit/SchemeGenerator.swift | 1 +
Tests/XcodeGenKitTests/SchemeGeneratorTests.swift | 4 +++-
5 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 170b5170c..007cfb6dc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,8 @@
#### Added
- Allow specifying a `github` name like `JohnSundell/Ink` instead of a full `url` for Swift Packages [#1029](https://github.com/yonaskolb/XcodeGen/pull/1029) @yonaskolb
+- Added `askForAppToLaunch` for `profile` in `schemes` [#1029](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
+
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 47127ade9..72504ec7a 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -777,7 +777,7 @@ The different actions share some properties:
- [ ] **region**: **String** - `run` and `test` actions can define a language that is used for Application Region
- [ ] **debugEnabled**: **Bool** - `run` and `test` actions can define a whether debugger should be used. This defaults to true.
- [ ] **simulateLocation**: **[Simulate Location](#simulate-location)** - `run` action can define a simulated location
-- [ ] **askForAppToLaunch**: **Bool** - `run` action can define the executable set to ask to launch. This defaults to false.
+- [ ] **askForAppToLaunch**: **Bool** - `run` and `profile` actions can define the executable set to ask to launch. This defaults to false.
- [ ] **launchAutomaticallySubstyle**: **String** - `run` action can define the launch automatically substyle ('2' for extensions).
- [ ] **storeKitConfiguration**: **String** - `run` action can specify a storekit configuration. See [Options](#options).
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index d6481a3ab..4ec5fbb71 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -260,18 +260,22 @@ public struct Scheme: Equatable {
public var preActions: [ExecutionAction]
public var postActions: [ExecutionAction]
public var environmentVariables: [XCScheme.EnvironmentVariable]
+ public var askForAppToLaunch: Bool?
+
public init(
config: String,
commandLineArguments: [String: Bool] = [:],
preActions: [ExecutionAction] = [],
postActions: [ExecutionAction] = [],
- environmentVariables: [XCScheme.EnvironmentVariable] = []
+ environmentVariables: [XCScheme.EnvironmentVariable] = [],
+ askForAppToLaunch: Bool? = nil
) {
self.config = config
self.commandLineArguments = commandLineArguments
self.preActions = preActions
self.postActions = postActions
self.environmentVariables = environmentVariables
+ self.askForAppToLaunch = askForAppToLaunch
}
public var shouldUseLaunchSchemeArgsEnv: Bool {
@@ -539,6 +543,9 @@ extension Scheme.Profile: JSONObjectConvertible {
preActions = jsonDictionary.json(atKeyPath: "preActions") ?? []
postActions = jsonDictionary.json(atKeyPath: "postActions") ?? []
environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)
+ if let askLaunch: Bool = jsonDictionary.json(atKeyPath: "askForAppToLaunch") {
+ askForAppToLaunch = askLaunch
+ }
}
}
@@ -550,6 +557,7 @@ extension Scheme.Profile: JSONEncodable {
"postActions": postActions.map { $0.toJSONValue() },
"environmentVariables": environmentVariables.map { $0.toJSONValue() },
"config": config,
+ "askForAppToLaunch": askForAppToLaunch,
] as [String: Any?]
}
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index c4c36ee7a..f7741bb21 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -269,6 +269,7 @@ public class SchemeGenerator {
preActions: scheme.profile?.preActions.map(getExecutionAction) ?? [],
postActions: scheme.profile?.postActions.map(getExecutionAction) ?? [],
shouldUseLaunchSchemeArgsEnv: scheme.profile?.shouldUseLaunchSchemeArgsEnv ?? true,
+ askForAppToLaunch: scheme.profile?.askForAppToLaunch,
commandlineArguments: profileCommandLineArgs,
environmentVariables: profileVariables
)
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index a8abb85ab..903fcc08c 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -53,7 +53,8 @@ class SchemeGeneratorTests: XCTestCase {
name: "MyScheme",
build: Scheme.Build(targets: [buildTarget], preActions: [preAction]),
run: Scheme.Run(config: "Debug", askForAppToLaunch: true, launchAutomaticallySubstyle: "2", simulateLocation: simulateLocation, storeKitConfiguration: storeKitConfiguration, customLLDBInit: "/sample/.lldbinit"),
- test: Scheme.Test(config: "Debug", customLLDBInit: "/test/.lldbinit")
+ test: Scheme.Test(config: "Debug", customLLDBInit: "/test/.lldbinit"),
+ profile: Scheme.Profile(config: "Release", askForAppToLaunch: true)
)
let project = Project(
name: "test",
@@ -98,6 +99,7 @@ class SchemeGeneratorTests: XCTestCase {
try expect(xcscheme.testAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger
try expect(xcscheme.launchAction?.askForAppToLaunch) == true
+ try expect(xcscheme.profileAction?.askForAppToLaunch) == true
try expect(xcscheme.launchAction?.launchAutomaticallySubstyle) == "2"
try expect(xcscheme.launchAction?.allowLocationSimulation) == true
try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == "../Configuration.storekit"
From cf886817492cafb68610ffd44424bd0d7434d384 Mon Sep 17 00:00:00 2001
From: "freddi(Yuki Aki)"
Date: Sun, 21 Mar 2021 18:02:01 +0900
Subject: [PATCH 059/284] Support `macroExpansion` on run scheme (#1036)
* allow to specify macroExpansion on schemes
* fix json parsing on macroExpansion
* set macroExpansion only launch scheme
* add test for macroExpansion
* add macroExpansion description
* add macroExpansion to Change Log
* Update CHANGELOG.md
* add App_Extension scheme for macroExpansion
* change example of macroExpansion in Fixtures project
* fix to keep back to keep back compatibility as possible
* Apply suggestions from code review
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 4 +--
Docs/ProjectSpec.md | 1 +
Sources/ProjectSpec/Scheme.swift | 7 +++-
Sources/XcodeGenKit/SchemeGenerator.swift | 10 +++++-
.../xcschemes/App_Scheme.xcscheme | 9 ++++++
Tests/Fixtures/TestProject/project.yml | 1 +
.../SchemeGeneratorTests.swift | 32 +++++++++++++++++++
7 files changed, 60 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 007cfb6dc..8959596de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,8 +4,8 @@
#### Added
- Allow specifying a `github` name like `JohnSundell/Ink` instead of a full `url` for Swift Packages [#1029](https://github.com/yonaskolb/XcodeGen/pull/1029) @yonaskolb
-- Added `askForAppToLaunch` for `profile` in `schemes` [#1029](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
-
+- Added `macroExpansion` for `run` in `schemes` [#1036](https://github.com/yonaskolb/XcodeGen/pull/1036) @freddi-kit
+- Added `askForAppToLaunch` for `profile` in `schemes` [#1035](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 72504ec7a..3acd95d82 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -780,6 +780,7 @@ The different actions share some properties:
- [ ] **askForAppToLaunch**: **Bool** - `run` and `profile` actions can define the executable set to ask to launch. This defaults to false.
- [ ] **launchAutomaticallySubstyle**: **String** - `run` action can define the launch automatically substyle ('2' for extensions).
- [ ] **storeKitConfiguration**: **String** - `run` action can specify a storekit configuration. See [Options](#options).
+- [ ] **macroExpansion**: **String** - `run` action can define the macro expansion from other target. This defaults to nil.
### Execution Action
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index 4ec5fbb71..16d3c19d6 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -116,6 +116,7 @@ public struct Scheme: Equatable {
public var executable: String?
public var storeKitConfiguration: String?
public var customLLDBInit: String?
+ public var macroExpansion: String?
public init(
config: String,
@@ -133,7 +134,8 @@ public struct Scheme: Equatable {
debugEnabled: Bool = debugEnabledDefault,
simulateLocation: SimulateLocation? = nil,
storeKitConfiguration: String? = nil,
- customLLDBInit: String? = nil
+ customLLDBInit: String? = nil,
+ macroExpansion: String? = nil
) {
self.config = config
self.commandLineArguments = commandLineArguments
@@ -150,6 +152,7 @@ public struct Scheme: Equatable {
self.simulateLocation = simulateLocation
self.storeKitConfiguration = storeKitConfiguration
self.customLLDBInit = customLLDBInit
+ self.macroExpansion = macroExpansion
}
}
@@ -391,6 +394,7 @@ extension Scheme.Run: JSONObjectConvertible {
askForAppToLaunch = askLaunch
}
customLLDBInit = jsonDictionary.json(atKeyPath: "customLLDBInit")
+ macroExpansion = jsonDictionary.json(atKeyPath: "macroExpansion")
}
}
@@ -407,6 +411,7 @@ extension Scheme.Run: JSONEncodable {
"askForAppToLaunch": askForAppToLaunch,
"launchAutomaticallySubstyle": launchAutomaticallySubstyle,
"executable": executable,
+ "macroExpansion": macroExpansion
]
if disableMainThreadChecker != Scheme.Run.disableMainThreadCheckerDefault {
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index f7741bb21..562479a29 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -241,12 +241,20 @@ public class SchemeGenerator {
storeKitConfigurationFileReference = XCScheme.StoreKitConfigurationFileReference(identifier: storeKitConfigurationPath.string)
}
+ let macroExpansion: XCScheme.BuildableReference?
+ if let macroExpansionName = scheme.run?.macroExpansion,
+ let resolvedMacroExpansion = buildActionEntries.first(where: { $0.buildableReference.blueprintName == macroExpansionName })?.buildableReference {
+ macroExpansion = resolvedMacroExpansion
+ } else {
+ macroExpansion = shouldExecuteOnLaunch ? nil : buildableReference
+ }
+
let launchAction = XCScheme.LaunchAction(
runnable: shouldExecuteOnLaunch ? runnables.launch : nil,
buildConfiguration: scheme.run?.config ?? defaultDebugConfig.name,
preActions: scheme.run?.preActions.map(getExecutionAction) ?? [],
postActions: scheme.run?.postActions.map(getExecutionAction) ?? [],
- macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference,
+ macroExpansion: macroExpansion,
selectedDebuggerIdentifier: selectedDebuggerIdentifier(for: schemeTarget, run: scheme.run),
selectedLauncherIdentifier: selectedLauncherIdentifier(for: schemeTarget, run: scheme.run),
askForAppToLaunch: scheme.run?.askForAppToLaunch,
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
index d9809d0e1..49adf5501 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
@@ -91,6 +91,15 @@
identifier = "Honolulu, HI, USA"
referenceType = "1">
+
+
+
+
Date: Wed, 31 Mar 2021 22:57:42 +0100
Subject: [PATCH 060/284] Set error message for missing build targets in scheme
(#1040)
* Set error message for missing build targets in scheme
The current behavior means it just crashes due to trying to force unwrap
a nil optional.
Note: A build target shouldn't really be needed, but this is just a
quick fix to get things moving again.
* Update changelog
---
CHANGELOG.md | 1 +
Sources/XcodeGenKit/SchemeGenerator.swift | 8 +++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8959596de..4cd65607a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
+- Fixed bug where schemes without a build target would crash instead of displaying an error [#1040](https://github.com/yonaskolb/XcodeGen/pull/1040) @dalemyers
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 562479a29..d3729e86e 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -165,7 +165,10 @@ public class SchemeGenerator {
if let targetName = scheme.run?.executable {
schemeTarget = project.getTarget(targetName)
} else {
- let name = scheme.build.targets.first { $0.buildTypes.contains(.running) }?.target.name ?? scheme.build.targets.first!.target.name
+ guard let firstTarget = scheme.build.targets.first else {
+ throw SchemeGenerationError.missingBuildTargets(scheme.name)
+ }
+ let name = scheme.build.targets.first { $0.buildTypes.contains(.running) }?.target.name ?? firstTarget.target.name
schemeTarget = target ?? project.getTarget(name)
}
@@ -350,6 +353,7 @@ enum SchemeGenerationError: Error, CustomStringConvertible {
case missingTarget(TargetReference, projectPath: String)
case missingProject(String)
+ case missingBuildTargets(String)
var description: String {
switch self {
@@ -357,6 +361,8 @@ enum SchemeGenerationError: Error, CustomStringConvertible {
return "Unable to find target named \"\(target)\" in \"\(projectPath)\""
case .missingProject(let project):
return "Unable to find project reference named \"\(project)\" in project.yml"
+ case .missingBuildTargets(let name):
+ return "Unable to find at least one build target in scheme \"\(name)\""
}
}
}
From 1b57ba5c75c08c6e7fc95e8b8358e04092bf0d9d Mon Sep 17 00:00:00 2001
From: Liam Nichols
Date: Thu, 8 Apr 2021 07:38:21 +0200
Subject: [PATCH 061/284] Improve INFOPLIST_FILE handling to only omit used
Info.plist's from Copy Bundle Resources Build Phase (#1027)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Update TestProject Fixture to include GoogleService-Info.plist resource bsaed on 2.18.0 generator
* Update TestProject fixture to include an Info.plist file named 'App-Info.plist' to simulate scenario in #945
* Resolve INFOPLIST_FILE values upfront ahead of resolving all source files for a target
* fixup! Resolve INFOPLIST_FILE values upfront ahead of resolving all source files for a target
* fixup! Resolve INFOPLIST_FILE values upfront ahead of resolving all source files for a target
* Refactor SourceGenerator to remove some redundant arguments on internal methods when generating source files in a target
* Update SourceGenerator to accept '[Path: BuildPhaseSpec]' of preferred build phases in order to prioritise over 'default' value. Remove explicit Info.plist check from SourceGenerator. Update PBXProjGenerator to inject hash of build phases for resolved INFOPLIST_FILE values. Update SourceGeneratorTests to comply with change where only the FIRST Info.plist is excluded from copy bundle resources build phase, additionally resolve absolute path
* Ensure project.basePath is always absolute when resolving Info.plist path relative to project
* Add test coverage in SourceGeneratorTests.swift
* Update CHANGELOG.md
* Reword CHANGELOG.md
---
CHANGELOG.md | 1 +
Sources/ProjectSpec/Config.swift | 2 +-
Sources/XcodeGenKit/PBXProjGenerator.swift | 58 ++++++++++----
Sources/XcodeGenKit/SourceGenerator.swift | 69 +++++++++-------
.../App_macOS/{Info.plist => App-Info.plist} | 0
.../Project.xcodeproj/project.pbxproj | 20 +++--
.../Resources/GoogleService-Info.plist | 40 ++++++++++
Tests/Fixtures/TestProject/project.yml | 3 +-
.../ProjectGeneratorTests.swift | 2 +-
.../SourceGeneratorTests.swift | 78 ++++++++++++++++++-
10 files changed, 214 insertions(+), 59 deletions(-)
rename Tests/Fixtures/TestProject/App_macOS/{Info.plist => App-Info.plist} (100%)
create mode 100644 Tests/Fixtures/TestProject/Resources/GoogleService-Info.plist
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4cd65607a..890453840 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
- Fixed bug where schemes without a build target would crash instead of displaying an error [#1040](https://github.com/yonaskolb/XcodeGen/pull/1040) @dalemyers
+- Fixed files with names ending in **Info.plist** (such as **GoogleServices-Info.plist**) from being omitted from the Copy Resources build phase. Now, only the resolved info plist file for each specific target is omitted. [#1027](https://github.com/yonaskolb/XcodeGen/pull/1027) @liamnichols
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
diff --git a/Sources/ProjectSpec/Config.swift b/Sources/ProjectSpec/Config.swift
index 2e343e578..c8772b7ce 100644
--- a/Sources/ProjectSpec/Config.swift
+++ b/Sources/ProjectSpec/Config.swift
@@ -1,7 +1,7 @@
import Foundation
import JSONUtilities
-public struct Config: Equatable {
+public struct Config: Hashable {
public var name: String
public var type: ConfigType?
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 933d3e463..746fc1891 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -643,11 +643,12 @@ public class PBXProjGenerator {
func generateTarget(_ target: Target) throws {
let carthageDependencies = carthageResolver.dependencies(for: target)
- let sourceFiles = try sourceGenerator.getAllSourceFiles(targetType: target.type, sources: target.sources)
+ let infoPlistFiles: [Config: String] = getInfoPlists(for: target)
+ let sourceFileBuildPhaseOverrideSequence: [(Path, BuildPhaseSpec)] = Set(infoPlistFiles.values).map({ (project.basePath + $0, .none) })
+ let sourceFileBuildPhaseOverrides = Dictionary(uniqueKeysWithValues: sourceFileBuildPhaseOverrideSequence)
+ let sourceFiles = try sourceGenerator.getAllSourceFiles(targetType: target.type, sources: target.sources, buildPhases: sourceFileBuildPhaseOverrides)
.sorted { $0.path.lastComponent < $1.path.lastComponent }
- var plistPath: Path?
- var searchForPlist = true
var anyDependencyRequiresObjCLinking = false
var dependencies: [PBXTargetDependency] = []
@@ -1167,17 +1168,9 @@ public class PBXProjGenerator {
buildSettings["CODE_SIGN_ENTITLEMENTS"] = entitlements.path
}
- // Set INFOPLIST_FILE if not defined in settings
- if !project.targetHasBuildSetting("INFOPLIST_FILE", target: target, config: config) {
- if let info = target.info {
- buildSettings["INFOPLIST_FILE"] = info.path
- } else if searchForPlist {
- plistPath = getInfoPlist(target.sources)
- searchForPlist = false
- }
- if let plistPath = plistPath {
- buildSettings["INFOPLIST_FILE"] = (try? plistPath.relativePath(from: projectDirectory ?? project.basePath)) ?? plistPath
- }
+ // Set INFOPLIST_FILE based on the resolved value
+ if let infoPlistFile = infoPlistFiles[config] {
+ buildSettings["INFOPLIST_FILE"] = infoPlistFile
}
// automatically calculate bundle id
@@ -1301,6 +1294,43 @@ public class PBXProjGenerator {
}
}
+ func getInfoPlists(for target: Target) -> [Config: String] {
+ var searchForDefaultInfoPlist: Bool = true
+ var defaultInfoPlist: String?
+
+ let values: [(Config, String)] = project.configs.compactMap { config in
+ // First, if the plist path was defined by `INFOPLIST_FILE`, use that
+ let buildSettings = project.getTargetBuildSettings(target: target, config: config)
+ if let value = buildSettings["INFOPLIST_FILE"] as? String {
+ return (config, value)
+ }
+
+ // Otherwise check if the path was defined as part of the `info` spec
+ if let value = target.info?.path {
+ return (config, value)
+ }
+
+ // If we haven't yet looked for the default info plist, try doing so
+ if searchForDefaultInfoPlist {
+ searchForDefaultInfoPlist = false
+
+ if let plistPath = getInfoPlist(target.sources) {
+ let basePath = projectDirectory ?? project.basePath.absolute()
+ let relative = (try? plistPath.relativePath(from: basePath)) ?? plistPath
+ defaultInfoPlist = relative.string
+ }
+ }
+
+ // Return the default plist if there was one
+ if let value = defaultInfoPlist {
+ return (config, value)
+ }
+ return nil
+ }
+
+ return Dictionary(uniqueKeysWithValues: values)
+ }
+
func getInfoPlist(_ sources: [TargetSource]) -> Path? {
sources
.lazy
diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift
index b66346f15..72b1d1c8b 100644
--- a/Sources/XcodeGenKit/SourceGenerator.swift
+++ b/Sources/XcodeGenKit/SourceGenerator.swift
@@ -77,14 +77,19 @@ class SourceGenerator {
localPackageGroup!.children.append(fileReference)
}
- func getAllSourceFiles(targetType: PBXProductType, sources: [TargetSource]) throws -> [SourceFile] {
- try sources.flatMap { try getSourceFiles(targetType: targetType, targetSource: $0, path: project.basePath + $0.path) }
+ /// Collects an array complete of all `SourceFile` objects that make up the target based on the provided `TargetSource` definitions.
+ ///
+ /// - Parameters:
+ /// - targetType: The type of target that the source files should belong to.
+ /// - sources: The array of sources defined as part of the targets spec.
+ /// - buildPhases: A dictionary containing any build phases that should be applied to source files at specific paths in the event that the associated `TargetSource` didn't already define a `buildPhase`. Values from this dictionary are used in cases where the project generator knows more about a file than the spec/filesystem does (i.e if the file should be treated as the targets Info.plist and so on).
+ func getAllSourceFiles(targetType: PBXProductType, sources: [TargetSource], buildPhases: [Path : BuildPhaseSpec]) throws -> [SourceFile] {
+ try sources.flatMap { try getSourceFiles(targetType: targetType, targetSource: $0, buildPhases: buildPhases) }
}
// get groups without build files. Use for Project.fileGroups
func getFileGroups(path: String) throws {
- let fullPath = project.basePath + path
- _ = try getSourceFiles(targetType: .none, targetSource: TargetSource(path: path), path: fullPath)
+ _ = try getSourceFiles(targetType: .none, targetSource: TargetSource(path: path), buildPhases: [:])
}
func getFileType(path: Path) -> FileType? {
@@ -95,7 +100,7 @@ class SourceGenerator {
}
}
- func generateSourceFile(targetType: PBXProductType, targetSource: TargetSource, path: Path, buildPhase: BuildPhaseSpec? = nil, fileReference: PBXFileElement? = nil) -> SourceFile {
+ func generateSourceFile(targetType: PBXProductType, targetSource: TargetSource, path: Path, fileReference: PBXFileElement? = nil, buildPhases: [Path: BuildPhaseSpec]) -> SourceFile {
let fileReference = fileReference ?? fileReferencesByPath[path.string.lowercased()]!
var settings: [String: Any] = [:]
let fileType = getFileType(path: path)
@@ -106,9 +111,11 @@ class SourceGenerator {
let headerVisibility = targetSource.headerVisibility ?? .public
- if let buildPhase = buildPhase {
+ if let buildPhase = targetSource.buildPhase {
chosenBuildPhase = buildPhase
- } else if let buildPhase = targetSource.buildPhase {
+ } else if resolvedTargetSourceType(for: targetSource, at: path) == .folder {
+ chosenBuildPhase = .resources
+ } else if let buildPhase = buildPhases[path] {
chosenBuildPhase = buildPhase
} else {
chosenBuildPhase = getDefaultBuildPhase(for: path, targetType: targetType)
@@ -250,9 +257,6 @@ class SourceGenerator {
/// returns a default build phase for a given path. This is based off the filename
private func getDefaultBuildPhase(for path: Path, targetType: PBXProductType) -> BuildPhaseSpec? {
- if path.lastComponent.hasSuffix("Info.plist") {
- return nil
- }
if let buildPhase = getFileType(path: path)?.buildPhase {
return buildPhase
}
@@ -404,7 +408,8 @@ class SourceGenerator {
isBaseGroup: Bool,
hasCustomParent: Bool,
excludePaths: Set,
- includePaths: Set
+ includePaths: Set,
+ buildPhases: [Path: BuildPhaseSpec]
) throws -> (sourceFiles: [SourceFile], groups: [PBXGroup]) {
let children = try getSourceChildren(targetSource: targetSource, dirPath: path, excludePaths: excludePaths, includePaths: includePaths)
@@ -435,7 +440,7 @@ class SourceGenerator {
var groupChildren: [PBXFileElement] = filePaths.map { getFileReference(path: $0, inPath: path) }
var allSourceFiles: [SourceFile] = filePaths.map {
- generateSourceFile(targetType: targetType, targetSource: targetSource, path: $0)
+ generateSourceFile(targetType: targetType, targetSource: targetSource, path: $0, buildPhases: buildPhases)
}
var groups: [PBXGroup] = []
@@ -448,7 +453,8 @@ class SourceGenerator {
isBaseGroup: false,
hasCustomParent: false,
excludePaths: excludePaths,
- includePaths: includePaths
+ includePaths: includePaths,
+ buildPhases: buildPhases
)
guard !subGroups.sourceFiles.isEmpty || project.options.generateEmptyDirectories else {
@@ -491,7 +497,8 @@ class SourceGenerator {
let sourceFile = generateSourceFile(targetType: targetType,
targetSource: targetSource,
path: filePath,
- fileReference: variantGroup)
+ fileReference: variantGroup,
+ buildPhases: buildPhases)
allSourceFiles.append(sourceFile)
}
}
@@ -528,7 +535,8 @@ class SourceGenerator {
let sourceFile = generateSourceFile(targetType: targetType,
targetSource: targetSource,
path: filePath,
- fileReference: fileReference)
+ fileReference: fileReference,
+ buildPhases: buildPhases)
allSourceFiles.append(sourceFile)
groupChildren.append(fileReference)
}
@@ -551,14 +559,15 @@ class SourceGenerator {
}
/// creates source files
- private func getSourceFiles(targetType: PBXProductType, targetSource: TargetSource, path: Path) throws -> [SourceFile] {
+ private func getSourceFiles(targetType: PBXProductType, targetSource: TargetSource, buildPhases: [Path: BuildPhaseSpec]) throws -> [SourceFile] {
// generate excluded paths
+ let path = project.basePath + targetSource.path
let excludePaths = getSourceMatches(targetSource: targetSource, patterns: targetSource.excludes)
// generate included paths. Excluded paths will override this.
let includePaths = getSourceMatches(targetSource: targetSource, patterns: targetSource.includes)
- let type = targetSource.type ?? (path.isFile || path.extension != nil ? .file : .group)
+ let type = resolvedTargetSourceType(for: targetSource, at: path)
let customParentGroups = (targetSource.group ?? "").split(separator: "/").map { String($0) }
let hasCustomParent = !customParentGroups.isEmpty
@@ -570,11 +579,10 @@ class SourceGenerator {
var sourcePath = path
switch type {
case .folder:
- let folderPath = project.basePath + Path(targetSource.path)
let fileReference = getFileReference(
- path: folderPath,
+ path: path,
inPath: project.basePath,
- name: targetSource.name ?? folderPath.lastComponent,
+ name: targetSource.name ?? path.lastComponent,
sourceTree: .sourceRoot,
lastKnownFileType: "folder"
)
@@ -583,14 +591,7 @@ class SourceGenerator {
rootGroups.insert(fileReference)
}
- let buildPhase: BuildPhaseSpec?
- if let targetBuildPhase = targetSource.buildPhase {
- buildPhase = targetBuildPhase
- } else {
- buildPhase = .resources
- }
-
- let sourceFile = generateSourceFile(targetType: targetType, targetSource: targetSource, path: folderPath, buildPhase: buildPhase)
+ let sourceFile = generateSourceFile(targetType: targetType, targetSource: targetSource, path: path, buildPhases: buildPhases)
sourceFiles.append(sourceFile)
sourceReference = fileReference
@@ -598,7 +599,7 @@ class SourceGenerator {
let parentPath = path.parent()
let fileReference = getFileReference(path: path, inPath: parentPath, name: targetSource.name)
- let sourceFile = generateSourceFile(targetType: targetType, targetSource: targetSource, path: path)
+ let sourceFile = generateSourceFile(targetType: targetType, targetSource: targetSource, path: path, buildPhases: buildPhases)
if hasCustomParent {
sourcePath = path
@@ -633,7 +634,8 @@ class SourceGenerator {
isBaseGroup: true,
hasCustomParent: hasCustomParent,
excludePaths: excludePaths,
- includePaths: includePaths
+ includePaths: includePaths,
+ buildPhases: buildPhases
)
let group = groups.first!
@@ -655,6 +657,13 @@ class SourceGenerator {
return sourceFiles
}
+ /// Returns the resolved `SourceType` for a given `TargetSource`.
+ ///
+ /// While `TargetSource` declares `type`, its optional and in the event that the value is not defined then we must resolve a sensible default based on the path of the source.
+ private func resolvedTargetSourceType(for targetSource: TargetSource, at path: Path) -> SourceType {
+ return targetSource.type ?? (path.isFile || path.extension != nil ? .file : .group)
+ }
+
private func createParentGroups(_ parentGroups: [String], for fileElement: PBXFileElement) {
guard let parentName = parentGroups.last else {
return
diff --git a/Tests/Fixtures/TestProject/App_macOS/Info.plist b/Tests/Fixtures/TestProject/App_macOS/App-Info.plist
similarity index 100%
rename from Tests/Fixtures/TestProject/App_macOS/Info.plist
rename to Tests/Fixtures/TestProject/App_macOS/App-Info.plist
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 594fdf965..bb0de533f 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -107,6 +107,7 @@
87927928A8A3460166ACB819 /* SwiftFileInDotPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
8C941A6EF08069CB3CB88FC1 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
900CFAD929CAEE3861127627 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7B5068D64404C61A67A18458 /* MyBundle.bundle */; };
+ 94FD20C3EA5EBCEC8783740C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */; };
95DD9941E1529FD2AE1A191D /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };
96B55C0F660235FE6BDD8869 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
998CCB995347CBB8EDC95FB5 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };
@@ -610,7 +611,6 @@
3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; };
3797E591F302ECC0AA2FC607 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
38DB679FF1CF4E379D1AB103 /* App_Clip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_Clip.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 38F1191E5B85DC882B8ABE85 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
3A7BEFAB4710735CF169B1E8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
3D8A2D4363866877B9140156 /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; };
3ED831531AA349CCC19B258B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
@@ -655,6 +655,7 @@
8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
8D88C6BF7355702B74396791 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
93C033648A37D95027845BD3 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
+ 9528528C989D24FE3E6C533E /* App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "App-Info.plist"; sourceTree = ""; };
9A87A926D563773658FB87FE /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
9D4AB3FCF725428EFB56F542 /* Configuration.storekit */ = {isa = PBXFileReference; path = Configuration.storekit; sourceTree = ""; };
9F27382DD66E26C059E26EFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
@@ -673,6 +674,7 @@
BA040F1F7D6CA08878323A55 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
BB178D03E75929F3F5B10C56 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
BC56891DA7446EAC8C2F27EB /* File2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File2.swift; path = Group2/File2.swift; sourceTree = ""; };
+ BDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "GoogleService-Info.plist"; sourceTree = ""; };
BECEA4A483ADEB8158F640B3 /* Tool */ = {isa = PBXFileReference; includeInIndex = 0; path = Tool; sourceTree = BUILT_PRODUCTS_DIR; };
BF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Model.xcmappingmodel; sourceTree = ""; };
C53ACB2962FED621389C36A2 /* iMessageStickersExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageStickersExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1071,6 +1073,7 @@
isa = PBXGroup;
children = (
28360ECA4D727FAA58557A81 /* example.mp4 */,
+ BDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */,
7B5068D64404C61A67A18458 /* MyBundle.bundle */,
C9E358FBE2B54D2B5C7FD609 /* SceneKitCatalog.scnassets */,
);
@@ -1207,9 +1210,9 @@
EE78B4FBD0137D1975C47D76 /* App_macOS */ = {
isa = PBXGroup;
children = (
+ 9528528C989D24FE3E6C533E /* App-Info.plist */,
09B82F603D981398F38D762E /* AppDelegate.swift */,
E55F45EACB0F382722D61C8D /* Assets.xcassets */,
- 38F1191E5B85DC882B8ABE85 /* Info.plist */,
74FBDFA5CB063F6001AD8ACD /* Main.storyboard */,
A4C3FE6B986506724DAB5D0F /* ViewController.swift */,
);
@@ -2052,6 +2055,7 @@
buildActionMask = 2147483647;
files = (
447D59BE2E0993D7245EA247 /* Assets.xcassets in Resources */,
+ 94FD20C3EA5EBCEC8783740C /* GoogleService-Info.plist in Resources */,
A9548E5DCFE92236494164DF /* LaunchScreen.storyboard in Resources */,
6E8F8303759824631C8D9DA3 /* Localizable.strings in Resources */,
E5DD0AD6F7AE1DD4AF98B83E /* Localizable.stringsdict in Resources */,
@@ -3298,7 +3302,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
);
- INFOPLIST_FILE = App_macOS/Info.plist;
+ INFOPLIST_FILE = "App_macOS/App-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -3716,7 +3720,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
);
- INFOPLIST_FILE = App_macOS/Info.plist;
+ INFOPLIST_FILE = "App_macOS/App-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -3855,7 +3859,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
);
- INFOPLIST_FILE = App_macOS/Info.plist;
+ INFOPLIST_FILE = "App_macOS/App-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -5044,7 +5048,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
);
- INFOPLIST_FILE = App_macOS/Info.plist;
+ INFOPLIST_FILE = "App_macOS/App-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -5128,7 +5132,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
);
- INFOPLIST_FILE = App_macOS/Info.plist;
+ INFOPLIST_FILE = "App_macOS/App-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -6197,7 +6201,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/Mac",
);
- INFOPLIST_FILE = App_macOS/Info.plist;
+ INFOPLIST_FILE = "App_macOS/App-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
diff --git a/Tests/Fixtures/TestProject/Resources/GoogleService-Info.plist b/Tests/Fixtures/TestProject/Resources/GoogleService-Info.plist
new file mode 100644
index 000000000..51ff82bc3
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Resources/GoogleService-Info.plist
@@ -0,0 +1,40 @@
+
+
+
+
+ AD_UNIT_ID_FOR_BANNER_TEST
+ ca-app-pub-0000000000000000/1111111111
+ AD_UNIT_ID_FOR_INTERSTITIAL_TEST
+ ca-app-pub-9999999999999999/2222222222
+ CLIENT_ID
+ AAAAAAA
+ REVERSED_CLIENT_ID
+ BBBBBBB
+ API_KEY
+ CCCCCCC
+ GCM_SENDER_ID
+ 000000000000000
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ com.project.app
+ PROJECT_ID
+ abcdef:app-000000000
+ STORAGE_BUCKET
+ abcdef:app-000000000.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 000000000000000
+ DATABASE_URL
+ https://github.com/yonaskolb/XcodeGen/
+
+
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 4445ac512..007117770 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -40,7 +40,7 @@ targets:
platform: macOS
scheme: {}
info:
- path: App_macOS/Info.plist
+ path: App_macOS/App-Info.plist
properties:
LSMinimumSystemVersion: $(MACOSX_DEPLOYMENT_TARGET)
NSMainStoryboardFile: Main
@@ -86,6 +86,7 @@ targets:
- FileGroup/UnderFileGroup
- Resources/MyBundle.bundle
- Resources/SceneKitCatalog.scnassets
+ - Resources/GoogleService-Info.plist
- path: Resources/ResourceFolder
type: folder
- path: Folder
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 7324374cb..9309c59aa 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -1503,7 +1503,7 @@ class ProjectGeneratorTests: XCTestCase {
let project = Project(name: "test", targets: [frameworkWithSources])
let generator = ProjectGenerator(project: project)
let generatedProject = try generator.generateXcodeProject(in: destinationPath)
- let plists = generatedProject.pbxproj.buildConfigurations.compactMap { $0.buildSettings["INFOPLIST_FILE"] as? Path }
+ let plists = generatedProject.pbxproj.buildConfigurations.compactMap { $0.buildSettings["INFOPLIST_FILE"] as? String }
try expect(plists.count) == 2
for plist in plists {
try expect(plist) == "TestProject/App_iOS/Info.plist"
diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
index 90a84ab49..6ee094a48 100644
--- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
@@ -559,13 +559,13 @@ class SourceGeneratorTests: XCTestCase {
- file.swift
- file.xcassets
- file.h
- - Info.plist
+ - GoogleService-Info.plist
- file.xcconfig
B:
- file.swift
- file.xcassets
- file.h
- - Info.plist
+ - Sample.plist
- file.xcconfig
C:
- file.swift
@@ -612,13 +612,13 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFile(paths: ["A", "file.swift"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "file.xcassets"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "file.h"], buildPhase: .resources)
- try pbxProj.expectFile(paths: ["A", "Info.plist"], buildPhase: .resources)
+ try pbxProj.expectFile(paths: ["A", "GoogleService-Info.plist"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["A", "file.xcconfig"], buildPhase: .resources)
try pbxProj.expectFile(paths: ["B", "file.swift"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["B", "file.xcassets"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["B", "file.h"], buildPhase: BuildPhaseSpec.none)
- try pbxProj.expectFile(paths: ["B", "Info.plist"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["B", "Sample.plist"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["B", "file.xcconfig"], buildPhase: BuildPhaseSpec.none)
try pbxProj.expectFile(paths: ["C", "file.swift"], buildPhase: .sources)
@@ -656,6 +656,76 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFile(paths: ["C", "WithPeriod2.0", "file.swift"], buildPhase: .sources)
}
+ $0.it("only omits the defined Info.plist from resource build phases but not other plists") {
+ try createDirectories("""
+ A:
+ - A-Info.plist
+ B:
+ - Info.plist
+ - GoogleServices-Info.plist
+ C:
+ - Info.plist
+ - Info-Production.plist
+ D:
+ - Info-Staging.plist
+ - Info-Production.plist
+ """)
+
+ // Explicit plist.path value is respected
+ let targetA = Target(
+ name: "A",
+ type: .application,
+ platform: .iOS,
+ sources: ["A"],
+ info: Plist(path: "A/A-Info.plist")
+ )
+
+ // Automatically picks first 'Info.plist' at the top-level
+ let targetB = Target(
+ name: "B",
+ type: .application,
+ platform: .iOS,
+ sources: ["B"]
+ )
+
+ // Also respects INFOPLIST_FILE, ignores other files named Info.plist
+ let targetC = Target(
+ name: "C",
+ type: .application,
+ platform: .iOS,
+ settings: Settings(dictionary: [
+ "INFOPLIST_FILE": "C/Info-Production.plist"
+ ]),
+ sources: ["C"]
+ )
+
+ // Does not support INFOPLIST_FILE value that requires expanding
+ let targetD = Target(
+ name: "D",
+ type: .application,
+ platform: .iOS,
+ settings: Settings(dictionary: [
+ "ENVIRONMENT": "Production",
+ "INFOPLIST_FILE": "D/Info-${ENVIRONMENT}.plist"
+ ]),
+ sources: ["D"]
+ )
+
+ let project = Project(basePath: directoryPath.absolute(), name: "Test", targets: [targetA, targetB, targetC, targetD])
+ let pbxProj = try project.generatePbxProj()
+
+ try pbxProj.expectFile(paths: ["A", "A-Info.plist"], buildPhase: BuildPhaseSpec.none)
+
+ try pbxProj.expectFile(paths: ["B", "Info.plist"], buildPhase: BuildPhaseSpec.none)
+ try pbxProj.expectFile(paths: ["B", "GoogleServices-Info.plist"], buildPhase: .resources)
+
+ try pbxProj.expectFile(paths: ["C", "Info.plist"], buildPhase: .resources)
+ try pbxProj.expectFile(paths: ["C", "Info-Production.plist"], buildPhase: BuildPhaseSpec.none)
+
+ try pbxProj.expectFile(paths: ["D", "Info-Staging.plist"], buildPhase: .resources)
+ try pbxProj.expectFile(paths: ["D", "Info-Production.plist"], buildPhase: .resources)
+ }
+
$0.it("sets file type properties") {
let directories = """
A:
From 7b8f5a117ff20367ccd61f15e985857f1adef3fb Mon Sep 17 00:00:00 2001
From: Franz Busch
Date: Thu, 8 Apr 2021 14:20:01 +0200
Subject: [PATCH 062/284] Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)
* Change FRAMEWORK_SEARCH_PATH for xcframeworks
* Apply suggestions from code review
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 1 +
Sources/XcodeGenKit/PBXProjGenerator.swift | 14 ++++++-
.../ProjectGeneratorTests.swift | 39 +++++++++++++++++++
3 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 890453840..6bb37aa74 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
+- Fixed framework search paths when using `.xcframework`s. [#1015](https://github.com/yonaskolb/XcodeGen/pull/1015) @FranzBusch
- Fixed bug where schemes without a build target would crash instead of displaying an error [#1040](https://github.com/yonaskolb/XcodeGen/pull/1040) @dalemyers
- Fixed files with names ending in **Info.plist** (such as **GoogleServices-Info.plist**) from being omitted from the Copy Resources build phase. Now, only the resolved info plist file for each specific target is omitted. [#1027](https://github.com/yonaskolb/XcodeGen/pull/1027) @liamnichols
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 746fc1891..d76c2f1b4 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -760,9 +760,19 @@ public class PBXProjGenerator {
case .framework:
if !dependency.implicit {
- let buildPath = Path(dependency.reference).parent().string.quoted
- frameworkBuildPaths.insert(buildPath)
+ let buildPath = Path(dependency.reference)
+ let buildPathString: String
+
+ if buildPath.extension == "xcframework" {
+ buildPathString = """
+ "\(Path(dependency.reference).string)/**"
+ """
+ } else {
+ buildPathString = buildPath.parent().string.quoted
+ }
+ frameworkBuildPaths.insert(buildPathString)
}
+
let fileReference: PBXFileElement
if dependency.implicit {
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 9309c59aa..5bc53dfff 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -1369,6 +1369,45 @@ class ProjectGeneratorTests: XCTestCase {
// generated plist should not be in buildsettings
try expect(targetConfig.buildSettings["INFOPLIST_FILE"] as? String) == predefinedPlistPath
}
+
+ describe("XCFramework dependencies") {
+ $0.context("with xcframework dependency") {
+ $0.it("should add FRAMEWORK_SEARCH_PATHS") {
+ let app = Target(
+ name: "MyApp",
+ type: .application,
+ platform: .iOS,
+ dependencies: [
+ Dependency(type: .framework, reference: "some/folder/MyXCFramework.xcframework"),
+ ]
+ )
+ let project = Project(name: "test", targets: [app])
+ let pbxProject = try project.generatePbxProj()
+
+ let target = pbxProject.nativeTargets.first!
+ let configuration = target.buildConfigurationList!.buildConfigurations.first!
+ try expect(configuration.buildSettings["FRAMEWORK_SEARCH_PATHS"] as? [String]) == ["$(inherited)", "\"some/folder/MyXCFramework.xcframework/**\""]
+ }
+ }
+ $0.context("with regular framework") {
+ $0.it("should add FRAMEWORK_SEARCH_PATHS") {
+ let app = Target(
+ name: "MyApp",
+ type: .application,
+ platform: .iOS,
+ dependencies: [
+ Dependency(type: .framework, reference: "some/folder/MyXCFramework.framework"),
+ ]
+ )
+ let project = Project(name: "test", targets: [app])
+ let pbxProject = try project.generatePbxProj()
+
+ let target = pbxProject.nativeTargets.first!
+ let configuration = target.buildConfigurationList!.buildConfigurations.first!
+ try expect(configuration.buildSettings["FRAMEWORK_SEARCH_PATHS"] as? [String]) == ["$(inherited)", "\"some/folder\""]
+ }
+ }
+ }
describe("Carthage dependencies") {
$0.context("with static dependency") {
From 209afcc89849f7b1c45804b3bdc1f4f890e50ed4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9?=
Date: Thu, 8 Apr 2021 09:20:10 -0300
Subject: [PATCH 063/284] Allowing override LastUpgradeCheck and
LastUpgradeVersion (#1013)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Allowing the property LastUpgradeCheck and LastUpgradeVersion to be overrided
* Updating changelod and project spec
* Updating changelog
Co-authored-by: André Lucas Ota
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 +-
Sources/XcodeGenKit/PBXProjGenerator.swift | 13 ++++--
Sources/XcodeGenKit/SchemeGenerator.swift | 4 +-
Sources/XcodeGenKit/Version.swift | 2 +-
.../PBXProjGeneratorTests.swift | 40 ++++++++++++++++++-
.../SchemeGeneratorTests.swift | 26 ++++++++++++
7 files changed, 81 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6bb37aa74..932316761 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@
#### Added
- Allow specifying a `github` name like `JohnSundell/Ink` instead of a full `url` for Swift Packages [#1029](https://github.com/yonaskolb/XcodeGen/pull/1029) @yonaskolb
+- Added explicity `LastUpgradeCheck` and `LastUpgradeVersion` override support so it's possible to override these properties without using the `project.xcodeVersion`. [1013](https://github.com/yonaskolb/XcodeGen/pull/1013) @Andre113
- Added `macroExpansion` for `run` in `schemes` [#1036](https://github.com/yonaskolb/XcodeGen/pull/1036) @freddi-kit
- Added `askForAppToLaunch` for `profile` in `schemes` [#1035](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 3acd95d82..329d533a4 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -39,7 +39,7 @@ You can also use environment variables in your configuration file, by using `${S
- [x] **name**: **String** - Name of the generated project
- [ ] **include**: **[Include](#include)** - One or more paths to other specs
- [ ] **options**: **[Options](#options)** - Various options to override default behaviour
-- [ ] **attributes**: **[String: Any]** - The PBXProject attributes. This is for advanced use. This defaults to ``{"LastUpgradeCheck": "XcodeVersion"}`` with `xcodeVersion` being set by [Options](#options)`.xcodeVersion`
+- [ ] **attributes**: **[String: Any]** - The PBXProject attributes. This is for advanced use. If no value is set for `LastUpgradeCheck`, it will be defaulted to ``{"LastUpgradeCheck": "XcodeVersion"}`` with `xcodeVersion` being set by [Options](#options)`.xcodeVersion`
- [ ] **configs**: **[Configs](#configs)** - Project build configurations. Defaults to `Debug` and `Release` configs
- [ ] **configFiles**: **[Config Files](#config-files)** - `.xcconfig` files per config
- [ ] **settings**: **[Settings](#settings)** - Project specific settings. Default base and config type settings will be applied first before any settings defined here
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index d76c2f1b4..2cafa8aad 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -285,9 +285,16 @@ public class PBXProjGenerator {
}.flatMap { $0 }
).sorted()
- var projectAttributes: [String: Any] = ["LastUpgradeCheck": project.xcodeVersion]
- .merged(project.attributes)
-
+ var projectAttributes: [String: Any] = project.attributes
+
+ // Set default LastUpgradeCheck if user did not specify
+ let lastUpgradeKey = "LastUpgradeCheck"
+ if !projectAttributes.contains(where: { (key, value) -> Bool in
+ key == lastUpgradeKey && value is String
+ }) {
+ projectAttributes[lastUpgradeKey] = project.xcodeVersion
+ }
+
if !assetTags.isEmpty {
projectAttributes["knownAssetTags"] = assetTags
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index d3729e86e..74c3dbeb9 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -295,9 +295,11 @@ public class SchemeGenerator {
postActions: scheme.archive?.postActions.map(getExecutionAction) ?? []
)
+ let lastUpgradeVersion = project.attributes["LastUpgradeCheck"] as? String ?? project.xcodeVersion
+
return XCScheme(
name: scheme.name,
- lastUpgradeVersion: project.xcodeVersion,
+ lastUpgradeVersion: lastUpgradeVersion,
version: project.schemeVersion,
buildAction: buildAction,
testAction: testAction,
diff --git a/Sources/XcodeGenKit/Version.swift b/Sources/XcodeGenKit/Version.swift
index eb2449152..f94d42e26 100644
--- a/Sources/XcodeGenKit/Version.swift
+++ b/Sources/XcodeGenKit/Version.swift
@@ -3,7 +3,7 @@ import ProjectSpec
extension Project {
- var xcodeVersion: String {
+ public var xcodeVersion: String {
XCodeVersion.parse(options.xcodeVersion ?? "12.0")
}
diff --git a/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift b/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
index 9be66e26d..d5905e62f 100644
--- a/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
@@ -261,5 +261,43 @@ class PBXProjGeneratorTests: XCTestCase {
}
}
}
-
+
+ func testDefaultLastUpgradeCheckWhenUserDidSpecifyInvalidValue() throws {
+ let lastUpgradeKey = "LastUpgradeCheck"
+ let attributes: [String: Any] = [lastUpgradeKey: 1234]
+ let project = Project(name: "Test", attributes: attributes)
+ let projGenerator = PBXProjGenerator(project: project)
+
+ let pbxProj = try projGenerator.generate()
+
+ for pbxProject in pbxProj.projects {
+ XCTAssertEqual(pbxProject.attributes[lastUpgradeKey] as? String, project.xcodeVersion)
+ }
+ }
+
+ func testOverrideLastUpgradeCheckWhenUserDidSpecifyValue() throws {
+ let lastUpgradeKey = "LastUpgradeCheck"
+ let lastUpgradeValue = "1234"
+ let attributes: [String: Any] = [lastUpgradeKey: lastUpgradeValue]
+ let project = Project(name: "Test", attributes: attributes)
+ let projGenerator = PBXProjGenerator(project: project)
+
+ let pbxProj = try projGenerator.generate()
+
+ for pbxProject in pbxProj.projects {
+ XCTAssertEqual(pbxProject.attributes[lastUpgradeKey] as? String, lastUpgradeValue)
+ }
+ }
+
+ func testDefaultLastUpgradeCheckWhenUserDidNotSpecifyValue() throws {
+ let lastUpgradeKey = "LastUpgradeCheck"
+ let project = Project(name: "Test")
+ let projGenerator = PBXProjGenerator(project: project)
+
+ let pbxProj = try projGenerator.generate()
+
+ for pbxProject in pbxProj.projects {
+ XCTAssertEqual(pbxProject.attributes[lastUpgradeKey] as? String, project.xcodeVersion)
+ }
+ }
}
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 6c8656881..ce7cd5f03 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -434,6 +434,32 @@ class SchemeGeneratorTests: XCTestCase {
}
}
}
+
+ func testOverrideLastUpgradeVersionWhenUserDidSpecify() throws {
+ var target = app
+ target.scheme = TargetScheme()
+
+ let lastUpgradeKey = "LastUpgradeCheck"
+ let lastUpgradeValue = "1234"
+ let attributes: [String: Any] = [lastUpgradeKey: lastUpgradeValue]
+ let project = Project(name: "test", targets: [target, framework], attributes: attributes)
+ let xcodeProject = try project.generateXcodeProject()
+
+ let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
+ XCTAssertEqual(xcscheme.lastUpgradeVersion, lastUpgradeValue)
+ }
+
+
+ func testDefaultLastUpgradeVersionWhenUserDidNotSpecify() throws {
+ var target = app
+ target.scheme = TargetScheme()
+
+ let project = Project(name: "test", targets: [target, framework])
+ let xcodeProject = try project.generateXcodeProject()
+
+ let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
+ XCTAssertEqual(xcscheme.lastUpgradeVersion, project.xcodeVersion)
+ }
// MARK: - Helpers
From 0ac7a5f8c6652650d03d89c92da09ec74c6e6060 Mon Sep 17 00:00:00 2001
From: Artem Semavin
Date: Thu, 8 Apr 2021 18:01:28 +0500
Subject: [PATCH 064/284] Added support for SelectedTests in schemes `Test`
configuration. (#913)
* added support for selectedTests in test shemes
* added PR description to changelog
* CHANGELOG fix
* use presence of selectedTests for useTestSelectionWhitelist
Co-authored-by: Artem Semavin
Co-authored-by: yonaskolb
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 3 +-
Sources/ProjectSpec/Scheme.swift | 7 +++-
Sources/XcodeGenKit/SchemeGenerator.swift | 4 +-
Tests/ProjectSpecTests/SpecLoadingTests.swift | 40 +++++++++++++++++++
5 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 932316761..cfb49fcd2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Added explicity `LastUpgradeCheck` and `LastUpgradeVersion` override support so it's possible to override these properties without using the `project.xcodeVersion`. [1013](https://github.com/yonaskolb/XcodeGen/pull/1013) @Andre113
- Added `macroExpansion` for `run` in `schemes` [#1036](https://github.com/yonaskolb/XcodeGen/pull/1036) @freddi-kit
- Added `askForAppToLaunch` for `profile` in `schemes` [#1035](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
+- Added support for selectedTests in schemes `Test` configuration. [#913](https://github.com/yonaskolb/XcodeGen/pull/913) @ooodin
#### Fixed
- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 329d533a4..6487a9a6b 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -808,7 +808,8 @@ A multiline script can be written using the various YAML multiline methods, for
- [ ] **parallelizable**: **Bool** - Whether to run tests in parallel. Defaults to false
- [ ] **randomExecutionOrder**: **Bool** - Whether to run tests in a random order. Defaults to false
- [ ] **skipped**: **Bool** - Whether to skip all of the test target tests. Defaults to false
-- [ ] **skippedTests**: **[String]** - List of tests in the test target to skip. Defaults to empty.
+- [ ] **skippedTests**: **[String]** - List of tests in the test target to skip. Defaults to empty
+- [ ] **selectedTests**: **[String]** - List of tests in the test target to whitelist and select. Defaults to empty. This will override `skippedTests` if provided
### Archive Action
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index 16d3c19d6..47d8ad8aa 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -185,19 +185,22 @@ public struct Scheme: Equatable {
public var parallelizable: Bool
public var skipped: Bool
public var skippedTests: [String]
+ public var selectedTests: [String]
public init(
targetReference: TargetReference,
randomExecutionOrder: Bool = randomExecutionOrderDefault,
parallelizable: Bool = parallelizableDefault,
skipped: Bool = false,
- skippedTests: [String] = []
+ skippedTests: [String] = [],
+ selectedTests: [String] = []
) {
self.targetReference = targetReference
self.randomExecutionOrder = randomExecutionOrder
self.parallelizable = parallelizable
self.skipped = skipped
self.skippedTests = skippedTests
+ self.selectedTests = selectedTests
}
public init(stringLiteral value: String) {
@@ -207,6 +210,7 @@ public struct Scheme: Equatable {
parallelizable = false
skipped = false
skippedTests = []
+ selectedTests = []
} catch {
fatalError(SpecParsingError.invalidTargetReference(value).description)
}
@@ -512,6 +516,7 @@ extension Scheme.Test.TestTarget: JSONObjectConvertible {
parallelizable = jsonDictionary.json(atKeyPath: "parallelizable") ?? Scheme.Test.TestTarget.parallelizableDefault
skipped = jsonDictionary.json(atKeyPath: "skipped") ?? false
skippedTests = jsonDictionary.json(atKeyPath: "skippedTests") ?? []
+ selectedTests = jsonDictionary.json(atKeyPath: "selectedTests") ?? []
}
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 74c3dbeb9..3b81d1da5 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -191,7 +191,9 @@ public class SchemeGenerator {
parallelizable: testTarget.parallelizable,
randomExecutionOrdering: testTarget.randomExecutionOrder,
buildableReference: testBuilEntries.buildableReference,
- skippedTests: testTarget.skippedTests.map(XCScheme.TestItem.init)
+ skippedTests: testTarget.skippedTests.map(XCScheme.TestItem.init),
+ selectedTests: testTarget.selectedTests.map(XCScheme.TestItem.init),
+ useTestSelectionWhitelist: !testTarget.selectedTests.isEmpty ? true : nil
)
}
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 53175130e..015f62e73 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -839,6 +839,46 @@ class SpecLoadingTests: XCTestCase {
try expect(scheme.test) == expectedTest
}
+ $0.it("parses alternate test schemes") {
+ let schemeDictionary: [String: Any] = [
+ "build": [
+ "targets": ["Target1": "all"],
+ ],
+ "test": [
+ "config": "debug",
+ "targets": [
+ "Target1",
+ [
+ "name": "ExternalProject/Target2",
+ "parallelizable": true,
+ "randomExecutionOrder": true,
+ "selectedTests": ["Test/testExample()"],
+ ],
+ ],
+ "gatherCoverageData": true,
+ "disableMainThreadChecker": true,
+ "stopOnEveryMainThreadCheckerIssue": true,
+ ],
+ ]
+ let scheme = try Scheme(name: "Scheme", jsonDictionary: schemeDictionary)
+
+ let expectedTest = Scheme.Test(
+ config: "debug",
+ gatherCoverageData: true,
+ disableMainThreadChecker: true,
+ targets: [
+ "Target1",
+ Scheme.Test.TestTarget(
+ targetReference: "ExternalProject/Target2",
+ randomExecutionOrder: true,
+ parallelizable: true,
+ selectedTests: ["Test/testExample()"]
+ ),
+ ]
+ )
+ try expect(scheme.test) == expectedTest
+ }
+
$0.it("parses schemes variables") {
let schemeDictionary: [String: Any] = [
"build": [
From 3757f82bf6ed3916235828a3e3d64fa0c787d564 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Fri, 9 Apr 2021 09:32:17 +1000
Subject: [PATCH 065/284] Update to 2.20.0
---
CHANGELOG.md | 8 ++++++--
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cfb49fcd2..32c158732 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,15 +2,17 @@
## Next Version
+## 2.20.0
+
#### Added
- Allow specifying a `github` name like `JohnSundell/Ink` instead of a full `url` for Swift Packages [#1029](https://github.com/yonaskolb/XcodeGen/pull/1029) @yonaskolb
- Added explicity `LastUpgradeCheck` and `LastUpgradeVersion` override support so it's possible to override these properties without using the `project.xcodeVersion`. [1013](https://github.com/yonaskolb/XcodeGen/pull/1013) @Andre113
- Added `macroExpansion` for `run` in `schemes` [#1036](https://github.com/yonaskolb/XcodeGen/pull/1036) @freddi-kit
-- Added `askForAppToLaunch` for `profile` in `schemes` [#1035](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
+- Added `askForAppToLaunch` for `profile` in `schemes` [#1035](https://github.com/yonaskolb/XcodeGen/pull/1035) @freddi-kit
- Added support for selectedTests in schemes `Test` configuration. [#913](https://github.com/yonaskolb/XcodeGen/pull/913) @ooodin
#### Fixed
-- Fixed regression on **.storekit** configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
+- Fixed regression on `.storekit` configuration files' default build phase. [#1026](https://github.com/yonaskolb/XcodeGen/pull/1026) @jcolicchio
- Fixed framework search paths when using `.xcframework`s. [#1015](https://github.com/yonaskolb/XcodeGen/pull/1015) @FranzBusch
- Fixed bug where schemes without a build target would crash instead of displaying an error [#1040](https://github.com/yonaskolb/XcodeGen/pull/1040) @dalemyers
- Fixed files with names ending in **Info.plist** (such as **GoogleServices-Info.plist**) from being omitted from the Copy Resources build phase. Now, only the resolved info plist file for each specific target is omitted. [#1027](https://github.com/yonaskolb/XcodeGen/pull/1027) @liamnichols
@@ -18,6 +20,8 @@
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.19.0...2.20.0)
+
## 2.19.0
#### Added
diff --git a/Makefile b/Makefile
index 846649f0b..b207931dd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.19.0
+VERSION = 2.20.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index c39ca8a16..65333f668 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.19.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.20.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index 6e14e06f1..500d46e95 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.19.0")
+let version = Version("2.20.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From c28b1a4082d8540f7760a7c1fc0d99c61ae15f70 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sat, 1 May 2021 12:54:59 +1000
Subject: [PATCH 066/284] fix archive
---
Makefile | 5 +++--
scripts/archive.sh | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index b207931dd..38d04f741 100644
--- a/Makefile
+++ b/Makefile
@@ -10,12 +10,13 @@ REPO = https://github.com/yonaskolb/$(TOOL_NAME)
RELEASE_TAR = $(REPO)/archive/$(VERSION).tar.gz
SHA = $(shell curl -L -s $(RELEASE_TAR) | shasum -a 256 | sed 's/ .*//')
SWIFT_BUILD_FLAGS = --disable-sandbox -c release --arch arm64 --arch x86_64
+EXECUTABLE_PATH = $(shell swift build $(SWIFT_BUILD_FLAGS) --show-bin-path)/$(EXECUTABLE_NAME)
.PHONY: install build uninstall format_code brew release
install: build
mkdir -p $(PREFIX)/bin
- cp -f $(shell swift build $(SWIFT_BUILD_FLAGS) --show-bin-path)/$(EXECUTABLE_NAME) $(INSTALL_PATH)
+ cp -f $(EXECUTABLE_PATH) $(INSTALL_PATH)
mkdir -p $(SHARE_PATH)
cp -R $(CURRENT_PATH)/SettingPresets $(SHARE_PATH)/SettingPresets
@@ -45,4 +46,4 @@ brew:
brew bump-formula-pr --url=$(RELEASE_TAR) XcodeGen
archive: build
- ./scripts/archive.sh
+ ./scripts/archive.sh $(EXECUTABLE_PATH)
diff --git a/scripts/archive.sh b/scripts/archive.sh
index 7ec329e49..ad3355072 100755
--- a/scripts/archive.sh
+++ b/scripts/archive.sh
@@ -10,7 +10,7 @@ LICENSE=LICENSE
# copy
mkdir -p $BINDIR
-cp -f .build/release/$EXECUTABLE_NAME $BINDIR
+cp -f $1 $BINDIR
mkdir -p $SHAREDIR
cp -R SettingPresets $SHAREDIR/SettingPresets
From 56f943ec010a1324b01dfdd24ca5e6445a8b6444 Mon Sep 17 00:00:00 2001
From: "freddi(Yuki Aki)"
Date: Sat, 1 May 2021 12:09:19 +0900
Subject: [PATCH 067/284] Support weak link for Swift Package Dependency
(#1064)
* support weak link to Swift Package dependency
* update test for weak link
* add changelog about Swift Package Dependency
* Update CHANGELOG.md
---
CHANGELOG.md | 2 ++
Sources/XcodeGenKit/PBXProjGenerator.swift | 2 +-
Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj | 2 +-
Tests/Fixtures/SPM/project.yml | 1 +
4 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32c158732..81c6e07b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
# Change Log
## Next Version
+#### Added
+- Support weak link for Swift Package Dependency [#1064](https://github.com/yonaskolb/XcodeGen/pull/1064) @freddi-kit
## 2.20.0
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 2cafa8aad..9b4f80978 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -912,7 +912,7 @@ public class PBXProjGenerator {
let link = dependency.link ?? (target.type != .staticLibrary)
if link {
let buildFile = addObject(
- PBXBuildFile(product: packageDependency)
+ PBXBuildFile(product: packageDependency, settings: getDependencyFrameworkSettings(dependency: dependency))
)
targetFrameworkBuildFiles.append(buildFile)
} else {
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
index d1d85e21c..0f9810390 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj
@@ -14,7 +14,7 @@
9AD886A88D3E4A1B5E900687 /* SPMTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7970A2253B14A9B27C307FAC /* SPMTests.swift */; };
9C4AD0711D706FD3ED0E436D /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C17B77601A9D1B7895AB42 /* StaticLibrary.swift */; };
B89EA0F3859878A1DCF7BAFD /* SwiftRoaringDynamic in Embed Frameworks */ = {isa = PBXBuildFile; productRef = DC73B269C8B0C0BF6912842C /* SwiftRoaringDynamic */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- CE46CBA5671B951B546C8673 /* Codability in Frameworks */ = {isa = PBXBuildFile; productRef = 16E6FE01D5BD99F78D4A17E2 /* Codability */; };
+ CE46CBA5671B951B546C8673 /* Codability in Frameworks */ = {isa = PBXBuildFile; productRef = 16E6FE01D5BD99F78D4A17E2 /* Codability */; settings = {ATTRIBUTES = (Weak, ); }; };
E368431019ABC696E4FFC0CF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4E22B8BCC18A29EFE1DE3BE4 /* Assets.xcassets */; };
/* End PBXBuildFile section */
diff --git a/Tests/Fixtures/SPM/project.yml b/Tests/Fixtures/SPM/project.yml
index a34b360a7..f8cac8b5e 100644
--- a/Tests/Fixtures/SPM/project.yml
+++ b/Tests/Fixtures/SPM/project.yml
@@ -16,6 +16,7 @@ targets:
scheme: {}
dependencies:
- package: Codability
+ weak: true
- package: SwiftRoaring
product: SwiftRoaringDynamic
embed: true
From 35212a6154a36d2e77ca5f3b63f6218e5ebb38e7 Mon Sep 17 00:00:00 2001
From: Elliott Williams
Date: Fri, 30 Apr 2021 20:39:34 -0700
Subject: [PATCH 068/284] Rename `Core` to avoid collisions with other packages
(i.e. GraphViz) (#1057)
* Rename 'Core' to 'XcodeGenCore'
* Update CHANGELOG.md
* Update CHANGELOG.md
---
CHANGELOG.md | 1 +
Package.swift | 10 +++++-----
Sources/ProjectSpec/CacheFile.swift | 2 +-
Sources/XcodeGenCLI/Commands/ProjectCommand.swift | 2 +-
Sources/{Core => XcodeGenCore}/Glob.swift | 0
Sources/{Core => XcodeGenCore}/MD5.swift | 0
Sources/{Core => XcodeGenCore}/PathExtensions.swift | 0
Sources/{Core => XcodeGenCore}/StringDiff.swift | 0
Sources/XcodeGenKit/SourceGenerator.swift | 2 +-
Tests/{CoreTests => XcodeGenCoreTests}/GlobTests.swift | 2 +-
.../PathExtensionsTests.swift | 2 +-
11 files changed, 11 insertions(+), 10 deletions(-)
rename Sources/{Core => XcodeGenCore}/Glob.swift (100%)
rename Sources/{Core => XcodeGenCore}/MD5.swift (100%)
rename Sources/{Core => XcodeGenCore}/PathExtensions.swift (100%)
rename Sources/{Core => XcodeGenCore}/StringDiff.swift (100%)
rename Tests/{CoreTests => XcodeGenCoreTests}/GlobTests.swift (99%)
rename Tests/{CoreTests => XcodeGenCoreTests}/PathExtensionsTests.swift (99%)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 81c6e07b1..e0c313c70 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,7 @@
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
+- The `Core` target is renamed to avoid collisions with other packages. [#1057](https://github.com/yonaskolb/XcodeGen/pull/1057) @elliottwilliams
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.19.0...2.20.0)
diff --git a/Package.swift b/Package.swift
index 3d5c5b40c..3db1b9343 100644
--- a/Package.swift
+++ b/Package.swift
@@ -39,17 +39,17 @@ let package = Package(
"JSONUtilities",
"XcodeProj",
"PathKit",
- "Core",
+ "XcodeGenCore",
"GraphViz",
]),
.target(name: "ProjectSpec", dependencies: [
"JSONUtilities",
"XcodeProj",
"Yams",
- "Core",
+ "XcodeGenCore",
"Version",
]),
- .target(name: "Core", dependencies: [
+ .target(name: "XcodeGenCore", dependencies: [
"PathKit",
"Yams",
]),
@@ -70,8 +70,8 @@ let package = Package(
"PathKit",
"TestSupport",
]),
- .testTarget(name: "CoreTests", dependencies: [
- "Core",
+ .testTarget(name: "XcodeGenCoreTests", dependencies: [
+ "XcodeGenCore",
"Spectre",
"PathKit",
"TestSupport",
diff --git a/Sources/ProjectSpec/CacheFile.swift b/Sources/ProjectSpec/CacheFile.swift
index 10e21afdc..c9c64692b 100644
--- a/Sources/ProjectSpec/CacheFile.swift
+++ b/Sources/ProjectSpec/CacheFile.swift
@@ -1,5 +1,5 @@
import Foundation
-import Core
+import XcodeGenCore
import Version
public class CacheFile {
diff --git a/Sources/XcodeGenCLI/Commands/ProjectCommand.swift b/Sources/XcodeGenCLI/Commands/ProjectCommand.swift
index 7866661a1..c47967784 100644
--- a/Sources/XcodeGenCLI/Commands/ProjectCommand.swift
+++ b/Sources/XcodeGenCLI/Commands/ProjectCommand.swift
@@ -3,7 +3,7 @@ import SwiftCLI
import ProjectSpec
import XcodeGenKit
import PathKit
-import Core
+import XcodeGenCore
import Version
class ProjectCommand: Command {
diff --git a/Sources/Core/Glob.swift b/Sources/XcodeGenCore/Glob.swift
similarity index 100%
rename from Sources/Core/Glob.swift
rename to Sources/XcodeGenCore/Glob.swift
diff --git a/Sources/Core/MD5.swift b/Sources/XcodeGenCore/MD5.swift
similarity index 100%
rename from Sources/Core/MD5.swift
rename to Sources/XcodeGenCore/MD5.swift
diff --git a/Sources/Core/PathExtensions.swift b/Sources/XcodeGenCore/PathExtensions.swift
similarity index 100%
rename from Sources/Core/PathExtensions.swift
rename to Sources/XcodeGenCore/PathExtensions.swift
diff --git a/Sources/Core/StringDiff.swift b/Sources/XcodeGenCore/StringDiff.swift
similarity index 100%
rename from Sources/Core/StringDiff.swift
rename to Sources/XcodeGenCore/StringDiff.swift
diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift
index 72b1d1c8b..c3987b743 100644
--- a/Sources/XcodeGenKit/SourceGenerator.swift
+++ b/Sources/XcodeGenKit/SourceGenerator.swift
@@ -2,7 +2,7 @@ import Foundation
import PathKit
import ProjectSpec
import XcodeProj
-import Core
+import XcodeGenCore
struct SourceFile {
let path: Path
diff --git a/Tests/CoreTests/GlobTests.swift b/Tests/XcodeGenCoreTests/GlobTests.swift
similarity index 99%
rename from Tests/CoreTests/GlobTests.swift
rename to Tests/XcodeGenCoreTests/GlobTests.swift
index 596ada743..101479515 100644
--- a/Tests/CoreTests/GlobTests.swift
+++ b/Tests/XcodeGenCoreTests/GlobTests.swift
@@ -7,7 +7,7 @@
// Adapted from https://gist.github.com/efirestone/ce01ae109e08772647eb061b3bb387c3
import XCTest
-@testable import Core
+@testable import XcodeGenCore
class GlobTests: XCTestCase {
diff --git a/Tests/CoreTests/PathExtensionsTests.swift b/Tests/XcodeGenCoreTests/PathExtensionsTests.swift
similarity index 99%
rename from Tests/CoreTests/PathExtensionsTests.swift
rename to Tests/XcodeGenCoreTests/PathExtensionsTests.swift
index ee9fd6e7a..d3bdc8b7e 100644
--- a/Tests/CoreTests/PathExtensionsTests.swift
+++ b/Tests/XcodeGenCoreTests/PathExtensionsTests.swift
@@ -1,7 +1,7 @@
import Spectre
import PathKit
import XCTest
-import Core
+import XcodeGenCore
import TestSupport
class PathExtensionsTests: XCTestCase {
From 8d918c1e7e2ea555ff0d332122275567dfe47409 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sat, 1 May 2021 13:40:20 +1000
Subject: [PATCH 069/284] updated changelog
---
CHANGELOG.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e0c313c70..1414946aa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,13 @@
# Change Log
## Next Version
+
#### Added
- Support weak link for Swift Package Dependency [#1064](https://github.com/yonaskolb/XcodeGen/pull/1064) @freddi-kit
+#### Fixed
+- The `Core` target is renamed to avoid collisions with other packages. [#1057](https://github.com/yonaskolb/XcodeGen/pull/1057) @elliottwilliams
+
## 2.20.0
#### Added
@@ -21,7 +25,6 @@
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
-- The `Core` target is renamed to avoid collisions with other packages. [#1057](https://github.com/yonaskolb/XcodeGen/pull/1057) @elliottwilliams
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.19.0...2.20.0)
From fb559ba153a14fefa1a5a92b3034a5d04e7dcfde Mon Sep 17 00:00:00 2001
From: Elliott Williams
Date: Fri, 30 Apr 2021 22:39:55 -0700
Subject: [PATCH 070/284] CarthageDependencyResolver: ignore order-only
dependencies (#1041)
* CarthageDependencyResolver: ignore target-only dependencies
* Update fixtures for expected changed in watchOS apps' FRAMEWORK_SEARCH_PATHS
* Update CHANGELOG.md
---
CHANGELOG.md | 1 +
.../CarthageDependencyResolver.swift | 3 +++
.../Project.xcodeproj/project.pbxproj | 24 -------------------
.../CarthageDependencyResolverTests.swift | 23 ++++++++++++++++++
4 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1414946aa..ee0a68eff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,7 @@
- Fixed framework search paths when using `.xcframework`s. [#1015](https://github.com/yonaskolb/XcodeGen/pull/1015) @FranzBusch
- Fixed bug where schemes without a build target would crash instead of displaying an error [#1040](https://github.com/yonaskolb/XcodeGen/pull/1040) @dalemyers
- Fixed files with names ending in **Info.plist** (such as **GoogleServices-Info.plist**) from being omitted from the Copy Resources build phase. Now, only the resolved info plist file for each specific target is omitted. [#1027](https://github.com/yonaskolb/XcodeGen/pull/1027) @liamnichols
+- Carthage frameworks are no longer embedded for "order-only" target dependencies. This avoid redundant embeds in situations where a target's sources _import_ a Carthage framework but do not have a binary dependency on it (like a test target which runs in a host app). [#1041](https://github.com/yonaskolb/XcodeGen/pull/1041) @elliottwilliams
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
diff --git a/Sources/XcodeGenKit/CarthageDependencyResolver.swift b/Sources/XcodeGenKit/CarthageDependencyResolver.swift
index 8a0b256a6..ac4588fb7 100644
--- a/Sources/XcodeGenKit/CarthageDependencyResolver.swift
+++ b/Sources/XcodeGenKit/CarthageDependencyResolver.swift
@@ -68,6 +68,9 @@ public class CarthageDependencyResolver {
if let target = projectTarget as? Target {
for dependency in target.dependencies {
+ if case (false, false) = (dependency.link, dependency.embed ?? topLevelTarget.shouldEmbedCarthageDependencies) {
+ continue
+ }
guard !frameworks.contains(where: { $0.dependency == dependency }) else {
continue
}
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index bb0de533f..4b8df8bcc 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -2809,10 +2809,6 @@
00FD318C7418F3351FC00744 /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/watchOS",
- );
INFOPLIST_FILE = App_watchOS/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
SDKROOT = watchos;
@@ -3333,10 +3329,6 @@
20803EC42C26E4EA13474E5A /* Production Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/watchOS",
- );
INFOPLIST_FILE = App_watchOS/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
SDKROOT = watchos;
@@ -4704,10 +4696,6 @@
7B2A1BE6CA654E9903A4C680 /* Staging Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/watchOS",
- );
INFOPLIST_FILE = App_watchOS/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
SDKROOT = watchos;
@@ -5457,10 +5445,6 @@
AABC1E325EADF86C5137D659 /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/watchOS",
- );
INFOPLIST_FILE = App_watchOS/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
SDKROOT = watchos;
@@ -5965,10 +5949,6 @@
C4397CDA0D458BAD55C911B0 /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/watchOS",
- );
INFOPLIST_FILE = App_watchOS/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
SDKROOT = watchos;
@@ -6869,10 +6849,6 @@
F3AC6A112F81D0958A316D82 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/watchOS",
- );
INFOPLIST_FILE = App_watchOS/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;
SDKROOT = watchos;
diff --git a/Tests/XcodeGenKitTests/CarthageDependencyResolverTests.swift b/Tests/XcodeGenKitTests/CarthageDependencyResolverTests.swift
index 935c8842a..0e160ea99 100644
--- a/Tests/XcodeGenKitTests/CarthageDependencyResolverTests.swift
+++ b/Tests/XcodeGenKitTests/CarthageDependencyResolverTests.swift
@@ -146,6 +146,29 @@ class CarthageDependencyResolverTests: XCTestCase {
try expect(related) == expectedDependencies
}
+
+ $0.it("skips dependencies which are not embedded") {
+ let resolver = CarthageDependencyResolver(project: makeTestProject())
+
+ let target = Target(name: "1", type: .application, platform: .iOS, dependencies: [
+ Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: dependencyFixtureName, embed: false, link: false)
+ ])
+ try expect(resolver.dependencies(for: target)) == []
+ }
+
+ $0.it("skips dependencies nested in targets which are not embedded") {
+ let nestedTarget = Target(name: "1", type: .framework, platform: .iOS, dependencies: [
+ Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: dependencyFixtureName)
+ ])
+
+ let resolver = CarthageDependencyResolver(project: makeTestProject(with: [nestedTarget]))
+
+ let target = Target(name: "2", type: .application, platform: .iOS, dependencies: [
+ Dependency(type: .target, reference: "1", embed: false, link: false)
+ ])
+ try expect(resolver.dependencies(for: target)) == []
+
+ }
}
}
From 3a193eacf94a2d21a87f70b513dbe6f8671e204b Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sat, 1 May 2021 15:49:39 +1000
Subject: [PATCH 071/284] update changelog
---
CHANGELOG.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ee0a68eff..39aec8967 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,9 @@
#### Added
- Support weak link for Swift Package Dependency [#1064](https://github.com/yonaskolb/XcodeGen/pull/1064) @freddi-kit
+#### Changed
+- Carthage frameworks are no longer embedded for "order-only" target dependencies. This avoid redundant embeds in situations where a target's sources _import_ a Carthage framework but do not have a binary dependency on it (like a test target which runs in a host app). [#1041](https://github.com/yonaskolb/XcodeGen/pull/1041) @elliottwilliams
+
#### Fixed
- The `Core` target is renamed to avoid collisions with other packages. [#1057](https://github.com/yonaskolb/XcodeGen/pull/1057) @elliottwilliams
@@ -22,7 +25,6 @@
- Fixed framework search paths when using `.xcframework`s. [#1015](https://github.com/yonaskolb/XcodeGen/pull/1015) @FranzBusch
- Fixed bug where schemes without a build target would crash instead of displaying an error [#1040](https://github.com/yonaskolb/XcodeGen/pull/1040) @dalemyers
- Fixed files with names ending in **Info.plist** (such as **GoogleServices-Info.plist**) from being omitted from the Copy Resources build phase. Now, only the resolved info plist file for each specific target is omitted. [#1027](https://github.com/yonaskolb/XcodeGen/pull/1027) @liamnichols
-- Carthage frameworks are no longer embedded for "order-only" target dependencies. This avoid redundant embeds in situations where a target's sources _import_ a Carthage framework but do not have a binary dependency on it (like a test target which runs in a host app). [#1041](https://github.com/yonaskolb/XcodeGen/pull/1041) @elliottwilliams
#### Internal
- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. [#1024](https://github.com/yonaskolb/XcodeGen/pull/1024) @thii
From dfe7f28bcb32decc476d9b7a0b25e8227ae8e45b Mon Sep 17 00:00:00 2001
From: Stefano Mondino
Date: Sat, 1 May 2021 07:50:39 +0200
Subject: [PATCH 072/284] Scheme config variants wrong assignment for similar
config names (#976)
* Failing test for #975
* fixes #975
* chore: refactor to properly select a config from a collection with specific variant and config type
chore: updated changelog
* fix: lowercase compare on config variant names
* fix CI
* fix missing scheme for CI
* fix schemes for CI
* Update CHANGELOG.md
Co-authored-by: Yonas Kolb
* Update Sources/ProjectSpec/Config.swift
Co-authored-by: Yonas Kolb
* - fix compilation issue
- duplicated test for config variant name (uppercase/lowercase)
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 3 ++
Sources/ProjectSpec/Config.swift | 26 ++++++++++-
Sources/ProjectSpec/SpecValidation.swift | 6 +--
Sources/XcodeGenKit/SchemeGenerator.swift | 9 ++--
Tests/PerformanceTests/TestProject.swift | 4 +-
.../SchemeGeneratorTests.swift | 44 ++++++++++++-------
6 files changed, 66 insertions(+), 26 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 39aec8967..3b9828f41 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -58,6 +58,9 @@
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.18.0...2.19.0)
+#### Fixed
+- Lookup scheme config variants by whole words, fixing incorrect assignment in names that contain subtrings of each other (eg PreProd and Prod) [#976](https://github.com/yonaskolb/XcodeGen/pull/976) @stefanomondino
+
## 2.18.0
#### Added
diff --git a/Sources/ProjectSpec/Config.swift b/Sources/ProjectSpec/Config.swift
index c8772b7ce..70247873b 100644
--- a/Sources/ProjectSpec/Config.swift
+++ b/Sources/ProjectSpec/Config.swift
@@ -10,10 +10,34 @@ public struct Config: Hashable {
self.type = type
}
- public static var defaultConfigs: [Config] = [Config(name: "Debug", type: .debug), Config(name: "Release", type: .release)]
+ public static var defaultConfigs: [Config] = [Config(name: ConfigType.debug.name, type: .debug), Config(name: ConfigType.release.name, type: .release)]
}
public enum ConfigType: String {
case debug
case release
+
+ public var name: String {
+ rawValue.prefix(1).uppercased() + rawValue.dropFirst()
+ }
+}
+
+public extension Collection where Element == Config {
+ func first(including configVariant: String, for type: ConfigType) -> Config? {
+ first(where: { $0.type == type && $0.name.variantName(for: $0.type) == configVariant })
+ }
+}
+
+private extension String {
+ func variantName(for configType: ConfigType?) -> String {
+ self.components(separatedBy: " ")
+ .compactMap { component in
+ if component.lowercased() == (configType?.name.lowercased() ?? "") {
+ return nil
+ }
+ return component
+ }
+ .joined(separator: " ")
+ .trimmingCharacters(in: CharacterSet.whitespaces)
+ }
}
diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift
index 923f99684..fd1049c6e 100644
--- a/Sources/ProjectSpec/SpecValidation.swift
+++ b/Sources/ProjectSpec/SpecValidation.swift
@@ -90,16 +90,16 @@ extension Project {
}
if let scheme = target.scheme {
-
+
for configVariant in scheme.configVariants {
- if !configs.contains(where: { $0.name.contains(configVariant) && $0.type == .debug }) {
+ if configs.first(including: configVariant, for: .debug) == nil {
errors.append(.invalidTargetSchemeConfigVariant(
target: target.name,
configVariant: configVariant,
configType: .debug
))
}
- if !configs.contains(where: { $0.name.contains(configVariant) && $0.type == .release }) {
+ if configs.first(including: configVariant, for: .release) == nil {
errors.append(.invalidTargetSchemeConfigVariant(
target: target.name,
configVariant: configVariant,
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 3b81d1da5..c45c87d96 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -70,12 +70,13 @@ public class SchemeGenerator {
for configVariant in targetScheme.configVariants {
let schemeName = "\(target.name) \(configVariant)"
-
+
let debugConfig = project.configs
- .first { $0.type == .debug && $0.name.contains(configVariant) }!
+ .first(including: configVariant, for: .debug)!
+
let releaseConfig = project.configs
- .first { $0.type == .release && $0.name.contains(configVariant) }!
-
+ .first(including: configVariant, for: .release)!
+
let scheme = Scheme(
name: schemeName,
target: target,
diff --git a/Tests/PerformanceTests/TestProject.swift b/Tests/PerformanceTests/TestProject.swift
index cb7a6ae1c..e1d8edc9f 100644
--- a/Tests/PerformanceTests/TestProject.swift
+++ b/Tests/PerformanceTests/TestProject.swift
@@ -116,8 +116,8 @@ extension Project {
Config(name: "Release Test", type: .release),
Config(name: "Debug Staging", type: .debug),
Config(name: "Release Staging", type: .release),
- Config(name: "Debug Production", type: .debug),
- Config(name: "Release Production", type: .release),
+ Config(name: "Debug Prod", type: .debug),
+ Config(name: "Release Prod", type: .release),
],
targets: targets,
aggregateTargets: [],
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index ce7cd5f03..ac392130d 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -193,32 +193,44 @@ class SchemeGeneratorTests: XCTestCase {
}
$0.it("generates target schemes from config variant") {
- let configVariants = ["Test", "Production"]
+ let configVariants = ["Test", "PreProd", "Prod"]
var target = app
target.scheme = TargetScheme(configVariants: configVariants)
+
+ // Including here a double test for custom upper/lowercase in config types
let configs: [Config] = [
Config(name: "Test Debug", type: .debug),
- Config(name: "Production Debug", type: .debug),
+ Config(name: "PreProd debug", type: .debug),
+ Config(name: "Prod Debug", type: .debug),
Config(name: "Test Release", type: .release),
- Config(name: "Production Release", type: .release),
+ Config(name: "PreProd release", type: .release),
+ Config(name: "Prod Release", type: .release),
]
let project = Project(name: "test", configs: configs, targets: [target, framework])
let xcodeProject = try project.generateXcodeProject()
- try expect(xcodeProject.sharedData?.schemes.count) == 2
-
- let xcscheme = try unwrap(xcodeProject.sharedData?.schemes
- .first(where: { $0.name == "\(target.name) Test" }))
- let buildActionEntry = try unwrap(xcscheme.buildAction?.buildActionEntries.first)
-
- try expect(buildActionEntry.buildableReference.blueprintIdentifier.count > 0) == true
-
- try expect(xcscheme.launchAction?.buildConfiguration) == "Test Debug"
- try expect(xcscheme.testAction?.buildConfiguration) == "Test Debug"
- try expect(xcscheme.profileAction?.buildConfiguration) == "Test Release"
- try expect(xcscheme.analyzeAction?.buildConfiguration) == "Test Debug"
- try expect(xcscheme.archiveAction?.buildConfiguration) == "Test Release"
+ try expect(xcodeProject.sharedData?.schemes.count) == 3
+ try configVariants.forEach { variantName in
+ let xcscheme = try unwrap(xcodeProject.sharedData?.schemes
+ .first(where: { $0.name == "\(target.name) \(variantName)" }))
+ let buildActionEntry = try unwrap(xcscheme.buildAction?.buildActionEntries.first)
+
+ try expect(buildActionEntry.buildableReference.blueprintIdentifier.count > 0) == true
+ if variantName == "PreProd" {
+ try expect(xcscheme.launchAction?.buildConfiguration) == "\(variantName) debug"
+ try expect(xcscheme.testAction?.buildConfiguration) == "\(variantName) debug"
+ try expect(xcscheme.profileAction?.buildConfiguration) == "\(variantName) release"
+ try expect(xcscheme.analyzeAction?.buildConfiguration) == "\(variantName) debug"
+ try expect(xcscheme.archiveAction?.buildConfiguration) == "\(variantName) release"
+ } else {
+ try expect(xcscheme.launchAction?.buildConfiguration) == "\(variantName) Debug"
+ try expect(xcscheme.testAction?.buildConfiguration) == "\(variantName) Debug"
+ try expect(xcscheme.profileAction?.buildConfiguration) == "\(variantName) Release"
+ try expect(xcscheme.analyzeAction?.buildConfiguration) == "\(variantName) Debug"
+ try expect(xcscheme.archiveAction?.buildConfiguration) == "\(variantName) Release"
+ }
+ }
}
$0.it("generates environment variables for target schemes") {
From 5b1b56df4a2f653720604d23725e1d5f708e0221 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sat, 1 May 2021 15:51:49 +1000
Subject: [PATCH 073/284] update changelog
---
CHANGELOG.md | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3b9828f41..0258cd5b9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
#### Fixed
- The `Core` target is renamed to avoid collisions with other packages. [#1057](https://github.com/yonaskolb/XcodeGen/pull/1057) @elliottwilliams
+- Lookup scheme config variants by whole words, fixing incorrect assignment in names that contain subtrings of each other (eg PreProd and Prod) [#976](https://github.com/yonaskolb/XcodeGen/pull/976) @stefanomondino
## 2.20.0
@@ -58,9 +59,6 @@
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.18.0...2.19.0)
-#### Fixed
-- Lookup scheme config variants by whole words, fixing incorrect assignment in names that contain subtrings of each other (eg PreProd and Prod) [#976](https://github.com/yonaskolb/XcodeGen/pull/976) @stefanomondino
-
## 2.18.0
#### Added
From a6cfa0e5b656ee984143bfdb7779f87f08b38fe1 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sat, 1 May 2021 16:08:50 +1000
Subject: [PATCH 074/284] Update to 2.21.0
---
CHANGELOG.md | 4 ++++
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0258cd5b9..a6b81ea22 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Next Version
+## 2.21.0
+
#### Added
- Support weak link for Swift Package Dependency [#1064](https://github.com/yonaskolb/XcodeGen/pull/1064) @freddi-kit
@@ -12,6 +14,8 @@
- The `Core` target is renamed to avoid collisions with other packages. [#1057](https://github.com/yonaskolb/XcodeGen/pull/1057) @elliottwilliams
- Lookup scheme config variants by whole words, fixing incorrect assignment in names that contain subtrings of each other (eg PreProd and Prod) [#976](https://github.com/yonaskolb/XcodeGen/pull/976) @stefanomondino
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.20.0...2.21.0)
+
## 2.20.0
#### Added
diff --git a/Makefile b/Makefile
index 38d04f741..f695f7611 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.20.0
+VERSION = 2.21.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 65333f668..24f7144db 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.20.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.21.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index 500d46e95..484fe5ed0 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.20.0")
+let version = Version("2.21.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From 69a1cd56b5a3c24cafac9996647f12630a483b3c Mon Sep 17 00:00:00 2001
From: Yasuharu Yanamura
Date: Sun, 2 May 2021 10:55:43 +0900
Subject: [PATCH 075/284] Fix no such module 'DOT' (#1065)
* Update GraphViz to 0.4.0
* Update CHANGELOG.md
---
CHANGELOG.md | 3 +++
Package.resolved | 4 ++--
Package.swift | 2 +-
Sources/XcodeGenKit/GraphVizGenerator.swift | 1 -
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a6b81ea22..96f8edad9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+#### Fixed
+- Fixed no such mocule `DOT` error [#1065](https://github.com/yonaskolb/XcodeGen/pull/1065) @yanamura
+
## 2.21.0
#### Added
diff --git a/Package.resolved b/Package.resolved
index 26a8147f3..35579516d 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -15,8 +15,8 @@
"repositoryURL": "https://github.com/SwiftDocOrg/GraphViz.git",
"state": {
"branch": null,
- "revision": "70bebcf4597b9ce33e19816d6bbd4ba9b7bdf038",
- "version": "0.2.0"
+ "revision": "e9a73a30755c3c5b26ba7c73312b1f2ccb9a1a30",
+ "version": "0.4.0"
}
},
{
diff --git a/Package.swift b/Package.swift
index 3db1b9343..2d9ec7477 100644
--- a/Package.swift
+++ b/Package.swift
@@ -19,7 +19,7 @@ let package = Package(
.package(url: "https://github.com/tuist/XcodeProj.git", from: "7.18.0"),
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
- .package(url: "https://github.com/SwiftDocOrg/GraphViz.git", from: "0.1.0"),
+ .package(url: "https://github.com/SwiftDocOrg/GraphViz.git", from: "0.4.0"),
],
targets: [
.target(name: "XcodeGen", dependencies: [
diff --git a/Sources/XcodeGenKit/GraphVizGenerator.swift b/Sources/XcodeGenKit/GraphVizGenerator.swift
index e7e97b02f..74665e2da 100644
--- a/Sources/XcodeGenKit/GraphVizGenerator.swift
+++ b/Sources/XcodeGenKit/GraphVizGenerator.swift
@@ -1,4 +1,3 @@
-import DOT
import Foundation
import GraphViz
import ProjectSpec
From 1df0bb3e7b65bd01cef457399d53bf5050c2b46c Mon Sep 17 00:00:00 2001
From: Yasuharu Yanamura
Date: Wed, 5 May 2021 07:45:42 +0900
Subject: [PATCH 076/284] Fix no such module 'DOT' by pinning GraphViz 0.2.0
(#1067)
* Revert "Fix no such module 'DOT' (#1065)"
This reverts commit 69a1cd56b5a3c24cafac9996647f12630a483b3c.
* pin GraphViz v0.2.0
* update CHANGELOG
---
CHANGELOG.md | 2 +-
Package.resolved | 4 ++--
Package.swift | 2 +-
Sources/XcodeGenKit/GraphVizGenerator.swift | 1 +
4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96f8edad9..55ce845ab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
## Next Version
#### Fixed
-- Fixed no such mocule `DOT` error [#1065](https://github.com/yonaskolb/XcodeGen/pull/1065) @yanamura
+- Fixed no such module `DOT` error [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
## 2.21.0
diff --git a/Package.resolved b/Package.resolved
index 35579516d..26a8147f3 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -15,8 +15,8 @@
"repositoryURL": "https://github.com/SwiftDocOrg/GraphViz.git",
"state": {
"branch": null,
- "revision": "e9a73a30755c3c5b26ba7c73312b1f2ccb9a1a30",
- "version": "0.4.0"
+ "revision": "70bebcf4597b9ce33e19816d6bbd4ba9b7bdf038",
+ "version": "0.2.0"
}
},
{
diff --git a/Package.swift b/Package.swift
index 2d9ec7477..cbbb27106 100644
--- a/Package.swift
+++ b/Package.swift
@@ -19,7 +19,7 @@ let package = Package(
.package(url: "https://github.com/tuist/XcodeProj.git", from: "7.18.0"),
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
- .package(url: "https://github.com/SwiftDocOrg/GraphViz.git", from: "0.4.0"),
+ .package(url: "https://github.com/SwiftDocOrg/GraphViz.git", .exact("0.2.0")),
],
targets: [
.target(name: "XcodeGen", dependencies: [
diff --git a/Sources/XcodeGenKit/GraphVizGenerator.swift b/Sources/XcodeGenKit/GraphVizGenerator.swift
index 74665e2da..e7e97b02f 100644
--- a/Sources/XcodeGenKit/GraphVizGenerator.swift
+++ b/Sources/XcodeGenKit/GraphVizGenerator.swift
@@ -1,3 +1,4 @@
+import DOT
import Foundation
import GraphViz
import ProjectSpec
From 05a64bd05da70eb97ab908d66544458a420b3937 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Wed, 5 May 2021 12:49:04 +1000
Subject: [PATCH 077/284] Update CHANGELOG.md
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 55ce845ab..ae579faf5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
## Next Version
#### Fixed
-- Fixed no such module `DOT` error [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
+- Fixed no such module `DOT` error when package is used as a dependency [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
## 2.21.0
From 98cde509dd4219f78aac4f46c0b9011f5b91b4f8 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sun, 2 May 2021 12:38:08 +1000
Subject: [PATCH 078/284] Update to 2.21.1
---
CHANGELOG.md | 4 ++++
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ae579faf5..2c973eb3f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,9 +2,13 @@
## Next Version
+## 2.21.1
+
#### Fixed
- Fixed no such module `DOT` error when package is used as a dependency [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.21.0...2.21.1)
+
## 2.21.0
#### Added
diff --git a/Makefile b/Makefile
index f695f7611..f4100679b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.21.0
+VERSION = 2.21.1
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 24f7144db..020640cd8 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.21.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.21.1"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index 484fe5ed0..e9854ad3a 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.21.0")
+let version = Version("2.21.1")
let cli = XcodeGenCLI(version: version)
cli.execute()
From 8a0615e883584b221c7433d66c22668b4c409899 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Thu, 6 May 2021 00:07:38 +1000
Subject: [PATCH 079/284] Fix config variant lookup (#1070)
* fix config lookup
* update changelog
---
CHANGELOG.md | 1 +
Sources/ProjectSpec/Config.swift | 26 +++++++++----------
Tests/ProjectSpecTests/ProjectSpecTests.swift | 21 +++++++++++++++
.../SchemeGeneratorTests.swift | 12 ++++-----
4 files changed, 40 insertions(+), 20 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2c973eb3f..116f13009 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@
#### Fixed
- Fixed no such module `DOT` error when package is used as a dependency [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
+- Fixed scheme config variant lookups for some configs like `ProdDebug` and `Prod-Debug` that broke in 2.21.0 [#1070](https://github.com/yonaskolb/XcodeGen/pull/1070) @yonaskolb
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.21.0...2.21.1)
diff --git a/Sources/ProjectSpec/Config.swift b/Sources/ProjectSpec/Config.swift
index 70247873b..6eddcc4a2 100644
--- a/Sources/ProjectSpec/Config.swift
+++ b/Sources/ProjectSpec/Config.swift
@@ -22,22 +22,20 @@ public enum ConfigType: String {
}
}
-public extension Collection where Element == Config {
- func first(including configVariant: String, for type: ConfigType) -> Config? {
- first(where: { $0.type == type && $0.name.variantName(for: $0.type) == configVariant })
+extension Config {
+
+ public func matchesVariant(_ variant: String, for type: ConfigType) -> Bool {
+ guard self.type == type else { return false }
+ let nameWithoutType = self.name.lowercased()
+ .replacingOccurrences(of: type.name.lowercased(), with: "")
+ .trimmingCharacters(in: CharacterSet(charactersIn: " -_"))
+ return nameWithoutType == variant.lowercased()
}
}
-private extension String {
- func variantName(for configType: ConfigType?) -> String {
- self.components(separatedBy: " ")
- .compactMap { component in
- if component.lowercased() == (configType?.name.lowercased() ?? "") {
- return nil
- }
- return component
- }
- .joined(separator: " ")
- .trimmingCharacters(in: CharacterSet.whitespaces)
+public extension Collection where Element == Config {
+ func first(including configVariant: String, for type: ConfigType) -> Config? {
+ first { $0.matchesVariant(configVariant, for: type) }
}
}
+
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index 7284a799d..1b2bfd858 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -339,6 +339,27 @@ class ProjectSpecTests: XCTestCase {
project.schemes = [scheme]
try project.validate()
}
+
+ $0.it("validates scheme variants") {
+
+ func expectVariant(_ variant: String, type: ConfigType = .debug, for config: Config, matches: Bool, file: String = #file, line: Int = #line) throws {
+ let configs = [Config(name: "xxxxxxxxxxx", type: .debug), config]
+ let foundConfig = configs.first(including: variant, for: type)
+ let found = foundConfig != nil && foundConfig != configs[0]
+ try expect(found, file: file, line: line) == matches
+ }
+
+ try expectVariant("Dev", for: Config(name: "DevDebug", type: .debug), matches: true)
+ try expectVariant("Dev", for: Config(name: "Dev debug", type: .debug), matches: true)
+ try expectVariant("Dev", for: Config(name: "DEV DEBUG", type: .debug), matches: true)
+ try expectVariant("Dev", for: Config(name: "Debug Dev", type: .debug), matches: true)
+ try expectVariant("Dev", for: Config(name: "dev Debug", type: .debug), matches: true)
+ try expectVariant("Dev", for: Config(name: "Dev debug", type: .release), matches: false)
+ try expectVariant("Dev", for: Config(name: "Dev-debug", type: .debug), matches: true)
+ try expectVariant("Dev", for: Config(name: "Dev_debug", type: .debug), matches: true)
+ try expectVariant("Prod", for: Config(name: "PreProd debug", type: .debug), matches: false)
+ try expectVariant("Develop", for: Config(name: "Dev debug", type: .debug), matches: false)
+ }
}
}
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index ac392130d..1aa42972d 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -197,11 +197,11 @@ class SchemeGeneratorTests: XCTestCase {
var target = app
target.scheme = TargetScheme(configVariants: configVariants)
- // Including here a double test for custom upper/lowercase in config types
+ // Including here a double test for custom upper/lowercase, and dash delimited in config types
let configs: [Config] = [
- Config(name: "Test Debug", type: .debug),
+ Config(name: "Test-Debug", type: .debug),
Config(name: "PreProd debug", type: .debug),
- Config(name: "Prod Debug", type: .debug),
+ Config(name: "Prod-Debug", type: .debug),
Config(name: "Test Release", type: .release),
Config(name: "PreProd release", type: .release),
Config(name: "Prod Release", type: .release),
@@ -224,10 +224,10 @@ class SchemeGeneratorTests: XCTestCase {
try expect(xcscheme.analyzeAction?.buildConfiguration) == "\(variantName) debug"
try expect(xcscheme.archiveAction?.buildConfiguration) == "\(variantName) release"
} else {
- try expect(xcscheme.launchAction?.buildConfiguration) == "\(variantName) Debug"
- try expect(xcscheme.testAction?.buildConfiguration) == "\(variantName) Debug"
+ try expect(xcscheme.launchAction?.buildConfiguration) == "\(variantName)-Debug"
+ try expect(xcscheme.testAction?.buildConfiguration) == "\(variantName)-Debug"
try expect(xcscheme.profileAction?.buildConfiguration) == "\(variantName) Release"
- try expect(xcscheme.analyzeAction?.buildConfiguration) == "\(variantName) Debug"
+ try expect(xcscheme.analyzeAction?.buildConfiguration) == "\(variantName)-Debug"
try expect(xcscheme.archiveAction?.buildConfiguration) == "\(variantName) Release"
}
}
From 7c510af3d7655eb77b4eee231963040ef8795dc8 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Thu, 6 May 2021 08:33:42 +1000
Subject: [PATCH 080/284] Fix Xcode alert on generation (#1072)
* fix xcode warning alert on regeneration
* commit fixture diffs
* update changelog
---
CHANGELOG.md | 1 +
Package.resolved | 8 ++++----
Sources/XcodeGenKit/ProjectGenerator.swift | 3 ++-
.../project.xcworkspace/contents.xcworkspacedata | 2 +-
.../project.xcworkspace/contents.xcworkspacedata | 2 +-
.../SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme | 3 ++-
.../project.xcworkspace/contents.xcworkspacedata | 2 +-
.../project.xcworkspace/contents.xcworkspacedata | 2 +-
.../xcshareddata/xcschemes/App_Clip.xcscheme | 3 ++-
.../xcshareddata/xcschemes/App_Scheme.xcscheme | 3 ++-
.../xcshareddata/xcschemes/App_iOS Production.xcscheme | 3 ++-
.../xcshareddata/xcschemes/App_iOS Staging.xcscheme | 3 ++-
.../xcshareddata/xcschemes/App_iOS Test.xcscheme | 3 ++-
.../xcshareddata/xcschemes/App_macOS.xcscheme | 3 ++-
.../xcshareddata/xcschemes/App_watchOS.xcscheme | 3 ++-
.../xcshareddata/xcschemes/Framework.xcscheme | 3 ++-
.../xcshareddata/xcschemes/Tool.xcscheme | 3 ++-
.../xcshareddata/xcschemes/iMessageApp.xcscheme | 3 ++-
.../xcshareddata/xcschemes/iMessageExtension.xcscheme | 3 ++-
.../project.xcworkspace/contents.xcworkspacedata | 2 +-
20 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 116f13009..4c8b43031 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
#### Fixed
- Fixed no such module `DOT` error when package is used as a dependency [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
- Fixed scheme config variant lookups for some configs like `ProdDebug` and `Prod-Debug` that broke in 2.21.0 [#1070](https://github.com/yonaskolb/XcodeGen/pull/1070) @yonaskolb
+- Fixed Xcode alerting to project changes after regeneration [#1072](https://github.com/yonaskolb/XcodeGen/pull/1072) @yonaskolb
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.21.0...2.21.1)
diff --git a/Package.resolved b/Package.resolved
index 26a8147f3..9c25e6d48 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -78,8 +78,8 @@
"repositoryURL": "https://github.com/tuist/XcodeProj.git",
"state": {
"branch": null,
- "revision": "82bf5efcaa27e94ed8c761c1eb3e397b6dea82b9",
- "version": "7.18.0"
+ "revision": "94e55232d227f9d78b811c98cb2e5d0cbd08987b",
+ "version": "7.22.0"
}
},
{
@@ -87,8 +87,8 @@
"repositoryURL": "https://github.com/jpsim/Yams.git",
"state": {
"branch": null,
- "revision": "138cf1b701cf825233b92ceac919152d5aba8a3f",
- "version": "4.0.1"
+ "revision": "9ff1cc9327586db4e0c8f46f064b6a82ec1566fa",
+ "version": "4.0.6"
}
}
]
diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift
index 8fb149c6f..65f3216ec 100644
--- a/Sources/XcodeGenKit/ProjectGenerator.swift
+++ b/Sources/XcodeGenKit/ProjectGenerator.swift
@@ -32,7 +32,8 @@ public class ProjectGenerator {
}
func generateWorkspace() throws -> XCWorkspace {
- let dataElement: XCWorkspaceDataElement = .file(XCWorkspaceDataFileRef(location: .self(project.defaultProjectPath.lastComponent)))
+ let selfReference = XCWorkspaceDataFileRef(location: .`self`(""))
+ let dataElement = XCWorkspaceDataElement.file(selfReference)
let workspaceData = XCWorkspaceData(children: [dataElement])
return XCWorkspace(data: workspaceData)
}
diff --git a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 881a6dff3..919434a62 100644
--- a/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/Tests/Fixtures/CarthageProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 4c49d31b6..919434a62 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme b/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme
index 3c95caf37..ed6efd9af 100644
--- a/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme
+++ b/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme
@@ -4,7 +4,8 @@
version = "1.3">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ location = "self:">
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 881a6dff3..919434a62 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme
index 87860eacc..45020c38c 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme
@@ -4,7 +4,8 @@
version = "1.3">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "NO"
+ runPostActionsOnFailure = "NO">
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
index aa620c94c..2e8e81306 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme
@@ -4,7 +4,8 @@
version = "1.3">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ buildImplicitDependencies = "YES"
+ runPostActionsOnFailure = "NO">
+ location = "self:">
From 4233cc8578b660f7a5df2a345fd3bbaf425af747 Mon Sep 17 00:00:00 2001
From: "freddi(Yuki Aki)"
Date: Thu, 6 May 2021 11:54:33 +0900
Subject: [PATCH 081/284] Support runPostActionsOnFailure on build scheme
(#1075)
* supports runPostActionsOnFailure on build scheme
* updates test for runPostActionsOnFailure
update runPostActionsOnFailure tests
* update Docs for runPostActionsOnFailure
* update change log
* Update CHANGELOG.md
* Update CHANGELOG.md
---
CHANGELOG.md | 3 +++
Docs/ProjectSpec.md | 5 +++++
Sources/ProjectSpec/Scheme.swift | 10 +++++++++-
Sources/XcodeGenKit/SchemeGenerator.swift | 3 ++-
.../xcshareddata/xcschemes/Framework.xcscheme | 2 +-
Tests/Fixtures/TestProject/project.yml | 1 +
Tests/ProjectSpecTests/SpecLoadingTests.swift | 4 ++++
Tests/XcodeGenKitTests/SchemeGeneratorTests.swift | 1 +
8 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4c8b43031..592ad88d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
## 2.21.1
+#### Added
+- Support `runPostActionsOnFailure` for running build post scripts on failing build [#1075](https://github.com/yonaskolb/XcodeGen/pull/1075) @freddi-kit
+
#### Fixed
- Fixed no such module `DOT` error when package is used as a dependency [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
- Fixed scheme config variant lookups for some configs like `ProdDebug` and `Prod-Debug` that broke in 2.21.0 [#1070](https://github.com/yonaskolb/XcodeGen/pull/1070) @yonaskolb
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 6487a9a6b..dfeedd7cc 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -752,6 +752,11 @@ Schemes allows for more control than the convenience [Target Scheme](#target-sch
- `true`: Discover implicit dependencies of this scheme
- `false`: Only build explicit dependencies of this scheme
+- [ ] **runPostActionsOnFailure**: **Bool** - Flag to determine if Xcode should run post scripts despite failure build. By default this is `false` if not set.
+- `true`: Run post scripts even if build is failed
+- `false`: Only run post scripts if build success
+
+
```yaml
targets:
MyTarget: all
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index 47d8ad8aa..e5e30b1b0 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -73,25 +73,29 @@ public struct Scheme: Equatable {
public struct Build: Equatable {
public static let parallelizeBuildDefault = true
public static let buildImplicitDependenciesDefault = true
+ public static let runPostActionsOnFailureDefault = false
public var targets: [BuildTarget]
public var parallelizeBuild: Bool
public var buildImplicitDependencies: Bool
public var preActions: [ExecutionAction]
public var postActions: [ExecutionAction]
+ public var runPostActionsOnFailure: Bool
public init(
targets: [BuildTarget],
parallelizeBuild: Bool = parallelizeBuildDefault,
buildImplicitDependencies: Bool = buildImplicitDependenciesDefault,
preActions: [ExecutionAction] = [],
- postActions: [ExecutionAction] = []
+ postActions: [ExecutionAction] = [],
+ runPostActionsOnFailure: Bool = false
) {
self.targets = targets
self.parallelizeBuild = parallelizeBuild
self.buildImplicitDependencies = buildImplicitDependencies
self.preActions = preActions
self.postActions = postActions
+ self.runPostActionsOnFailure = runPostActionsOnFailure
}
}
@@ -671,6 +675,7 @@ extension Scheme.Build: JSONObjectConvertible {
postActions = try jsonDictionary.json(atKeyPath: "postActions")?.map(Scheme.ExecutionAction.init) ?? []
parallelizeBuild = jsonDictionary.json(atKeyPath: "parallelizeBuild") ?? Scheme.Build.parallelizeBuildDefault
buildImplicitDependencies = jsonDictionary.json(atKeyPath: "buildImplicitDependencies") ?? Scheme.Build.buildImplicitDependenciesDefault
+ runPostActionsOnFailure = jsonDictionary.json(atKeyPath: "runPostActionsOnFailure") ?? Scheme.Build.runPostActionsOnFailureDefault
}
}
@@ -690,6 +695,9 @@ extension Scheme.Build: JSONEncodable {
if buildImplicitDependencies != Scheme.Build.buildImplicitDependenciesDefault {
dict["buildImplicitDependencies"] = buildImplicitDependencies
}
+ if runPostActionsOnFailure != Scheme.Build.runPostActionsOnFailureDefault {
+ dict["runPostActionsOnFailure"] = runPostActionsOnFailure
+ }
return dict
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index c45c87d96..907e2e5d4 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -183,7 +183,8 @@ public class SchemeGenerator {
preActions: scheme.build.preActions.map(getExecutionAction),
postActions: scheme.build.postActions.map(getExecutionAction),
parallelizeBuild: scheme.build.parallelizeBuild,
- buildImplicitDependencies: scheme.build.buildImplicitDependencies
+ buildImplicitDependencies: scheme.build.buildImplicitDependencies,
+ runPostActionsOnFailure: scheme.build.runPostActionsOnFailure
)
let testables = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuilEntries in
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
index 5110e3d12..e759440c0 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
@@ -5,7 +5,7 @@
+ runPostActionsOnFailure = "YES">
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 007117770..9ee74b93d 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -341,6 +341,7 @@ schemes:
preActions:
- script: echo Starting Framework Build
settingsTarget: Framework_iOS
+ runPostActionsOnFailure: true
run:
commandLineArguments:
argument: YES
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 015f62e73..9505eb5c4 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -756,6 +756,7 @@ class SpecLoadingTests: XCTestCase {
"build": [
"parallelizeBuild": false,
"buildImplicitDependencies": false,
+ "runPostActionsOnFailure": true,
"targets": [
"Target1": "all",
"Target2": "testing",
@@ -813,6 +814,7 @@ class SpecLoadingTests: XCTestCase {
try expect(scheme.build.parallelizeBuild) == false
try expect(scheme.build.buildImplicitDependencies) == false
+ try expect(scheme.build.runPostActionsOnFailure) == true
let expectedRun = Scheme.Run(
config: "debug",
@@ -981,6 +983,7 @@ class SpecLoadingTests: XCTestCase {
"build": [
"parallelizeBuild": false,
"buildImplicitDependencies": false,
+ "runPostActionsOnFailure": true,
"targets": [
"Target${name_1}": "all",
"Target2": "testing",
@@ -1046,6 +1049,7 @@ class SpecLoadingTests: XCTestCase {
try expect(scheme.build.parallelizeBuild) == false
try expect(scheme.build.buildImplicitDependencies) == false
+ try expect(scheme.build.runPostActionsOnFailure) == true
try expect(scheme.run?.storeKitConfiguration) == "Configuration.storekit"
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 1aa42972d..0fd95eef1 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -69,6 +69,7 @@ class SchemeGeneratorTests: XCTestCase {
try expect(scheme.name) == "MyScheme"
try expect(xcscheme.buildAction?.buildImplicitDependencies) == true
try expect(xcscheme.buildAction?.parallelizeBuild) == true
+ try expect(xcscheme.buildAction?.runPostActionsOnFailure) == false
try expect(xcscheme.buildAction?.preActions.first?.title) == "Script"
try expect(xcscheme.buildAction?.preActions.first?.scriptText) == "echo Starting"
try expect(xcscheme.buildAction?.preActions.first?.environmentBuildable?.buildableName) == "MyApp.app"
From 34dd90ad612fcd09bfe0a6b7e5bf0399d4451966 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Thu, 6 May 2021 20:43:05 +1000
Subject: [PATCH 082/284] Update to 2.22.0
---
CHANGELOG.md | 4 ++--
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 592ad88d6..e02e54fd4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
## Next Version
-## 2.21.1
+## 2.22.0
#### Added
- Support `runPostActionsOnFailure` for running build post scripts on failing build [#1075](https://github.com/yonaskolb/XcodeGen/pull/1075) @freddi-kit
@@ -12,7 +12,7 @@
- Fixed scheme config variant lookups for some configs like `ProdDebug` and `Prod-Debug` that broke in 2.21.0 [#1070](https://github.com/yonaskolb/XcodeGen/pull/1070) @yonaskolb
- Fixed Xcode alerting to project changes after regeneration [#1072](https://github.com/yonaskolb/XcodeGen/pull/1072) @yonaskolb
-[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.21.0...2.21.1)
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.21.0...2.22.0)
## 2.21.0
diff --git a/Makefile b/Makefile
index f4100679b..e9a01262f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.21.1
+VERSION = 2.22.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 020640cd8..087f73615 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.21.1"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.22.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index e9854ad3a..32aacfd47 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.21.1")
+let version = Version("2.22.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From dc8544f34613ba06f6f26c81e6e8b5c442715378 Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Thu, 6 May 2021 20:51:51 +1000
Subject: [PATCH 083/284] Update CHANGELOG.md
---
CHANGELOG.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e02e54fd4..145b7c901 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,10 +7,12 @@
#### Added
- Support `runPostActionsOnFailure` for running build post scripts on failing build [#1075](https://github.com/yonaskolb/XcodeGen/pull/1075) @freddi-kit
+#### Changed
+- Xcode no longer alerts to project changes after regeneration, due to internal workspace not regenerating if identical [#1072](https://github.com/yonaskolb/XcodeGen/pull/1072) @yonaskolb
+
#### Fixed
- Fixed no such module `DOT` error when package is used as a dependency [#1067](https://github.com/yonaskolb/XcodeGen/pull/1067) @yanamura
- Fixed scheme config variant lookups for some configs like `ProdDebug` and `Prod-Debug` that broke in 2.21.0 [#1070](https://github.com/yonaskolb/XcodeGen/pull/1070) @yonaskolb
-- Fixed Xcode alerting to project changes after regeneration [#1072](https://github.com/yonaskolb/XcodeGen/pull/1072) @yonaskolb
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.21.0...2.22.0)
From b6d87a1cc6ee35af64a916a3873776bc4f71891c Mon Sep 17 00:00:00 2001
From: David Lee <74229219+DavidWoohyunLee@users.noreply.github.com>
Date: Sun, 16 May 2021 02:12:04 -0500
Subject: [PATCH 084/284] added () to config variant trimming character set
(#1078)
* added () to config variant trimming character set
* added test cases
* added test cases and changelog entry
* Update CHANGELOG.md
removed
Co-authored-by: Yonas Kolb
* fixed incorrect test case
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 3 +++
Sources/ProjectSpec/Config.swift | 2 +-
Tests/ProjectSpecTests/ProjectSpecTests.swift | 3 +++
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 145b7c901..eb407eaac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+#### Fixed
+- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 [#1078](https://github.com/yonaskolb/XcodeGen/pull/1078) @DavidWoohyunLee
+
## 2.22.0
#### Added
diff --git a/Sources/ProjectSpec/Config.swift b/Sources/ProjectSpec/Config.swift
index 6eddcc4a2..d5bb3996b 100644
--- a/Sources/ProjectSpec/Config.swift
+++ b/Sources/ProjectSpec/Config.swift
@@ -28,7 +28,7 @@ extension Config {
guard self.type == type else { return false }
let nameWithoutType = self.name.lowercased()
.replacingOccurrences(of: type.name.lowercased(), with: "")
- .trimmingCharacters(in: CharacterSet(charactersIn: " -_"))
+ .trimmingCharacters(in: CharacterSet(charactersIn: " -_()"))
return nameWithoutType == variant.lowercased()
}
}
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index 1b2bfd858..07bbe8441 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -359,6 +359,9 @@ class ProjectSpecTests: XCTestCase {
try expectVariant("Dev", for: Config(name: "Dev_debug", type: .debug), matches: true)
try expectVariant("Prod", for: Config(name: "PreProd debug", type: .debug), matches: false)
try expectVariant("Develop", for: Config(name: "Dev debug", type: .debug), matches: false)
+ try expectVariant("Development", for: Config(name: "Debug (Development)", type: .debug), matches: true)
+ try expectVariant("Staging", for: Config(name: "Debug (Staging)", type: .debug), matches: true)
+ try expectVariant("Production", for: Config(name: "Debug (Production)", type: .debug), matches: true)
}
}
}
From 38888237c723673e38a822131d3378944d6d1b27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kry=C5=A1tof=20Mat=C4=9Bj?=
Date: Tue, 18 May 2021 12:52:24 +0200
Subject: [PATCH 085/284] Add platform filter to dependencies (#951)
---
CHANGELOG.md | 3 +
Docs/ProjectSpec.md | 1 +
Sources/ProjectSpec/Dependency.swift | 18 +++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 90 +++++++++++--------
.../Project.xcodeproj/project.pbxproj | 11 ++-
Tests/Fixtures/TestProject/project.yml | 4 +
Tests/ProjectSpecTests/SpecLoadingTests.swift | 12 +--
.../PBXProjGeneratorTests.swift | 72 +++++++++++++++
8 files changed, 164 insertions(+), 47 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb407eaac..922146f8c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+#### Added
+- Added ability to set custom platform for dependency [#934](https://github.com/yonaskolb/XcodeGen/pull/934) @raptorxcz
+
#### Fixed
- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 [#1078](https://github.com/yonaskolb/XcodeGen/pull/1078) @DavidWoohyunLee
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index dfeedd7cc..7c154469f 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -428,6 +428,7 @@ A dependency can be one of a 6 types:
- [ ] **codeSign**: **Bool** - Whether the `codeSignOnCopy` setting is applied when embedding framework. Defaults to true
- [ ] **removeHeaders**: **Bool** - Whether the `removeHeadersOnCopy` setting is applied when embedding the framework. Defaults to true
- [ ] **weak**: **Bool** - Whether the `Weak` setting is applied when linking the framework. Defaults to false
+- [ ] **platform**: **String** - Add dependency to selected platforms. Available platforms are: **iOS**, **macOS** and **all**. Defaults is **all**
**Implicit Framework options**:
diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift
index 13e8b4849..726e1e1a8 100644
--- a/Sources/ProjectSpec/Dependency.swift
+++ b/Sources/ProjectSpec/Dependency.swift
@@ -5,6 +5,7 @@ public struct Dependency: Equatable {
public static let removeHeadersDefault = true
public static let implicitDefault = false
public static let weakLinkDefault = false
+ public static let platformDefault: Platform = .all
public var type: DependencyType
public var reference: String
@@ -14,6 +15,7 @@ public struct Dependency: Equatable {
public var link: Bool?
public var implicit: Bool = implicitDefault
public var weakLink: Bool = weakLinkDefault
+ public var platform: Platform = platformDefault
public init(
type: DependencyType,
@@ -22,7 +24,8 @@ public struct Dependency: Equatable {
codeSign: Bool? = nil,
link: Bool? = nil,
implicit: Bool = implicitDefault,
- weakLink: Bool = weakLinkDefault
+ weakLink: Bool = weakLinkDefault,
+ platform: Platform = platformDefault
) {
self.type = type
self.reference = reference
@@ -31,6 +34,13 @@ public struct Dependency: Equatable {
self.link = link
self.implicit = implicit
self.weakLink = weakLink
+ self.platform = platform
+ }
+
+ public enum Platform: String, Equatable {
+ case all
+ case iOS
+ case macOS
}
public enum CarthageLinkType: String {
@@ -112,6 +122,12 @@ extension Dependency: JSONObjectConvertible {
if let bool: Bool = jsonDictionary.json(atKeyPath: "weak") {
weakLink = bool
}
+
+ if let platformString: String = jsonDictionary.json(atKeyPath: "platform"), let platform = Platform(rawValue: platformString) {
+ self.platform = platform
+ } else {
+ self.platform = .all
+ }
}
}
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 9b4f80978..8587e5c30 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -336,7 +336,7 @@ public class PBXProjGenerator {
return addObject(buildConfig)
}
- let dependencies = target.targets.map { generateTargetDependency(from: target.name, to: $0) }
+ let dependencies = target.targets.map { generateTargetDependency(from: target.name, to: $0, platform: nil) }
let defaultConfigurationName = project.options.defaultConfig ?? project.configs.first?.name ?? ""
let buildConfigList = addObject(XCConfigurationList(
@@ -352,7 +352,7 @@ public class PBXProjGenerator {
aggregateTarget.dependencies = dependencies
}
- func generateTargetDependency(from: String, to target: String) -> PBXTargetDependency {
+ func generateTargetDependency(from: String, to target: String, platform: String?) -> PBXTargetDependency {
guard let targetObject = targetObjects[target] ?? targetAggregateObjects[target] else {
fatalError("Target dependency not found: from ( \(from) ) to ( \(target) )")
}
@@ -368,6 +368,7 @@ public class PBXProjGenerator {
let targetDependency = addObject(
PBXTargetDependency(
+ platformFilter: platform,
target: targetObject,
targetProxy: targetProxy
)
@@ -698,16 +699,16 @@ public class PBXProjGenerator {
return !linkingAttributes.isEmpty ? ["ATTRIBUTES": linkingAttributes] : nil
}
- func processTargetDependency(_ dependency: Dependency, dependencyTarget: Target, embedFileReference: PBXFileElement?) {
+ func processTargetDependency(_ dependency: Dependency, dependencyTarget: Target, embedFileReference: PBXFileElement?, platform: String?) {
let dependencyLinkage = dependencyTarget.defaultLinkage
let link = dependency.link ??
((dependencyLinkage == .dynamic && target.type != .staticLibrary) ||
(dependencyLinkage == .static && target.type.isExecutable))
if link, let dependencyFile = embedFileReference {
- let buildFile = addObject(
- PBXBuildFile(file: dependencyFile, settings: getDependencyFrameworkSettings(dependency: dependency))
- )
+ let pbxBuildFile = PBXBuildFile(file: dependencyFile, settings: getDependencyFrameworkSettings(dependency: dependency))
+ pbxBuildFile.platformFilter = platform
+ let buildFile = addObject(pbxBuildFile)
targetFrameworkBuildFiles.append(buildFile)
if !anyDependencyRequiresObjCLinking
@@ -718,12 +719,12 @@ public class PBXProjGenerator {
let embed = dependency.embed ?? target.type.shouldEmbed(dependencyTarget)
if embed {
- let embedFile = addObject(
- PBXBuildFile(
- file: embedFileReference,
- settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable)
- )
+ let pbxBuildFile = PBXBuildFile(
+ file: embedFileReference,
+ settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable)
)
+ pbxBuildFile.platformFilter = platform
+ let embedFile = addObject(pbxBuildFile)
if dependencyTarget.type.isExtension {
// embed app extension
@@ -746,7 +747,8 @@ public class PBXProjGenerator {
for dependency in targetDependencies {
let embed = dependency.embed ?? target.shouldEmbedDependencies
-
+ let platform = makePlatform(for: dependency.platform)
+
switch dependency.type {
case .target:
let dependencyTargetReference = try TargetReference(dependency.reference)
@@ -754,15 +756,15 @@ public class PBXProjGenerator {
switch dependencyTargetReference.location {
case .local:
let dependencyTargetName = dependency.reference
- let targetDependency = generateTargetDependency(from: target.name, to: dependencyTargetName)
+ let targetDependency = generateTargetDependency(from: target.name, to: dependencyTargetName, platform: platform)
dependencies.append(targetDependency)
guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue }
- processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: targetFileReferences[dependencyTarget.name])
+ processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: targetFileReferences[dependencyTarget.name], platform: platform)
case .project(let dependencyProjectName):
let dependencyTargetName = dependencyTargetReference.name
let (targetDependency, dependencyTarget, dependencyProductProxy) = try generateExternalTargetDependency(from: target.name, to: dependencyTargetName, in: dependencyProjectName, platform: target.platform)
dependencies.append(targetDependency)
- processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: dependencyProductProxy)
+ processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: dependencyProductProxy, platform: platform)
}
case .framework:
@@ -796,9 +798,9 @@ public class PBXProjGenerator {
}
if dependency.link ?? (target.type != .staticLibrary) {
- let buildFile = addObject(
- PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))
- )
+ let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))
+ pbxBuildFile.platformFilter = platform
+ let buildFile = addObject(pbxBuildFile)
targetFrameworkBuildFiles.append(buildFile)
}
@@ -808,9 +810,9 @@ public class PBXProjGenerator {
}
if embed {
- let embedFile = addObject(
- PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
- )
+ let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
+ pbxBuildFile.platformFilter = platform
+ let embedFile = addObject(pbxBuildFile)
copyFrameworksReferences.append(embedFile)
}
case .sdk(let root):
@@ -850,18 +852,18 @@ public class PBXProjGenerator {
frameworkFiles.append(fileReference)
}
- let buildFile = addObject(
- PBXBuildFile(
- file: fileReference,
- settings: getDependencyFrameworkSettings(dependency: dependency)
- )
+ let pbxBuildFile = PBXBuildFile(
+ file: fileReference,
+ settings: getDependencyFrameworkSettings(dependency: dependency)
)
+ pbxBuildFile.platformFilter = platform
+ let buildFile = addObject(pbxBuildFile)
targetFrameworkBuildFiles.append(buildFile)
if dependency.embed == true {
- let embedFile = addObject(
- PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
- )
+ let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
+ pbxBuildFile.platformFilter = platform
+ let embedFile = addObject(pbxBuildFile)
copyFrameworksReferences.append(embedFile)
}
@@ -883,9 +885,9 @@ public class PBXProjGenerator {
let isStaticLibrary = target.type == .staticLibrary
let isCarthageStaticLink = dependency.carthageLinkType == .static
if dependency.link ?? (!isStaticLibrary && !isCarthageStaticLink) {
- let buildFile = self.addObject(
- PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))
- )
+ let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))
+ pbxBuildFile.platformFilter = platform
+ let buildFile = addObject(pbxBuildFile)
targetFrameworkBuildFiles.append(buildFile)
}
}
@@ -917,16 +919,16 @@ public class PBXProjGenerator {
targetFrameworkBuildFiles.append(buildFile)
} else {
let targetDependency = addObject(
- PBXTargetDependency(product: packageDependency)
+ PBXTargetDependency(platformFilter: platform, product: packageDependency)
)
dependencies.append(targetDependency)
}
if dependency.embed == true {
- let embedFile = addObject(
- PBXBuildFile(product: packageDependency,
- settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
- )
+ let pbxBuildFile = PBXBuildFile(product: packageDependency,
+ settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
+ pbxBuildFile.platformFilter = platform
+ let embedFile = addObject(pbxBuildFile)
copyFrameworksReferences.append(embedFile)
}
case .bundle:
@@ -940,6 +942,7 @@ public class PBXProjGenerator {
)
let pbxBuildFile = PBXBuildFile(file: fileReference, settings: nil)
+ pbxBuildFile.platformFilter = platform
let buildFile = addObject(pbxBuildFile)
copyBundlesReferences.append(buildFile)
@@ -978,6 +981,8 @@ public class PBXProjGenerator {
}
}
}
+
+ carthageFrameworksToEmbed = carthageFrameworksToEmbed.uniqued()
var buildPhases: [PBXBuildPhase] = []
@@ -1310,6 +1315,17 @@ public class PBXProjGenerator {
targetObject.productType = target.type
}
}
+
+ private func makePlatform(for platform: Dependency.Platform) -> String? {
+ switch platform {
+ case .all:
+ return nil
+ case .macOS:
+ return "maccatalyst"
+ case .iOS:
+ return "ios"
+ }
+ }
func getInfoPlists(for target: Target) -> [Config: String] {
var searchForDefaultInfoPlist: Bool = true
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 4b8df8bcc..b9ce92204 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -46,7 +46,7 @@
21425F6DE3D493B6F1E33D21 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; };
216B220EC7961DF7CA9188B7 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };
21CA04F29CD0DEB0DD27B808 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; };
- 262891CCD5F74316610437FA /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+ 262891CCD5F74316610437FA /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */; platformFilter = ios; settings = {ATTRIBUTES = (Weak, ); }; };
265B6A05C0198FD2EB485173 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93C033648A37D95027845BD3 /* main.swift */; };
2730C6D0A35AED4ADD6EDF17 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0704B6CAFBB53E0EBB08F6B3 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
28A96EBC76D53817AABDA91C /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8AF20308873AEEEC4D8C45D1 /* Settings.bundle */; };
@@ -84,7 +84,7 @@
61601545B6BE00CA74A4E38F /* SceneKitCatalog.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = C9E358FBE2B54D2B5C7FD609 /* SceneKitCatalog.scnassets */; };
6241507B4947B0B65429587C /* ExternalTarget.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
632774E7F21CCB386A76B2A8 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B198242976C3395E31FE000A /* MessagesViewController.swift */; };
- 63D8E7F00276736EDA62D227 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 63D8E7F00276736EDA62D227 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */; platformFilter = ios; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
65B3BAC02D5FAE632719C984 /* Model.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */; };
65EBD2D87F1F5FDA63F8C027 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; };
666AA5F3F63C8FD7C68A6CC5 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -97,6 +97,7 @@
747CAE14D196F5652E93353C /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
75F2774F183838AF34CA9B8A /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };
768648ED7E93B6D888574144 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };
+ 778F71CA1CC4BEECDACAD8B9 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
77C3CB285572EA4BB7E201A7 /* App_Clip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 38DB679FF1CF4E379D1AB103 /* App_Clip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
7A0DABBEA55B06E148C665A8 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC91042453E18DF74BA1C0F /* StaticLibrary.swift */; };
7A8C78212CEAC6452DFAB00E /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };
@@ -121,7 +122,7 @@
A7D1A9942302569A9515696A /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D296BB7355994040E197A1EE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A9548E5DCFE92236494164DF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */; };
AFF19412E9B35635D3AF48CB /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = 148B7C933698BCC4F1DBA979 /* XPC_Service.m */; };
- B142965C5AE9C6200BF65802 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; };
+ B142965C5AE9C6200BF65802 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; platformFilter = maccatalyst; };
B18C121B0A4D43ED8149D8E2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79325B44B19B83EC6CEDBCC5 /* LaunchScreen.storyboard */; };
B20617116B230DED1F7AF5E5 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */; };
B2D43A31C184E34EF9CB743C /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -129,6 +130,7 @@
B49D3A51787E362DE4D0E78A /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A8E15C81E454DC950C59F0 /* SomeXPCService.xpc */; };
B9F3C9E77019EC3423A7F5D8 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */; };
BAA1C1E3828F5D43546AF997 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB1B49A91B892152D68ED76 /* libc++.tbd */; };
+ BB06A57E259D0D2A001EA21F /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BD1419893577E6CEDF8CBA83 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BD95416F2005199F6B3572CF /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BFCCC56337A5D9D513C1C791 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };
@@ -386,6 +388,7 @@
dstSubfolderSpec = 10;
files = (
1E457F55331FD2C3E8E00BE2 /* Result.framework in Embed Frameworks */,
+ 778F71CA1CC4BEECDACAD8B9 /* Result.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -508,6 +511,7 @@
files = (
535A98A3E3B74E09891D977F /* TestFramework.framework in Embed Frameworks */,
BD1419893577E6CEDF8CBA83 /* Result.framework in Embed Frameworks */,
+ BB06A57E259D0D2A001EA21F /* Result.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -2645,6 +2649,7 @@
};
A94F38390A74E215EC107BB5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
+ platformFilter = ios;
target = CE7D183D3752B5B35D2D8E6D /* Framework2_iOS */;
targetProxy = D3E1EE9F1E22A388123A116D /* PBXContainerItemProxy */;
};
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 9ee74b93d..78b84d60c 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -116,12 +116,16 @@ targets:
PRODUCT_BUNDLE_IDENTIFIER: com.project.app
dependencies:
- target: Framework_iOS
+ platform: all
- target: StaticLibrary_ObjC_iOS
- carthage: Result
+ platform: macOS
- carthage: SwiftyJSON
linkType: static
+ platform: iOS
- target: Framework2_iOS
weak: true
+ platform: iOS
- target: App_watchOS
- target: iMessageApp
- sdk: Contacts.framework
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index 9505eb5c4..d302e8b3d 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -376,9 +376,9 @@ class SpecLoadingTests: XCTestCase {
$0.it("parses target dependencies") {
var targetDictionary = validTarget
targetDictionary["dependencies"] = [
- ["target": "name", "embed": false],
- ["target": "project/name", "embed": false],
- ["carthage": "name", "findFrameworks": true],
+ ["target": "name", "embed": false, "platform": "all"],
+ ["target": "project/name", "embed": false, "platform": "macOS"],
+ ["carthage": "name", "findFrameworks": true, "platform": "iOS"],
["carthage": "name", "findFrameworks": true, "linkType": "static"],
["framework": "path", "weak": true],
["sdk": "Contacts.framework"],
@@ -389,9 +389,9 @@ class SpecLoadingTests: XCTestCase {
]
let target = try Target(name: "test", jsonDictionary: targetDictionary)
try expect(target.dependencies.count) == 7
- try expect(target.dependencies[0]) == Dependency(type: .target, reference: "name", embed: false)
- try expect(target.dependencies[1]) == Dependency(type: .target, reference: "project/name", embed: false)
- try expect(target.dependencies[2]) == Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: "name")
+ try expect(target.dependencies[0]) == Dependency(type: .target, reference: "name", embed: false, platform: .all)
+ try expect(target.dependencies[1]) == Dependency(type: .target, reference: "project/name", embed: false, platform: .macOS)
+ try expect(target.dependencies[2]) == Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: "name", platform: .iOS)
try expect(target.dependencies[3]) == Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: "name")
try expect(target.dependencies[4]) == Dependency(type: .framework, reference: "path", weakLink: true)
try expect(target.dependencies[5]) == Dependency(type: .sdk(root: nil), reference: "Contacts.framework")
diff --git a/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift b/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
index d5905e62f..93280d7be 100644
--- a/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
@@ -300,4 +300,76 @@ class PBXProjGeneratorTests: XCTestCase {
XCTAssertEqual(pbxProject.attributes[lastUpgradeKey] as? String, project.xcodeVersion)
}
}
+
+ func testPlatformDependencies() {
+ describe {
+ let directoryPath = Path("TestDirectory")
+
+ func createDirectories(_ directories: String) throws {
+ let yaml = try Yams.load(yaml: directories)!
+
+ func getFiles(_ file: Any, path: Path) -> [Path] {
+ if let array = file as? [Any] {
+ return array.flatMap { getFiles($0, path: path) }
+ } else if let string = file as? String {
+ return [path + string]
+ } else if let dictionary = file as? [String: Any] {
+ var array: [Path] = []
+ for (key, value) in dictionary {
+ array += getFiles(value, path: path + key)
+ }
+ return array
+ } else {
+ return []
+ }
+ }
+
+ let files = getFiles(yaml, path: directoryPath).filter { $0.extension != nil }
+ for file in files {
+ try file.parent().mkpath()
+ try file.write("")
+ }
+ }
+
+ func removeDirectories() {
+ try? directoryPath.delete()
+ }
+
+ $0.before {
+ removeDirectories()
+ }
+
+ $0.after {
+ removeDirectories()
+ }
+
+ $0.it("setups target with different dependencies") {
+ let directories = """
+ Sources:
+ - MainScreen:
+ - Entities:
+ - file.swift
+ """
+ try createDirectories(directories)
+ let target1 = Target(name: "TestAll", type: .application, platform: .iOS, sources: ["Sources"])
+ let target2 = Target(name: "TestiOS", type: .application, platform: .iOS, sources: ["Sources"])
+ let target3 = Target(name: "TestmacOS", type: .application, platform: .iOS, sources: ["Sources"])
+ let dependency1 = Dependency(type: .target, reference: "TestAll", platform: .all)
+ let dependency2 = Dependency(type: .target, reference: "TestiOS", platform: .iOS)
+ let dependency3 = Dependency(type: .target, reference: "TestmacOS", platform: .macOS)
+ let target = Target(name: "Test", type: .application, platform: .iOS, sources: ["Sources"], dependencies: [dependency1, dependency2, dependency3])
+ let project = Project(basePath: directoryPath, name: "Test", targets: [target, target1, target2, target3])
+
+ let pbxProj = try project.generatePbxProj()
+
+ let targets = pbxProj.projects.first?.targets
+ let testTargetDependencies = pbxProj.projects.first?.targets.first(where: { $0.name == "Test" })?.dependencies
+ try expect(targets?.count) == 4
+ try expect(testTargetDependencies?.count) == 3
+ try expect(testTargetDependencies?[0].platformFilter).beNil()
+ try expect(testTargetDependencies?[1].platformFilter) == "ios"
+ try expect(testTargetDependencies?[2].platformFilter) == "maccatalyst"
+ }
+ }
+ }
}
From 938b8269130df4cdeb9b48352df79bc649b2d56b Mon Sep 17 00:00:00 2001
From: Yonas Kolb
Date: Wed, 19 May 2021 23:00:07 +1000
Subject: [PATCH 086/284] update XcodeProj to fix linux (#1083)
---
CHANGELOG.md | 3 ++-
Package.resolved | 4 ++--
Package.swift | 2 +-
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 922146f8c..88676650b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,8 @@
- Added ability to set custom platform for dependency [#934](https://github.com/yonaskolb/XcodeGen/pull/934) @raptorxcz
#### Fixed
-- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 [#1078](https://github.com/yonaskolb/XcodeGen/pull/1078) @DavidWoohyunLee
+- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 [#1078](https://github.com/yonaskolb/XcodeGen/pull/1078) @DavidWoohyunLee
+- Fixed Linux builds on Swift 5.4 [#1083](https://github.com/yonaskolb/XcodeGen/pull/1083) @yonaskolb
## 2.22.0
diff --git a/Package.resolved b/Package.resolved
index 9c25e6d48..43d754dad 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -78,8 +78,8 @@
"repositoryURL": "https://github.com/tuist/XcodeProj.git",
"state": {
"branch": null,
- "revision": "94e55232d227f9d78b811c98cb2e5d0cbd08987b",
- "version": "7.22.0"
+ "revision": "45e349e1c4e4da1a85a7b9392b737acde2e2f2a8",
+ "version": "7.23.0"
}
},
{
diff --git a/Package.swift b/Package.swift
index cbbb27106..2249f0129 100644
--- a/Package.swift
+++ b/Package.swift
@@ -16,7 +16,7 @@ let package = Package(
.package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.2.0"),
.package(url: "https://github.com/kylef/Spectre.git", from: "0.9.2"),
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.0.0"),
- .package(url: "https://github.com/tuist/XcodeProj.git", from: "7.18.0"),
+ .package(url: "https://github.com/tuist/XcodeProj.git", from: "7.23.0"),
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", .exact("0.2.0")),
From 8bfa2f33e4a7d99eb8b8068bf671c7060b8de63e Mon Sep 17 00:00:00 2001
From: Elliott Williams
Date: Fri, 21 May 2021 17:32:09 -0700
Subject: [PATCH 087/284] Revert "Change FRAMEWORK_SEARCH_PATH for xcframeworks
(#1015)" (#1081)
* Revert "Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)"
This reverts commit 7b8f5a117ff20367ccd61f15e985857f1adef3fb.
* Don't actually revert the changelog entry
* ProjectSpec.md: document how to link an xcframework
* Update CHANGELOG.md
---
CHANGELOG.md | 2 +
Docs/ProjectSpec.md | 13 ++++---
Sources/XcodeGenKit/PBXProjGenerator.swift | 14 +------
.../ProjectGeneratorTests.swift | 39 -------------------
4 files changed, 12 insertions(+), 56 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 88676650b..037011040 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,8 @@
#### Fixed
- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 [#1078](https://github.com/yonaskolb/XcodeGen/pull/1078) @DavidWoohyunLee
- Fixed Linux builds on Swift 5.4 [#1083](https://github.com/yonaskolb/XcodeGen/pull/1083) @yonaskolb
+- Reverted "Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)", introduced in 2.20.0. XCFrameworks need to be
+ referenced directly in the project for Xcode's build system to extract the appropriate frameworks [#1081](https://github.com/yonaskolb/XcodeGen/pull/1081) @elliottwilliams
## 2.22.0
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 7c154469f..3c2941334 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -122,7 +122,7 @@ Note that target names can also be changed by adding a `name` property to a targ
- [ ] **groupOrdering**: **[[GroupOrdering]](#groupOrdering)** - An order of groups.
- [ ] **transitivelyLinkDependencies**: **Bool** - If this is `true` then targets will link to the dependencies of their target dependencies. If a target should embed its dependencies, such as application and test bundles, it will embed these transitive dependencies as well. Some complex setups might want to set this to `false` and explicitly specify dependencies at every level. Targets can override this with [Target](#target).transitivelyLinkDependencies. Defaults to `false`.
- [ ] **generateEmptyDirectories**: **Bool** - If this is `true` then empty directories will be added to project too else will be missed. Defaults to `false`.
-- [ ] **findCarthageFrameworks**: **Bool** - When this is set to `true`, all the invididual frameworks for Carthage dependencies will automatically be found. This property can be overriden individually for each carthage dependency - for more details see See **findFrameworks** in the [Dependency](#dependency) section. Defaults to `false`.
+- [ ] **findCarthageFrameworks**: **Bool** - When this is set to `true`, all the invididual frameworks for Carthage framework dependencies will automatically be found. This property can be overriden individually for each carthage dependency - for more details see See **findFrameworks** in the [Dependency](#dependency) section. Defaults to `false`.
- [ ] **localPackagesGroup**: **String** - The group name that local packages are put into. This defaults to `Packages`
- [ ] **fileTypes**: **[String: [FileType](#filetype)]** - A list of default file options for specific file extensions across the project. Values in [Sources](#sources) will overwrite these settings.
- [ ] **preGenCommand**: **String** - A bash command to run before the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like generating resources files before the project is regenerated.
@@ -232,7 +232,7 @@ Settings are merged in the following order: groups, base, configs.
- [ ] **configFiles**: **[Config Files](#config-files)** - `.xcconfig` files per config
- [ ] **settings**: **[Settings](#settings)** - Target specific build settings. Default platform and product type settings will be applied first before any custom settings defined here. Other context dependant settings will be set automatically as well:
- `INFOPLIST_FILE`: If it doesn't exist your sources will be searched for `Info.plist` files and the first one found will be used for this setting
- - `FRAMEWORK_SEARCH_PATHS`: If carthage dependencies are used, the platform build path will be added to this setting
+ - `FRAMEWORK_SEARCH_PATHS`: If carthage framework dependencies are used, the platform build path will be added to this setting
- `OTHER_LDFLAGS`: See `requiresObjCLinking` below
- `TEST_TARGET_NAME`: for ui tests that target an application
- `TEST_HOST`: for unit tests that target an application
@@ -250,7 +250,7 @@ Settings are merged in the following order: groups, base, configs.
- [ ] **templates**: **[String]** - A list of [Target Templates](#target-template) referenced by name that will be merged with the target in order. Any instances of `${target_name}` within these templates will be replaced with the target name.
- [ ] **templateAttributes**: **[String: String]** - A list of attributes where each instance of `${attributeName}` within the templates listed in `templates` will be replaced with the value specified.
- [ ] **transitivelyLinkDependencies**: **Bool** - If this is not specified the value from the project set in [Options](#options)`.transitivelyLinkDependencies` will be used.
-- [ ] **directlyEmbedCarthageDependencies**: **Bool** - If this is `true` Carthage dependencies will be embedded using an `Embed Frameworks` build phase instead of the `copy-frameworks` script. Defaults to `true` for all targets except iOS/tvOS/watchOS Applications.
+- [ ] **directlyEmbedCarthageDependencies**: **Bool** - If this is `true` Carthage framework dependencies will be embedded using an `Embed Frameworks` build phase instead of the `copy-frameworks` script. Defaults to `true` for all targets except iOS/tvOS/watchOS Applications.
- [ ] **requiresObjCLinking**: **Bool** - If this is `true` any targets that link to this target will have `-ObjC` added to their `OTHER_LDFLAGS`. This is required if a static library has any catagories or extensions on Objective-C code. See [this guide](https://pewpewthespells.com/blog/objc_linker_flags.html#objc) for more details. Defaults to `true` if `type` is `library.static`. If you are 100% sure you don't have catagories or extensions on Objective-C code (pure Swift with no use of Foundation/UIKit) you can set this to `false`, otherwise it's best to leave it alone.
- [ ] **onlyCopyFilesOnInstall**: **Bool** – If this is `true`, the `Embed Frameworks` and `Embed App Extensions` (if available) build phases will have the "Copy only when installing" chekbox checked. Defaults to `false`.
- [ ] **preBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *before* any other build phases
@@ -415,8 +415,8 @@ targets:
A dependency can be one of a 6 types:
- `target: name` - links to another target. If you are using project references you can specify a target within another project by using `ProjectName/TargetName` for the name
-- `framework: path` - links to a framework
-- `carthage: name` - helper for linking to a Carthage framework
+- `framework: path` - links to a framework or XCFramework
+- `carthage: name` - helper for linking to a Carthage framework (not XCFramework)
- `sdk: name` - links to a dependency with the SDK. This can either be a relative path within the sdk root or a single filename that references a framework (.framework) or lib (.tbd)
- `package: name` - links to a Swift Package. The name must match the name of a package defined in the top level `packages`
- `bundle: name` - adds the pre-built bundle for the supplied name to the copy resources build phase. This is useful when a dependency exists on a static library target that has an associated bundle target, both existing in a separate project. Only usable in target types which can copy resources.
@@ -447,6 +447,9 @@ Carthage frameworks are expected to be in `CARTHAGE_BUILD_PATH/PLATFORM/FRAMEWOR
- `PLATFORM` = the target's platform
- `FRAMEWORK` = the specified name.
+ To link an XCFramework produced by Carthage (in `CARTHAGE_BUILD_PATH/FRAMEWORK.xcframework`), use a normal `framework:`
+ dependency. The helper logic provided by this dependency type is not necessary.
+
All the individual frameworks of a Carthage dependency can be automatically found via `findFrameworks: true`. This overrides the value of [Options](#options).findCarthageFrameworks. Otherwise each one will have to be listed individually.
Xcodegen uses `.version` files generated by Carthage in order for this framework lookup to work, so the Carthage dependencies will need to have already been built at the time XcodeGen is run.
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 8587e5c30..a23f76702 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -769,19 +769,9 @@ public class PBXProjGenerator {
case .framework:
if !dependency.implicit {
- let buildPath = Path(dependency.reference)
- let buildPathString: String
-
- if buildPath.extension == "xcframework" {
- buildPathString = """
- "\(Path(dependency.reference).string)/**"
- """
- } else {
- buildPathString = buildPath.parent().string.quoted
- }
- frameworkBuildPaths.insert(buildPathString)
+ let buildPath = Path(dependency.reference).parent().string.quoted
+ frameworkBuildPaths.insert(buildPath)
}
-
let fileReference: PBXFileElement
if dependency.implicit {
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 5bc53dfff..9309c59aa 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -1369,45 +1369,6 @@ class ProjectGeneratorTests: XCTestCase {
// generated plist should not be in buildsettings
try expect(targetConfig.buildSettings["INFOPLIST_FILE"] as? String) == predefinedPlistPath
}
-
- describe("XCFramework dependencies") {
- $0.context("with xcframework dependency") {
- $0.it("should add FRAMEWORK_SEARCH_PATHS") {
- let app = Target(
- name: "MyApp",
- type: .application,
- platform: .iOS,
- dependencies: [
- Dependency(type: .framework, reference: "some/folder/MyXCFramework.xcframework"),
- ]
- )
- let project = Project(name: "test", targets: [app])
- let pbxProject = try project.generatePbxProj()
-
- let target = pbxProject.nativeTargets.first!
- let configuration = target.buildConfigurationList!.buildConfigurations.first!
- try expect(configuration.buildSettings["FRAMEWORK_SEARCH_PATHS"] as? [String]) == ["$(inherited)", "\"some/folder/MyXCFramework.xcframework/**\""]
- }
- }
- $0.context("with regular framework") {
- $0.it("should add FRAMEWORK_SEARCH_PATHS") {
- let app = Target(
- name: "MyApp",
- type: .application,
- platform: .iOS,
- dependencies: [
- Dependency(type: .framework, reference: "some/folder/MyXCFramework.framework"),
- ]
- )
- let project = Project(name: "test", targets: [app])
- let pbxProject = try project.generatePbxProj()
-
- let target = pbxProject.nativeTargets.first!
- let configuration = target.buildConfigurationList!.buildConfigurations.first!
- try expect(configuration.buildSettings["FRAMEWORK_SEARCH_PATHS"] as? [String]) == ["$(inherited)", "\"some/folder\""]
- }
- }
- }
describe("Carthage dependencies") {
$0.context("with static dependency") {
From 90bcaffbedef1cf38243db36bc7a131af4a732f3 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Wed, 19 May 2021 23:03:03 +1000
Subject: [PATCH 088/284] Update to 2.23.0
---
CHANGELOG.md | 4 ++++
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 037011040..56f03aaab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Next Version
+## 2.23.0
+
#### Added
- Added ability to set custom platform for dependency [#934](https://github.com/yonaskolb/XcodeGen/pull/934) @raptorxcz
@@ -11,6 +13,8 @@
- Reverted "Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)", introduced in 2.20.0. XCFrameworks need to be
referenced directly in the project for Xcode's build system to extract the appropriate frameworks [#1081](https://github.com/yonaskolb/XcodeGen/pull/1081) @elliottwilliams
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.22.0...2.23.0)
+
## 2.22.0
#### Added
diff --git a/Makefile b/Makefile
index e9a01262f..efddae67f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.22.0
+VERSION = 2.23.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 087f73615..61de9b0c1 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.22.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.23.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index 32aacfd47..e141f80f9 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.22.0")
+let version = Version("2.23.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From 39ee9c2981ae6f63c9081130e2475c318ca01935 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sun, 23 May 2021 21:33:57 +1000
Subject: [PATCH 089/284] Update to 2.23.1
---
CHANGELOG.md | 10 ++++++++--
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 56f03aaab..6784539a7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
## Next Version
+## 2.23.1
+
+### Changed
+- Reverted "Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)", introduced in 2.20.0. XCFrameworks need to be
+ referenced directly in the project for Xcode's build system to extract the appropriate frameworks [#1081](https://github.com/yonaskolb/XcodeGen/pull/1081) @elliottwilliams
+
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.23.0...2.23.1)
+
## 2.23.0
#### Added
@@ -10,8 +18,6 @@
#### Fixed
- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 [#1078](https://github.com/yonaskolb/XcodeGen/pull/1078) @DavidWoohyunLee
- Fixed Linux builds on Swift 5.4 [#1083](https://github.com/yonaskolb/XcodeGen/pull/1083) @yonaskolb
-- Reverted "Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)", introduced in 2.20.0. XCFrameworks need to be
- referenced directly in the project for Xcode's build system to extract the appropriate frameworks [#1081](https://github.com/yonaskolb/XcodeGen/pull/1081) @elliottwilliams
[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.22.0...2.23.0)
diff --git a/Makefile b/Makefile
index efddae67f..876ea0d5a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.23.0
+VERSION = 2.23.1
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index 61de9b0c1..bb8191f2b 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.23.0"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.23.1"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index e141f80f9..d1c2d5c65 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.23.0")
+let version = Version("2.23.1")
let cli = XcodeGenCLI(version: version)
cli.execute()
From b8af21d12f8fead895ff4fb718d9aa683ebecec2 Mon Sep 17 00:00:00 2001
From: Bruce Evans
Date: Wed, 16 Jun 2021 09:12:01 +0900
Subject: [PATCH 090/284] Add Support for DocC in Xcode 13 (#1091)
* Add support for DocC
DocC "files" are actually folders `.docc` appended to the name, but Xcode 13 treats them differently. Therefore, we need to exclude them from the normal BuildPhase.
Resolves #1089
* Add tests for DocC
Expanded an existing test to include .docc support.
Also added a .docc catalog to the Test Project.
* Update changelog.md
* Update changelog.md to get the correct PR Link
---
CHANGELOG.md | 4 ++++
Sources/ProjectSpec/FileType.swift | 1 +
.../App_iOS/Documentation.docc/Documentation.md | 7 +++++++
.../App_iOS/Documentation.docc/Resources/resource.png | 0
.../Fixtures/TestProject/Project.xcodeproj/project.pbxproj | 2 ++
Tests/XcodeGenKitTests/SourceGeneratorTests.swift | 2 ++
6 files changed, 16 insertions(+)
create mode 100644 Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Documentation.md
create mode 100644 Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Resources/resource.png
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6784539a7..d77f1d13d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
## Next Version
+### Added
+
+- Added support for DocC Catalogs [#1091](https://github.com/yonaskolb/XcodeGen/pull/1091) @brevansio
+
## 2.23.1
### Changed
diff --git a/Sources/ProjectSpec/FileType.swift b/Sources/ProjectSpec/FileType.swift
index 732f8b7cb..1cde9514d 100644
--- a/Sources/ProjectSpec/FileType.swift
+++ b/Sources/ProjectSpec/FileType.swift
@@ -111,5 +111,6 @@ extension FileType {
"xcfilelist": FileType(buildPhase: BuildPhaseSpec.none),
"apns": FileType(buildPhase: BuildPhaseSpec.none),
"pch": FileType(buildPhase: BuildPhaseSpec.none),
+ "docc": FileType(buildPhase: BuildPhaseSpec.none),
]
}
diff --git a/Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Documentation.md b/Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Documentation.md
new file mode 100644
index 000000000..7afe5dd3d
--- /dev/null
+++ b/Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Documentation.md
@@ -0,0 +1,7 @@
+# ``App_Clip``
+
+Test
+
+## Overview
+
+Test
diff --git a/Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Resources/resource.png b/Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Resources/resource.png
new file mode 100644
index 000000000..e69de29bb
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index b9ce92204..f4704f0fb 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -674,6 +674,7 @@
B198242976C3395E31FE000A /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; };
B1C33BB070583BE3B0EC0E68 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
B221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ B5C943D39DD7812CAB94B614 /* Documentation.docc */ = {isa = PBXFileReference; path = Documentation.docc; sourceTree = ""; };
B76E17CE3574081D5BF45B44 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
BA040F1F7D6CA08878323A55 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
BB178D03E75929F3F5B10C56 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
@@ -862,6 +863,7 @@
7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */,
3797E591F302ECC0AA2FC607 /* Assets.xcassets */,
9D4AB3FCF725428EFB56F542 /* Configuration.storekit */,
+ B5C943D39DD7812CAB94B614 /* Documentation.docc */,
C9DDE1B06BCC1CDE0ECF1589 /* Info.plist */,
AAA49985DFFE797EE8416887 /* inputList.xcfilelist */,
CE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */,
diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
index 6ee094a48..3ef691027 100644
--- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift
@@ -598,6 +598,7 @@ class SourceGeneratorTests: XCTestCase {
- Root.plist
- WithPeriod2.0:
- file.swift
+ - Documentation.docc
"""
try createDirectories(directories)
@@ -654,6 +655,7 @@ class SourceGeneratorTests: XCTestCase {
try pbxProj.expectFileMissing(paths: ["C", "Settings.bundle", "Root.plist"])
try pbxProj.expectFileMissing(paths: ["C", "WithPeriod2.0"])
try pbxProj.expectFile(paths: ["C", "WithPeriod2.0", "file.swift"], buildPhase: .sources)
+ try pbxProj.expectFile(paths: ["C", "Documentation.docc"], buildPhase: BuildPhaseSpec.none)
}
$0.it("only omits the defined Info.plist from resource build phases but not other plists") {
From 4455919be3027bbae3985aad8ac456e33a933d33 Mon Sep 17 00:00:00 2001
From: Vlad Gorlov
Date: Sun, 20 Jun 2021 06:08:38 +0200
Subject: [PATCH 091/284] Added support for "driver-extension" and
"system-extension" product types (#1094)
* Squashed commit of the following:
commit 0bcdce0d1f0f1d13fb5a284404e4eaea4e805a89
Author: Vlad Gorlov
Date: Fri Jun 18 00:58:50 2021 +0200
[#1092] Dependency version update.
commit 0040c46fd4ce9f42102faeb744104027b6c2c757
Author: Bruce Evans
Date: Wed Jun 16 09:12:01 2021 +0900
Add Support for DocC in Xcode 13 (#1091)
* Add support for DocC
DocC "files" are actually folders `.docc` appended to the name, but Xcode 13 treats them differently. Therefore, we need to exclude them from the normal BuildPhase.
Resolves #1089
* Add tests for DocC
Expanded an existing test to include .docc support.
Also added a .docc catalog to the Test Project.
* Update changelog.md
* Update changelog.md to get the correct PR Link
commit 5bb7ef4e1c632f80f63c49ee280d64b8dab1603f
Author: Vlad Gorlov
Date: Wed Jun 16 01:03:42 2021 +0200
Added support for missed product types.
commit 3f8bfdf749d0d15da8490550b95a31cf961d8649
Author: Vlad Gorlov
Date: Wed Jun 16 00:01:47 2021 +0200
Added support for missed product types.
commit 235ebe4fe906716a6a37421346318fc6515836ce
Author: Vlad Gorlov
Date: Tue Jun 15 23:53:52 2021 +0200
Added support for missed product types.
* [#1094] Fixes failing tests.
* [#1094] Added test project targets.
* [#1094] Making iig-file type of source code.
* [#1094] Attempt to fix CI failure.
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 +
Package.resolved | 4 +-
Package.swift | 2 +-
Sources/ProjectSpec/FileType.swift | 1 +
Sources/ProjectSpec/Linkage.swift | 4 +-
Sources/ProjectSpec/XCProjExtensions.swift | 8 +-
Sources/XcodeGenKit/PBXProjGenerator.swift | 18 +-
.../TestProject/DriverKit Driver/Driver.cpp | 22 +
.../DriverKit Driver/Driver.entitlements | 8 +
.../TestProject/DriverKit Driver/Driver.iig | 21 +
.../TestProject/DriverKit Driver/Info.plist | 46 ++
.../EndpointSecurity.entitlements | 12 +
.../EndpointSecurity Extension/Info.plist | 28 +
.../EndpointSecurity Extension/main.swift | 22 +
.../FilterDataProvider.swift | 26 +
.../TestProject/Network Extension/Info.plist | 38 ++
.../NetworkExtension.entitlements | 19 +
.../TestProject/Network Extension/main.swift | 15 +
.../Project.xcodeproj/project.pbxproj | 544 ++++++++++++++++++
.../xcschemes/DriverKitDriver.xcscheme | 95 +++
.../EndpointSecuritySystemExtension.xcscheme | 95 +++
.../xcschemes/NetworkSystemExtension.xcscheme | 95 +++
Tests/Fixtures/TestProject/project.yml | 41 ++
.../SchemeGeneratorTests.swift | 2 +-
25 files changed, 1160 insertions(+), 9 deletions(-)
create mode 100644 Tests/Fixtures/TestProject/DriverKit Driver/Driver.cpp
create mode 100644 Tests/Fixtures/TestProject/DriverKit Driver/Driver.entitlements
create mode 100644 Tests/Fixtures/TestProject/DriverKit Driver/Driver.iig
create mode 100644 Tests/Fixtures/TestProject/DriverKit Driver/Info.plist
create mode 100644 Tests/Fixtures/TestProject/EndpointSecurity Extension/EndpointSecurity.entitlements
create mode 100644 Tests/Fixtures/TestProject/EndpointSecurity Extension/Info.plist
create mode 100644 Tests/Fixtures/TestProject/EndpointSecurity Extension/main.swift
create mode 100644 Tests/Fixtures/TestProject/Network Extension/FilterDataProvider.swift
create mode 100644 Tests/Fixtures/TestProject/Network Extension/Info.plist
create mode 100644 Tests/Fixtures/TestProject/Network Extension/NetworkExtension.entitlements
create mode 100644 Tests/Fixtures/TestProject/Network Extension/main.swift
create mode 100644 Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/DriverKitDriver.xcscheme
create mode 100644 Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/EndpointSecuritySystemExtension.xcscheme
create mode 100644 Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/NetworkSystemExtension.xcscheme
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d77f1d13d..61deea73d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
### Added
- Added support for DocC Catalogs [#1091](https://github.com/yonaskolb/XcodeGen/pull/1091) @brevansio
+- Added support for "driver-extension" and "system-extension" product types [#1092](https://github.com/yonaskolb/XcodeGen/issues/1092) @vgorloff
## 2.23.1
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 3c2941334..b13ae18a1 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -292,6 +292,8 @@ This will provide default build settings for a certain product type. It can be a
- `watchkit-extension`
- `watchkit2-extension`
- `xcode-extension`
+- `driver-extension`
+- `system-extension`
- `xpc-service`
- ``""`` (used for legacy targets)
diff --git a/Package.resolved b/Package.resolved
index 43d754dad..9c1119ed3 100644
--- a/Package.resolved
+++ b/Package.resolved
@@ -78,8 +78,8 @@
"repositoryURL": "https://github.com/tuist/XcodeProj.git",
"state": {
"branch": null,
- "revision": "45e349e1c4e4da1a85a7b9392b737acde2e2f2a8",
- "version": "7.23.0"
+ "revision": "0b18c3e7a10c241323397a80cb445051f4494971",
+ "version": "8.0.0"
}
},
{
diff --git a/Package.swift b/Package.swift
index 2249f0129..899547eda 100644
--- a/Package.swift
+++ b/Package.swift
@@ -16,7 +16,7 @@ let package = Package(
.package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.2.0"),
.package(url: "https://github.com/kylef/Spectre.git", from: "0.9.2"),
.package(url: "https://github.com/onevcat/Rainbow.git", from: "3.0.0"),
- .package(url: "https://github.com/tuist/XcodeProj.git", from: "7.23.0"),
+ .package(url: "https://github.com/tuist/XcodeProj.git", from: "8.0.0"),
.package(url: "https://github.com/jakeheis/SwiftCLI.git", from: "6.0.0"),
.package(url: "https://github.com/mxcl/Version", from: "2.0.0"),
.package(url: "https://github.com/SwiftDocOrg/GraphViz.git", .exact("0.2.0")),
diff --git a/Sources/ProjectSpec/FileType.swift b/Sources/ProjectSpec/FileType.swift
index 1cde9514d..372bc79d8 100644
--- a/Sources/ProjectSpec/FileType.swift
+++ b/Sources/ProjectSpec/FileType.swift
@@ -87,6 +87,7 @@ extension FileType {
"metal": FileType(buildPhase: .sources),
"mlmodel": FileType(buildPhase: .sources),
"rcproject": FileType(buildPhase: .sources),
+ "iig": FileType(buildPhase: .sources),
// headers
"h": FileType(buildPhase: .headers),
diff --git a/Sources/ProjectSpec/Linkage.swift b/Sources/ProjectSpec/Linkage.swift
index cceda53ec..0e134fa08 100644
--- a/Sources/ProjectSpec/Linkage.swift
+++ b/Sources/ProjectSpec/Linkage.swift
@@ -33,7 +33,9 @@ extension Target {
.watch2AppContainer,
.watch2Extension,
.xcodeExtension,
- .xpcService:
+ .xpcService,
+ .systemExtension,
+ .driverExtension:
return .none
case .framework, .xcFramework:
// Check the MACH_O_TYPE for "Static Framework"
diff --git a/Sources/ProjectSpec/XCProjExtensions.swift b/Sources/ProjectSpec/XCProjExtensions.swift
index c6e194c2a..bf3d36d21 100644
--- a/Sources/ProjectSpec/XCProjExtensions.swift
+++ b/Sources/ProjectSpec/XCProjExtensions.swift
@@ -26,6 +26,10 @@ extension PBXProductType {
fileExtension == "appex"
}
+ public var isSystemExtension: Bool {
+ fileExtension == "dext" || fileExtension == "systemextension"
+ }
+
public var isApp: Bool {
fileExtension == "app"
}
@@ -35,7 +39,7 @@ extension PBXProductType {
}
public var isExecutable: Bool {
- isApp || isExtension || isTest || self == .commandLineTool
+ isApp || isExtension || isSystemExtension || isTest || self == .commandLineTool
}
public var name: String {
@@ -89,7 +93,7 @@ extension Platform {
extension Target {
public var shouldExecuteOnLaunch: Bool {
// This is different from `type.isExecutable`, because we don't want to "run" a test
- type.isApp || type.isExtension || type == .commandLineTool
+ type.isApp || type.isExtension || type.isSystemExtension || type == .commandLineTool
}
}
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index a23f76702..cc12d2f6b 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -669,6 +669,7 @@ public class PBXProjGenerator {
var copyWatchReferences: [PBXBuildFile] = []
var packageDependencies: [XCSwiftPackageProductDependency] = []
var extensions: [PBXBuildFile] = []
+ var systemExtensions: [PBXBuildFile] = []
var appClips: [PBXBuildFile] = []
var carthageFrameworksToEmbed: [String] = []
let localPackageReferences: [String] = project.packages.compactMap { $0.value.isLocal ? $0.key : nil }
@@ -729,6 +730,9 @@ public class PBXProjGenerator {
if dependencyTarget.type.isExtension {
// embed app extension
extensions.append(embedFile)
+ } else if dependencyTarget.type.isSystemExtension {
+ // embed system extension
+ systemExtensions.append(embedFile)
} else if dependencyTarget.type == .onDemandInstallCapableApplication {
// embed app clip
appClips.append(embedFile)
@@ -1001,9 +1005,9 @@ public class PBXProjGenerator {
return sourceFilesByCopyFiles.mapValues { getBuildFilesForSourceFiles($0) }
}
- func getPBXCopyFilesBuildPhase(dstSubfolderSpec: PBXCopyFilesBuildPhase.SubFolder, name: String, files: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {
+ func getPBXCopyFilesBuildPhase(dstSubfolderSpec: PBXCopyFilesBuildPhase.SubFolder, dstPath: String = "", name: String, files: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {
return PBXCopyFilesBuildPhase(
- dstPath: "",
+ dstPath: dstPath,
dstSubfolderSpec: dstSubfolderSpec,
name: name,
buildActionMask: target.onlyCopyFilesOnInstall ? PBXProjGenerator.copyFilesActionMask : PBXBuildPhase.defaultBuildActionMask,
@@ -1116,6 +1120,16 @@ public class PBXProjGenerator {
buildPhases.append(copyFilesPhase)
}
+ if !systemExtensions.isEmpty {
+
+ let copyFilesPhase = addObject(
+ // With parameters below the Xcode will show "Destination: System Extensions".
+ getPBXCopyFilesBuildPhase(dstSubfolderSpec: .productsDirectory, dstPath: "$(SYSTEM_EXTENSIONS_FOLDER_PATH)", name: "Embed System Extensions", files: systemExtensions)
+ )
+
+ buildPhases.append(copyFilesPhase)
+ }
+
if !appClips.isEmpty {
let copyFilesPhase = addObject(
diff --git a/Tests/Fixtures/TestProject/DriverKit Driver/Driver.cpp b/Tests/Fixtures/TestProject/DriverKit Driver/Driver.cpp
new file mode 100644
index 000000000..875a03948
--- /dev/null
+++ b/Tests/Fixtures/TestProject/DriverKit Driver/Driver.cpp
@@ -0,0 +1,22 @@
+//
+// Driver.cpp
+// Driver
+//
+// Created by Vlad Gorlov on 18.06.21.
+//
+
+#include
+
+#include
+#include
+
+#include "Driver.h"
+
+kern_return_t
+IMPL(Driver, Start)
+{
+ kern_return_t ret;
+ ret = Start(provider, SUPERDISPATCH);
+ os_log(OS_LOG_DEFAULT, "Hello World");
+ return ret;
+}
diff --git a/Tests/Fixtures/TestProject/DriverKit Driver/Driver.entitlements b/Tests/Fixtures/TestProject/DriverKit Driver/Driver.entitlements
new file mode 100644
index 000000000..852fa1a47
--- /dev/null
+++ b/Tests/Fixtures/TestProject/DriverKit Driver/Driver.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+
diff --git a/Tests/Fixtures/TestProject/DriverKit Driver/Driver.iig b/Tests/Fixtures/TestProject/DriverKit Driver/Driver.iig
new file mode 100644
index 000000000..886a04c91
--- /dev/null
+++ b/Tests/Fixtures/TestProject/DriverKit Driver/Driver.iig
@@ -0,0 +1,21 @@
+//
+// Driver.iig
+// Driver
+//
+// Created by Vlad Gorlov on 18.06.21.
+//
+
+#ifndef Driver_h
+#define Driver_h
+
+#include
+#include
+
+class Driver: public IOService
+{
+public:
+ virtual kern_return_t
+ Start(IOService * provider) override;
+};
+
+#endif /* Driver_h */
diff --git a/Tests/Fixtures/TestProject/DriverKit Driver/Info.plist b/Tests/Fixtures/TestProject/DriverKit Driver/Info.plist
new file mode 100644
index 000000000..fd5d03af8
--- /dev/null
+++ b/Tests/Fixtures/TestProject/DriverKit Driver/Info.plist
@@ -0,0 +1,46 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ IOKitPersonalities
+
+ Driver
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleIdentifierKernel
+ com.apple.kpi.iokit
+ IOClass
+ IOUserService
+ IOMatchCategory
+ com.apple.null.driver
+ IOProviderClass
+ IOUserResources
+ IOResourceMatch
+ IOKit
+ IOUserClass
+ Driver
+ IOUserServerName
+ com.apple.null.driver
+
+
+ OSBundleUsageDescription
+
+
+
diff --git a/Tests/Fixtures/TestProject/EndpointSecurity Extension/EndpointSecurity.entitlements b/Tests/Fixtures/TestProject/EndpointSecurity Extension/EndpointSecurity.entitlements
new file mode 100644
index 000000000..03a3d8341
--- /dev/null
+++ b/Tests/Fixtures/TestProject/EndpointSecurity Extension/EndpointSecurity.entitlements
@@ -0,0 +1,12 @@
+
+
+
+
+ com.apple.developer.endpoint-security.client
+
+ com.apple.security.application-groups
+
+ $(TeamIdentifierPrefix)com.example.app-group
+
+
+
diff --git a/Tests/Fixtures/TestProject/EndpointSecurity Extension/Info.plist b/Tests/Fixtures/TestProject/EndpointSecurity Extension/Info.plist
new file mode 100644
index 000000000..d787bc3cd
--- /dev/null
+++ b/Tests/Fixtures/TestProject/EndpointSecurity Extension/Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ EndpointSecurity
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSSystemExtensionUsageDescription
+
+
+
diff --git a/Tests/Fixtures/TestProject/EndpointSecurity Extension/main.swift b/Tests/Fixtures/TestProject/EndpointSecurity Extension/main.swift
new file mode 100644
index 000000000..d163fadda
--- /dev/null
+++ b/Tests/Fixtures/TestProject/EndpointSecurity Extension/main.swift
@@ -0,0 +1,22 @@
+//
+// main.swift
+// EndpointSecurity
+//
+// Created by Vlad Gorlov on 18.06.21.
+//
+
+import Foundation
+import EndpointSecurity
+
+var client: OpaquePointer?
+
+// Create the client
+let res = es_new_client(&client) { (client, message) in
+ // Do processing on the message received
+}
+
+if res != ES_NEW_CLIENT_RESULT_SUCCESS {
+ exit(EXIT_FAILURE)
+}
+
+dispatchMain()
diff --git a/Tests/Fixtures/TestProject/Network Extension/FilterDataProvider.swift b/Tests/Fixtures/TestProject/Network Extension/FilterDataProvider.swift
new file mode 100644
index 000000000..5a5d4dd38
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Network Extension/FilterDataProvider.swift
@@ -0,0 +1,26 @@
+//
+// FilterDataProvider.swift
+// NetworkExtension
+//
+// Created by Vlad Gorlov on 18.06.21.
+//
+
+import NetworkExtension
+
+class FilterDataProvider: NEFilterDataProvider {
+
+ override func startFilter(completionHandler: @escaping (Error?) -> Void) {
+ // Add code to initialize the filter.
+ completionHandler(nil)
+ }
+
+ override func stopFilter(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
+ // Add code to clean up filter resources.
+ completionHandler()
+ }
+
+ override func handleNewFlow(_ flow: NEFilterFlow) -> NEFilterNewFlowVerdict {
+ // Add code to determine if the flow should be dropped or not, downloading new rules if required.
+ return .allow()
+ }
+}
diff --git a/Tests/Fixtures/TestProject/Network Extension/Info.plist b/Tests/Fixtures/TestProject/Network Extension/Info.plist
new file mode 100644
index 000000000..88c7ae8f5
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Network Extension/Info.plist
@@ -0,0 +1,38 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ NetworkExtension
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSSystemExtensionUsageDescription
+
+ NetworkExtension
+
+ NEMachServiceName
+ $(TeamIdentifierPrefix)com.example.app-group.MySystemExtension
+ NEProviderClasses
+
+ com.apple.networkextension.filter-data
+ $(PRODUCT_MODULE_NAME).FilterDataProvider
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/Network Extension/NetworkExtension.entitlements b/Tests/Fixtures/TestProject/Network Extension/NetworkExtension.entitlements
new file mode 100644
index 000000000..b8ae39612
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Network Extension/NetworkExtension.entitlements
@@ -0,0 +1,19 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.application-groups
+
+ $(TeamIdentifierPrefix)com.example.app-group
+
+ com.apple.developer.networking.networkextension
+
+ packet-tunnel-provider
+ app-proxy-provider
+ content-filter-provider
+ dns-proxy
+
+
+
diff --git a/Tests/Fixtures/TestProject/Network Extension/main.swift b/Tests/Fixtures/TestProject/Network Extension/main.swift
new file mode 100644
index 000000000..2313f84f4
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Network Extension/main.swift
@@ -0,0 +1,15 @@
+//
+// main.swift
+// NetworkExtension
+//
+// Created by Vlad Gorlov on 18.06.21.
+//
+
+import Foundation
+import NetworkExtension
+
+autoreleasepool {
+ NEProvider.startSystemExtensionMode()
+}
+
+dispatchMain()
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index f4704f0fb..4e2f4355f 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -30,6 +30,7 @@
079B6E02AF21664AB08E621C /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587B9E9A3533E965CA602B76 /* TestProjectUITests.swift */; };
07EDA4085F0E7EE1471DC64F /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
0927149520F12314CE8B4079 /* TestFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 0932FB6FB887D7D6F7727CB7 /* Driver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 432E2C071A4B6B3757BEA13E /* Driver.cpp */; };
09617AB755651FFEB2564CBC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
0AB541AE3163B063E7012877 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };
0BDA156BEBFCB9E65910F838 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -71,7 +72,9 @@
47FC57B04A3AD83359F433EA /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };
49A4B8937BB5520B36EA33F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 814D72C2B921F60B759C2D4B /* Main.storyboard */; };
4CB673A7C0C11E04F8544BDB /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB2B6A77D39CD5602F2125F /* Contacts.framework */; };
+ 4DA7140FF84DBF39961F3409 /* NetworkSystemExtension.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
4F6481557E2BEF8D749C37E3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 187E665975BB5611AF0F27E1 /* main.m */; };
+ 5126CD91C2CB41C9B14B6232 /* DriverKitDriver.dext in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
52AD3276E068EB3396A292BB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D8A016580A3B8F72B820BFBF /* Assets.xcassets */; };
535A98A3E3B74E09891D977F /* TestFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
5447AD526B2A1FD4262E2B61 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };
@@ -80,6 +83,7 @@
58C18019E71E372F635A3FB4 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8718C7CD3BE86D9B1F5120 /* MoreUnder.swift */; };
5D10822B0E7C33DD6979F656 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BD97AF0F94A15A5B7DDB7 /* Standalone.swift */; };
5E0369B907E239D1E6884ECF /* TestFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; };
+ 61401517ECCEB2362582B5DA /* libEndpointSecurity.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */; };
61516CAC12B2843FBC4572E6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 59DA55A04FA2366B5D0BEEFF /* Assets.xcassets */; };
61601545B6BE00CA74A4E38F /* SceneKitCatalog.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = C9E358FBE2B54D2B5C7FD609 /* SceneKitCatalog.scnassets */; };
6241507B4947B0B65429587C /* ExternalTarget.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -97,6 +101,7 @@
747CAE14D196F5652E93353C /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
75F2774F183838AF34CA9B8A /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };
768648ED7E93B6D888574144 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };
+ 76DC6A4B18F434BAC239CC4A /* DriverKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0A428E67153BB40184F37BE /* DriverKit.framework */; };
778F71CA1CC4BEECDACAD8B9 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
77C3CB285572EA4BB7E201A7 /* App_Clip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 38DB679FF1CF4E379D1AB103 /* App_Clip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
7A0DABBEA55B06E148C665A8 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC91042453E18DF74BA1C0F /* StaticLibrary.swift */; };
@@ -105,6 +110,7 @@
7F658343A505B824321E086B /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
803B7CE086CFBA409F9D1ED7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 108BB29172D27BE3BD1E7F35 /* Assets.xcassets */; };
818D448D4DDD6649B5B26098 /* example.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 28360ECA4D727FAA58557A81 /* example.mp4 */; settings = {ASSET_TAGS = (tag1, tag2, ); }; };
+ 8267B75289E9D6C7B38FC426 /* DriverKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0A428E67153BB40184F37BE /* DriverKit.framework */; };
87927928A8A3460166ACB819 /* SwiftFileInDotPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
8C941A6EF08069CB3CB88FC1 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
900CFAD929CAEE3861127627 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7B5068D64404C61A67A18458 /* MyBundle.bundle */; };
@@ -120,6 +126,8 @@
A1AEAAB53EAEDA1C307871FA /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB178D03E75929F3F5B10C56 /* Result.framework */; };
A59B3F08914812573AFF6C2D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FD4A16C7B8FEB7F97F3CBE3F /* libz.dylib */; };
A7D1A9942302569A9515696A /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D296BB7355994040E197A1EE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ A90C4C147AD175DB9F7B5114 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03CD22B8CD2E91BB97CC534E /* main.swift */; };
+ A949422315536EACDF8DD78A /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */; };
A9548E5DCFE92236494164DF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */; };
AFF19412E9B35635D3AF48CB /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = 148B7C933698BCC4F1DBA979 /* XPC_Service.m */; };
B142965C5AE9C6200BF65802 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; platformFilter = maccatalyst; };
@@ -134,15 +142,19 @@
BD1419893577E6CEDF8CBA83 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BD95416F2005199F6B3572CF /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BFCCC56337A5D9D513C1C791 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };
+ C093BF20B99FE892D0F06B2D /* libEndpointSecurity.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */; };
C3672B561F456794151C047C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C3FE6B986506724DAB5D0F /* ViewController.swift */; };
C400EBD25886ACB5CD9035EB /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };
C4378E3DAF5E0B2F7AB60E03 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE6A6FAAFF701FE729293DE /* ViewController.swift */; };
C836F09B677937EFF69B1FCE /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C934C1F7A68CCD0AB6B38478 /* NotificationController.swift */; };
C88598A49087A212990F4E8B /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = 6B1603BA83AA0C7B94E45168 /* ResourceFolder */; };
+ CAE18A2194B57C830A297F83 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6680EFE4E908CDBDCE405C8 /* main.swift */; };
CCA17097382757012B58C17C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1BC32A813B80A53962A1F365 /* Assets.xcassets */; };
D5458D67C3596943114C3205 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BD97AF0F94A15A5B7DDB7 /* Standalone.swift */; };
D61BEABD5B26B2DE67D0C2EC /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };
D8ED40ED61AD912385CFF5F0 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };
+ DD5FBFC3C1B2DB3D0D1CF210 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */; };
+ E0B27599D701E6BB0223D0A8 /* FilterDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AA52945B70B1BF9E246350 /* FilterDataProvider.swift */; };
E1836941C13CC7F13650C317 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3ED831531AA349CCC19B258B /* Assets.xcassets */; };
E34351AC0049221C167A60AC /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
E4B41CB5C796DD2C3C2E564C /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -152,10 +164,12 @@
E8A135F768448632F8D77C8F /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */; };
EDB55692D392FD09C3FCFBF6 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */; };
EDE8DD3CB36D65C300A53D1E /* swift-tagged.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E4841131C451A658AC8596C /* swift-tagged.framework */; };
+ F4D77E81B0539EA5F4F141A6 /* EndpointSecuritySystemExtension.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = E5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
F5D71267BB5A326BDD69D532 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E55F45EACB0F382722D61C8D /* Assets.xcassets */; };
F6537CE373C94809E6653758 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
F7423E8738EECF04795C7601 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3F6BCB5FEFB16F1BA368059 /* InterfaceController.swift */; };
F788A3FA1CE6489BC257C1C3 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 306796628DD52FA55E833B65 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ FB6DA0DB62C425066D51767E /* Driver.iig in Sources */ = {isa = PBXBuildFile; fileRef = 5A3A73F307648F58213E4EA1 /* Driver.iig */; };
FF030751A47C85F082C7EDB9 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D132EA69984F32DA9DC727B6 /* TestProjectTests.swift */; };
/* End PBXBuildFile section */
@@ -244,6 +258,13 @@
remoteGlobalIDString = 0636AAF06498C336E1CEEDE4;
remoteInfo = TestFramework;
};
+ 6ED42BD51E8832232E58D9C1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 428715FBC1D86458DA70CBDE;
+ remoteInfo = DriverKitDriver;
+ };
747773057270E6F58470B5FA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
@@ -328,6 +349,20 @@
remoteGlobalIDString = CE7D183D3752B5B35D2D8E6D;
remoteInfo = Framework2_iOS;
};
+ D4A7C57F6272F44F2E69A5DB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = AD28397BCC984F769EE8A937;
+ remoteInfo = NetworkSystemExtension;
+ };
+ DD32A97CFD2016BF1477CF6C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 9F551F66949B55E8328EB995;
+ remoteInfo = EndpointSecuritySystemExtension;
+ };
DECF0B88B325A158E4E1D9AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
@@ -527,6 +562,19 @@
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
+ DE875E9A37F7CB9C347AEFA0 /* Embed System Extensions */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "$(SYSTEM_EXTENSIONS_FOLDER_PATH)";
+ dstSubfolderSpec = 16;
+ files = (
+ 5126CD91C2CB41C9B14B6232 /* DriverKitDriver.dext in Embed System Extensions */,
+ F4D77E81B0539EA5F4F141A6 /* EndpointSecuritySystemExtension.systemextension in Embed System Extensions */,
+ 4DA7140FF84DBF39961F3409 /* NetworkSystemExtension.systemextension in Embed System Extensions */,
+ );
+ name = "Embed System Extensions";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
E8BC0F358D693454E5027ECC /* Copy Bundle Resources */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -579,6 +627,7 @@
01E6934B571B91EAAFF0EDCB /* Resource.abc */ = {isa = PBXFileReference; path = Resource.abc; sourceTree = ""; };
020E4DA91C9132845CAFDC5D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; };
039F208D1138598CE060F140 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 03CD22B8CD2E91BB97CC534E /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
03D6D1E34022DA9524E5B38D /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; };
0510CEA09E3BFD387E3EDE28 /* MyPlayground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = MyPlayground.playground; sourceTree = ""; };
068EDF47F0B087F6A4052AC0 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; };
@@ -587,6 +636,7 @@
0B193CC6D2B3003418A550B6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; };
0B9D98D935F2C69A1F5BA539 /* App_macOS_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = App_macOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
0BB1B49A91B892152D68ED76 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
+ 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libEndpointSecurity.tbd; path = usr/lib/libEndpointSecurity.tbd; sourceTree = SDKROOT; };
0C5AC2545AE4D4F7F44E2E9B /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
0E4841131C451A658AC8596C /* swift-tagged.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = "swift-tagged.framework"; sourceTree = ""; };
@@ -595,11 +645,13 @@
108BB29172D27BE3BD1E7F35 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
13EEAB58665D79C15184D9D0 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
148B7C933698BCC4F1DBA979 /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; };
+ 16AA52945B70B1BF9E246350 /* FilterDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterDataProvider.swift; sourceTree = ""; };
16D662EE577E4CD6AFF39D66 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
187E665975BB5611AF0F27E1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
1BC32A813B80A53962A1F365 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; };
1FA5E208EC184E3030D2A21D /* Clip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Clip.entitlements; sourceTree = ""; };
+ 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = NetworkSystemExtension.systemextension; sourceTree = BUILT_PRODUCTS_DIR; };
22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; };
2233774B86539B1574D206B0 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -614,6 +666,7 @@
34F13B632328979093CE6056 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; };
3797E591F302ECC0AA2FC607 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 382E11E88B12BCB30F575686 /* Driver.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Driver.entitlements; sourceTree = ""; };
38DB679FF1CF4E379D1AB103 /* App_Clip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_Clip.app; sourceTree = BUILT_PRODUCTS_DIR; };
3A7BEFAB4710735CF169B1E8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
3D8A2D4363866877B9140156 /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; };
@@ -622,6 +675,8 @@
3FC04772130400920D68A167 /* App_Clip_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
40863AE6202CFCD0529D8438 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 432E2C071A4B6B3757BEA13E /* Driver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Driver.cpp; sourceTree = ""; };
+ 45BBB9A7599490883491C808 /* NetworkExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetworkExtension.entitlements; sourceTree = ""; };
45C12576F5AA694DD0CE2132 /* BundleX.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
46DD8F9AAC104BDB63793625 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -632,6 +687,9 @@
587B9E9A3533E965CA602B76 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
59DA55A04FA2366B5D0BEEFF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; };
+ 5A3A73F307648F58213E4EA1 /* Driver.iig */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.iig; path = Driver.iig; sourceTree = ""; };
+ 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
+ 5D13DDAB46F80D94D7345063 /* EndpointSecurity.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = EndpointSecurity.entitlements; sourceTree = ""; };
6177CC6263783487E93F7F4D /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6A58A16491CDDF968B0D56DE /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; };
6AC91042453E18DF74BA1C0F /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; };
@@ -650,11 +708,13 @@
7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7FDC16E1938AA114B67D87A9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; };
814822136AF3C64428D69DD6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */ = {isa = PBXFileReference; explicitFileType = "wrapper.driver-extension"; includeInIndex = 0; path = DriverKitDriver.dext; sourceTree = BUILT_PRODUCTS_DIR; };
84317819C92F78425870E483 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };
87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
8A9274BE42A03DC5DA1FAD04 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8AF20308873AEEEC4D8C45D1 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = Settings.bundle; sourceTree = ""; };
+ 8C62E8644AC5070AFC737BCC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
8CAF6C55B555E3E1352645B6 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; };
8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
8D88C6BF7355702B74396791 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; };
@@ -667,6 +727,7 @@
A220DE4EB3CB2E598D034D9D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
A3F6BCB5FEFB16F1BA368059 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; };
A4C3FE6B986506724DAB5D0F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ A6680EFE4E908CDBDCE405C8 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
A680BE9F68A255B0FB291AE6 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
AAA49985DFFE797EE8416887 /* inputList.xcfilelist */ = {isa = PBXFileReference; lastKnownFileType = text.xcfilelist; path = inputList.xcfilelist; sourceTree = ""; };
AB055761199DF36DB0C629A6 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -682,6 +743,7 @@
BDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "GoogleService-Info.plist"; sourceTree = ""; };
BECEA4A483ADEB8158F640B3 /* Tool */ = {isa = PBXFileReference; includeInIndex = 0; path = Tool; sourceTree = BUILT_PRODUCTS_DIR; };
BF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Model.xcmappingmodel; sourceTree = ""; };
+ C0A428E67153BB40184F37BE /* DriverKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DriverKit.framework; path = System/Library/Frameworks/DriverKit.framework; sourceTree = SDKROOT; };
C53ACB2962FED621389C36A2 /* iMessageStickersExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageStickersExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
C7809CE9FE9852C2AA87ACE5 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; };
C934C1F7A68CCD0AB6B38478 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; };
@@ -695,13 +757,16 @@
D629E142AB87C681D4EC90F7 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
D6C89D80B5458D8929F5C127 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; };
D70BE0C05E5779A077793BE6 /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; };
+ D7E73F4E11A4B74449E7FDFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
D8A016580A3B8F72B820BFBF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
DAA7880242A9DE61E68026CC /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; };
DFE6A6FAAFF701FE729293DE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
E42335D1200CB7B8B91E962F /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; };
E43116070AFEF5D8C3A5A957 /* TestFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TestFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E55F45EACB0F382722D61C8D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ E5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = EndpointSecuritySystemExtension.systemextension; sourceTree = BUILT_PRODUCTS_DIR; };
E9672EF8FE1DDC8DE0705129 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; };
+ EDCC70978B8AD49373DA0DE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
EE1343F2238429D4DA9D830B /* File1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File1.swift; path = Group/File1.swift; sourceTree = ""; };
F0D48A913C087D049C8EDDD7 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; };
F15E5C60B7E05D06B1B8E18E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
@@ -756,6 +821,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 7448069D11FB1A170F943C90 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DD5FBFC3C1B2DB3D0D1CF210 /* NetworkExtension.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
9B861C58E640BD4AD391900C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -778,9 +851,12 @@
buildActionMask = 2147483647;
files = (
B47F2629BFE5853767C8BB5E /* Contacts.framework in Frameworks */,
+ 76DC6A4B18F434BAC239CC4A /* DriverKit.framework in Frameworks */,
21425F6DE3D493B6F1E33D21 /* Framework.framework in Frameworks */,
+ A949422315536EACDF8DD78A /* NetworkExtension.framework in Frameworks */,
078FAAF5C2B851C7D5EA714F /* Result.framework in Frameworks */,
EDB55692D392FD09C3FCFBF6 /* libStaticLibrary_ObjC.a in Frameworks */,
+ C093BF20B99FE892D0F06B2D /* libEndpointSecurity.tbd in Frameworks */,
BAA1C1E3828F5D43546AF997 /* libc++.tbd in Frameworks */,
A59B3F08914812573AFF6C2D /* libz.dylib in Frameworks */,
);
@@ -804,6 +880,22 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ E63B2ED6C095617F6F53C14A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 61401517ECCEB2362582B5DA /* libEndpointSecurity.tbd in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EA2F63A326C56F6ECA7F5D7D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8267B75289E9D6C7B38FC426 /* DriverKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@@ -907,11 +999,14 @@
6DBE0EE90642BB3F6E58AD43 /* Configs */,
3F2E22B7AB20FA42CD205C2A /* CopyFiles */,
FCC084D4F8992BBC49983A38 /* CustomGroup */,
+ 7979F5A04B370C36415EFB11 /* DriverKit Driver */,
+ 99EF37D6DEE914E180236A91 /* EndpointSecurity Extension */,
5CBCE0E2A145046265FE99E2 /* FileGroup */,
1A57D1EE1FBC13598F6B5CB0 /* Framework */,
A3DCF90D9B1EF4E27CF54B19 /* iMessageApp */,
BF58996786F85CB77BEE72EF /* iMessageExtension */,
018CC36B301BFA9965780BD9 /* iMessageStickers */,
+ A0F4C565134899E0C5EB2EA7 /* Network Extension */,
9EDF27BB8A57733E6639D36D /* Resources */,
9DB22CB08CFAA455518700DB /* StandaloneFiles */,
BDA839814AF73F01F7710518 /* StaticLibrary_ObjC */,
@@ -1030,6 +1125,17 @@
path = "App_watchOS Extension";
sourceTree = "";
};
+ 7979F5A04B370C36415EFB11 /* DriverKit Driver */ = {
+ isa = PBXGroup;
+ children = (
+ 432E2C071A4B6B3757BEA13E /* Driver.cpp */,
+ 382E11E88B12BCB30F575686 /* Driver.entitlements */,
+ 5A3A73F307648F58213E4EA1 /* Driver.iig */,
+ D7E73F4E11A4B74449E7FDFE /* Info.plist */,
+ );
+ path = "DriverKit Driver";
+ sourceTree = "";
+ };
79DC4A1E4D2E0D3A215179BC /* Bundles */ = {
isa = PBXGroup;
children = (
@@ -1066,6 +1172,16 @@
path = Mac;
sourceTree = "";
};
+ 99EF37D6DEE914E180236A91 /* EndpointSecurity Extension */ = {
+ isa = PBXGroup;
+ children = (
+ 5D13DDAB46F80D94D7345063 /* EndpointSecurity.entitlements */,
+ 8C62E8644AC5070AFC737BCC /* Info.plist */,
+ A6680EFE4E908CDBDCE405C8 /* main.swift */,
+ );
+ path = "EndpointSecurity Extension";
+ sourceTree = "";
+ };
9DB22CB08CFAA455518700DB /* StandaloneFiles */ = {
isa = PBXGroup;
children = (
@@ -1086,6 +1202,17 @@
path = Resources;
sourceTree = "";
};
+ A0F4C565134899E0C5EB2EA7 /* Network Extension */ = {
+ isa = PBXGroup;
+ children = (
+ 16AA52945B70B1BF9E246350 /* FilterDataProvider.swift */,
+ EDCC70978B8AD49373DA0DE0 /* Info.plist */,
+ 03CD22B8CD2E91BB97CC534E /* main.swift */,
+ 45BBB9A7599490883491C808 /* NetworkExtension.entitlements */,
+ );
+ path = "Network Extension";
+ sourceTree = "";
+ };
A3DCF90D9B1EF4E27CF54B19 /* iMessageApp */ = {
isa = PBXGroup;
children = (
@@ -1109,6 +1236,8 @@
0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */,
A680BE9F68A255B0FB291AE6 /* App_watchOS.app */,
84317819C92F78425870E483 /* BundleX.bundle */,
+ 83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */,
+ E5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */,
7D700FA699849D2F95216883 /* EntitledApp.app */,
2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */,
8A9274BE42A03DC5DA1FAD04 /* Framework.framework */,
@@ -1127,6 +1256,7 @@
469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */,
46DD8F9AAC104BDB63793625 /* libStaticLibrary_ObjC.a */,
8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */,
+ 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */,
E43116070AFEF5D8C3A5A957 /* TestFramework.framework */,
BECEA4A483ADEB8158F640B3 /* Tool */,
22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */,
@@ -1230,8 +1360,11 @@
children = (
12809A79ACE69F501A5FE815 /* Carthage */,
FDB2B6A77D39CD5602F2125F /* Contacts.framework */,
+ C0A428E67153BB40184F37BE /* DriverKit.framework */,
0BB1B49A91B892152D68ED76 /* libc++.tbd */,
+ 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */,
FD4A16C7B8FEB7F97F3CBE3F /* libz.dylib */,
+ 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -1376,12 +1509,16 @@
77D35586228BF8AB74152BB5 /* Resources */,
FB79B30FEA6073A29B4D9FCC /* CopyFiles */,
A6E1C88C073F8CC6B5B072B6 /* Frameworks */,
+ DE875E9A37F7CB9C347AEFA0 /* Embed System Extensions */,
F8CDEFED6ED131A09041F995 /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
+ 6BE35B7C058BE1B6F3B906C0 /* PBXTargetDependency */,
+ 1652DB87B43B72B5DE0601C4 /* PBXTargetDependency */,
F3930A0708A7EB1BDA25B31B /* PBXTargetDependency */,
+ F7532D3474E04037FF26E9BC /* PBXTargetDependency */,
7EFC0278E67CD35F8981993C /* PBXTargetDependency */,
B95DA92D1265C094E71B4A5D /* PBXTargetDependency */,
);
@@ -1551,6 +1688,22 @@
productReference = 0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */;
productType = "com.apple.product-type.watchkit2-extension";
};
+ 428715FBC1D86458DA70CBDE /* DriverKitDriver */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 412FA71CA97AD6851A1828DD /* Build configuration list for PBXNativeTarget "DriverKitDriver" */;
+ buildPhases = (
+ 3422D8A97652F33BA3AEAD6E /* Sources */,
+ EA2F63A326C56F6ECA7F5D7D /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DriverKitDriver;
+ productName = DriverKitDriver;
+ productReference = 83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */;
+ productType = "com.apple.product-type.driver-extension";
+ };
536ACF18E4603B59207D43CE /* Framework_tvOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 658628E35283172E17BFC6A3 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */;
@@ -1758,6 +1911,38 @@
productReference = 469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */;
productType = "com.apple.product-type.library.static";
};
+ 9F551F66949B55E8328EB995 /* EndpointSecuritySystemExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C4FB84AAA6F6974CEA51D359 /* Build configuration list for PBXNativeTarget "EndpointSecuritySystemExtension" */;
+ buildPhases = (
+ EAFB6030AE5D2E4D9ACA6ECC /* Sources */,
+ E63B2ED6C095617F6F53C14A /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = EndpointSecuritySystemExtension;
+ productName = EndpointSecuritySystemExtension;
+ productReference = E5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */;
+ productType = "com.apple.product-type.system-extension";
+ };
+ AD28397BCC984F769EE8A937 /* NetworkSystemExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 78DB808B74D58314279E7FD7 /* Build configuration list for PBXNativeTarget "NetworkSystemExtension" */;
+ buildPhases = (
+ DEB2782C650F563EB8C62B28 /* Sources */,
+ 7448069D11FB1A170F943C90 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = NetworkSystemExtension;
+ productName = NetworkSystemExtension;
+ productReference = 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */;
+ productType = "com.apple.product-type.system-extension";
+ };
AE3F93DB94E7208F2F1D9A78 /* Framework_iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 50DA67E9A951C40D9536609D /* Build configuration list for PBXNativeTarget "Framework_iOS" */;
@@ -1983,6 +2168,8 @@
208179651927D1138D19B5AD /* App_watchOS */,
307AE3FA155FFD09B74AE351 /* App_watchOS Extension */,
DA40AB367B606CCE2FDD398D /* BundleX */,
+ 428715FBC1D86458DA70CBDE /* DriverKitDriver */,
+ 9F551F66949B55E8328EB995 /* EndpointSecuritySystemExtension */,
B61ED4688789B071275E2B7A /* EntitledApp */,
E7454C10EA126A93537DD57E /* ExternalTarget */,
CE7D183D3752B5B35D2D8E6D /* Framework2_iOS */,
@@ -1995,6 +2182,7 @@
71B5187E710718C1A205D4DC /* Framework_watchOS */,
700328EE1570207608D6ADB3 /* IncludedLegacy */,
72C923899DE05F1281872160 /* Legacy */,
+ AD28397BCC984F769EE8A937 /* NetworkSystemExtension */,
13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */,
578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */,
93542A75A613F00FDB5C9C63 /* StaticLibrary_ObjC_tvOS */,
@@ -2353,6 +2541,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 3422D8A97652F33BA3AEAD6E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0932FB6FB887D7D6F7727CB7 /* Driver.cpp in Sources */,
+ FB6DA0DB62C425066D51767E /* Driver.iig in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
40A4456A24F99A01E340C032 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -2538,6 +2735,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ DEB2782C650F563EB8C62B28 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E0B27599D701E6BB0223D0A8 /* FilterDataProvider.swift in Sources */,
+ A90C4C147AD175DB9F7B5114 /* main.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
E3C67D44BD5D2820592267FD /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -2553,6 +2759,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ EAFB6030AE5D2E4D9ACA6ECC /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ CAE18A2194B57C830A297F83 /* main.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
F39FAD4CC93306087D129EBD /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -2584,6 +2798,11 @@
target = D137C04B64B7052419A2DF4E /* App_Clip */;
targetProxy = 0B37F7A37D610FCFE187A6B7 /* PBXContainerItemProxy */;
};
+ 1652DB87B43B72B5DE0601C4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 9F551F66949B55E8328EB995 /* EndpointSecuritySystemExtension */;
+ targetProxy = DD32A97CFD2016BF1477CF6C /* PBXContainerItemProxy */;
+ };
2D1B4333107E10912508724E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 0636AAF06498C336E1CEEDE4 /* TestFramework */;
@@ -2624,6 +2843,11 @@
target = 0636AAF06498C336E1CEEDE4 /* TestFramework */;
targetProxy = C42BA4EA0239AF536F0F0993 /* PBXContainerItemProxy */;
};
+ 6BE35B7C058BE1B6F3B906C0 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 428715FBC1D86458DA70CBDE /* DriverKitDriver */;
+ targetProxy = 6ED42BD51E8832232E58D9C1 /* PBXContainerItemProxy */;
+ };
7EFC0278E67CD35F8981993C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */;
@@ -2700,6 +2924,11 @@
target = 53A3B531E3947D8A8722745E /* Framework_macOS */;
targetProxy = 7F4EAACE4AD6CF285B7D3308 /* PBXContainerItemProxy */;
};
+ F7532D3474E04037FF26E9BC /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = AD28397BCC984F769EE8A937 /* NetworkSystemExtension */;
+ targetProxy = D4A7C57F6272F44F2E69A5DB /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@@ -2879,6 +3108,38 @@
};
name = "Staging Debug";
};
+ 035FC5362AE3E9696248DFD0 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "DriverKit Driver/Driver.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ DRIVERKIT_DEPLOYMENT_TARGET = 20.4;
+ INFOPLIST_FILE = "DriverKit Driver/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.Driver";
+ SDKROOT = driverkit;
+ };
+ name = "Production Debug";
+ };
+ 03B133682B8BEF8B1D647C76 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "DriverKit Driver/Driver.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ DRIVERKIT_DEPLOYMENT_TARGET = 20.4;
+ INFOPLIST_FILE = "DriverKit Driver/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.Driver";
+ SDKROOT = driverkit;
+ };
+ name = "Production Release";
+ };
04172E0BDC7C512A23A51C76 /* Staging Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -2957,6 +3218,21 @@
};
name = "Test Release";
};
+ 06D6C7ED89937E7891E70B55 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "EndpointSecurity Extension/EndpointSecurity.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "EndpointSecurity Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.EndpointSecurity";
+ SDKROOT = macosx;
+ };
+ name = "Production Release";
+ };
06E4383A2687EAD5877836CD /* Staging Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3067,6 +3343,21 @@
};
name = "Test Debug";
};
+ 0C18EEAE68FBEBCF066E0CD9 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "Network Extension/NetworkExtension.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "Network Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.NetworkExtension";
+ SDKROOT = macosx;
+ };
+ name = "Test Release";
+ };
0C66F8A2D0CB0D802A327EB4 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3149,6 +3440,21 @@
};
name = "Test Debug";
};
+ 11919FD24AA8A110C24C0FEF /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "EndpointSecurity Extension/EndpointSecurity.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "EndpointSecurity Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.EndpointSecurity";
+ SDKROOT = macosx;
+ };
+ name = "Test Release";
+ };
12BCDE0EFCEE621B881E424C /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3486,6 +3792,22 @@
};
name = "Production Release";
};
+ 291A37106E83E5C30890F422 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "DriverKit Driver/Driver.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ DRIVERKIT_DEPLOYMENT_TARGET = 20.4;
+ INFOPLIST_FILE = "DriverKit Driver/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.Driver";
+ SDKROOT = driverkit;
+ };
+ name = "Staging Debug";
+ };
2C6AB16720ADFB2436337A8F /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3888,6 +4210,21 @@
};
name = "Staging Release";
};
+ 46DAC1602BF6BEBCD177342F /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "EndpointSecurity Extension/EndpointSecurity.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "EndpointSecurity Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.EndpointSecurity";
+ SDKROOT = macosx;
+ };
+ name = "Staging Debug";
+ };
49322BF02F4F345A1339EF7A /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4003,6 +4340,22 @@
};
name = "Staging Release";
};
+ 4DA924C751AD8FAF891F953D /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "DriverKit Driver/Driver.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ DRIVERKIT_DEPLOYMENT_TARGET = 20.4;
+ INFOPLIST_FILE = "DriverKit Driver/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.Driver";
+ SDKROOT = driverkit;
+ };
+ name = "Test Release";
+ };
4EBCDEB4013FDB0720343467 /* Production Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4659,6 +5012,21 @@
};
name = "Production Debug";
};
+ 77C426E60C6FCB5A01EFC401 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "Network Extension/NetworkExtension.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "Network Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.NetworkExtension";
+ SDKROOT = macosx;
+ };
+ name = "Staging Release";
+ };
7931F229200F89B8CDC8A5E3 /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4936,6 +5304,21 @@
};
name = "Production Debug";
};
+ 86BDA2C16646B065BDE01177 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "EndpointSecurity Extension/EndpointSecurity.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "EndpointSecurity Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.EndpointSecurity";
+ SDKROOT = macosx;
+ };
+ name = "Production Debug";
+ };
8A380D322263800338FA5139 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -4949,6 +5332,21 @@
};
name = "Test Release";
};
+ 8BAC4B81735DDF8537709B8D /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "Network Extension/NetworkExtension.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "Network Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.NetworkExtension";
+ SDKROOT = macosx;
+ };
+ name = "Production Debug";
+ };
8C9F67C7AA56DBE79F0F2640 /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5449,6 +5847,22 @@
};
name = "Staging Release";
};
+ AA6BC5199D9705F3182D0C00 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "DriverKit Driver/Driver.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ DRIVERKIT_DEPLOYMENT_TARGET = 20.4;
+ INFOPLIST_FILE = "DriverKit Driver/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.Driver";
+ SDKROOT = driverkit;
+ };
+ name = "Test Debug";
+ };
AABC1E325EADF86C5137D659 /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5461,6 +5875,21 @@
};
name = "Production Release";
};
+ AB455120CB69CF0A7E128221 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "Network Extension/NetworkExtension.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "Network Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.NetworkExtension";
+ SDKROOT = macosx;
+ };
+ name = "Production Release";
+ };
AC8E8FEA35961580D23185B2 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5766,6 +6195,21 @@
};
name = "Staging Debug";
};
+ B987E9BED4B423A049202386 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "Network Extension/NetworkExtension.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "Network Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.NetworkExtension";
+ SDKROOT = macosx;
+ };
+ name = "Staging Debug";
+ };
B9AF2E89FE3E9E03E0029607 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5965,6 +6409,21 @@
};
name = "Staging Debug";
};
+ C44EBD74DF4B95E30983A798 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "EndpointSecurity Extension/EndpointSecurity.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "EndpointSecurity Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.EndpointSecurity";
+ SDKROOT = macosx;
+ };
+ name = "Staging Release";
+ };
C59E649CEDC0E973B28B57A4 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6202,6 +6661,22 @@
};
name = "Staging Release";
};
+ CF7D27DBBF0667D789D53D29 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "DriverKit Driver/Driver.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ DRIVERKIT_DEPLOYMENT_TARGET = 20.4;
+ INFOPLIST_FILE = "DriverKit Driver/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.Driver";
+ SDKROOT = driverkit;
+ };
+ name = "Staging Release";
+ };
D24E68EE5DE052219B036D63 /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6287,6 +6762,21 @@
};
name = "Staging Release";
};
+ D93982FB34335E2D1B9751FE /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "EndpointSecurity Extension/EndpointSecurity.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "EndpointSecurity Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.EndpointSecurity";
+ SDKROOT = macosx;
+ };
+ name = "Test Debug";
+ };
D9A0609EE6F341CD4E8758C1 /* Test Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -6738,6 +7228,21 @@
};
name = "Test Debug";
};
+ E9C964F0189C68721012002B /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "Network Extension/NetworkExtension.entitlements";
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = "Network Extension/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS.NetworkExtension";
+ SDKROOT = macosx;
+ };
+ name = "Test Debug";
+ };
EA62022185E4BCDA6786EC0D /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -7212,6 +7717,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ 412FA71CA97AD6851A1828DD /* Build configuration list for PBXNativeTarget "DriverKitDriver" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 035FC5362AE3E9696248DFD0 /* Production Debug */,
+ 03B133682B8BEF8B1D647C76 /* Production Release */,
+ 291A37106E83E5C30890F422 /* Staging Debug */,
+ CF7D27DBBF0667D789D53D29 /* Staging Release */,
+ AA6BC5199D9705F3182D0C00 /* Test Debug */,
+ 4DA924C751AD8FAF891F953D /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
498FA7414845B8834E48496F /* Build configuration list for PBXNativeTarget "App_Clip_Tests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -7381,6 +7899,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ 78DB808B74D58314279E7FD7 /* Build configuration list for PBXNativeTarget "NetworkSystemExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8BAC4B81735DDF8537709B8D /* Production Debug */,
+ AB455120CB69CF0A7E128221 /* Production Release */,
+ B987E9BED4B423A049202386 /* Staging Debug */,
+ 77C426E60C6FCB5A01EFC401 /* Staging Release */,
+ E9C964F0189C68721012002B /* Test Debug */,
+ 0C18EEAE68FBEBCF066E0CD9 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
7CBF487CACC0BBFB530D7963 /* Build configuration list for PBXAggregateTarget "SuperTarget" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -7485,6 +8016,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ C4FB84AAA6F6974CEA51D359 /* Build configuration list for PBXNativeTarget "EndpointSecuritySystemExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 86BDA2C16646B065BDE01177 /* Production Debug */,
+ 06D6C7ED89937E7891E70B55 /* Production Release */,
+ 46DAC1602BF6BEBCD177342F /* Staging Debug */,
+ C44EBD74DF4B95E30983A798 /* Staging Release */,
+ D93982FB34335E2D1B9751FE /* Test Debug */,
+ 11919FD24AA8A110C24C0FEF /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
D379D1BBEF24ED05EB6ADEB3 /* Build configuration list for PBXNativeTarget "XPC Service" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/DriverKitDriver.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/DriverKitDriver.xcscheme
new file mode 100644
index 000000000..e917aaf6c
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/DriverKitDriver.xcscheme
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/EndpointSecuritySystemExtension.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/EndpointSecuritySystemExtension.xcscheme
new file mode 100644
index 000000000..65c7766dc
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/EndpointSecuritySystemExtension.xcscheme
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/NetworkSystemExtension.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/NetworkSystemExtension.xcscheme
new file mode 100644
index 000000000..f4f211925
--- /dev/null
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/NetworkSystemExtension.xcscheme
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 78b84d60c..784d14dac 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -58,6 +58,9 @@ targets:
dependencies:
- target: Framework_macOS
- target: XPC Service
+ - target: NetworkSystemExtension
+ - target: EndpointSecuritySystemExtension
+ - target: DriverKitDriver
- sdk: Contacts.framework
- sdk: libc++.tbd
- sdk: libz.dylib
@@ -216,6 +219,44 @@ targets:
sources:
- path: iMessageStickers
+ DriverKitDriver:
+ platform: macOS
+ type: driver-extension
+ sources:
+ - DriverKit Driver
+ settings:
+ PRODUCT_BUNDLE_IDENTIFIER: com.project.App-macOS.Driver
+ CODE_SIGN_ENTITLEMENTS: DriverKit Driver/Driver.entitlements
+ SDKROOT: driverkit
+ DRIVERKIT_DEPLOYMENT_TARGET: 20.4
+ scheme: {}
+ dependencies:
+ - sdk: DriverKit.framework
+
+ NetworkSystemExtension:
+ platform: macOS
+ type: system-extension
+ sources:
+ - Network Extension
+ settings:
+ PRODUCT_BUNDLE_IDENTIFIER: com.project.App-macOS.NetworkExtension
+ CODE_SIGN_ENTITLEMENTS: Network Extension/NetworkExtension.entitlements
+ scheme: {}
+ dependencies:
+ - sdk: NetworkExtension.framework
+
+ EndpointSecuritySystemExtension:
+ platform: macOS
+ type: system-extension
+ sources:
+ - EndpointSecurity Extension
+ settings:
+ PRODUCT_BUNDLE_IDENTIFIER: com.project.App-macOS.EndpointSecurity
+ CODE_SIGN_ENTITLEMENTS: EndpointSecurity Extension/EndpointSecurity.entitlements
+ scheme: {}
+ dependencies:
+ - sdk: libEndpointSecurity.tbd
+
StaticLibrary_ObjC:
type: library.static
platform: [iOS, tvOS, watchOS, macOS]
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 0fd95eef1..16f437464 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -217,7 +217,7 @@ class SchemeGeneratorTests: XCTestCase {
.first(where: { $0.name == "\(target.name) \(variantName)" }))
let buildActionEntry = try unwrap(xcscheme.buildAction?.buildActionEntries.first)
- try expect(buildActionEntry.buildableReference.blueprintIdentifier.count > 0) == true
+ try expect((buildActionEntry.buildableReference.blueprintIdentifier?.count ?? 0) > 0) == true
if variantName == "PreProd" {
try expect(xcscheme.launchAction?.buildConfiguration) == "\(variantName) debug"
try expect(xcscheme.testAction?.buildConfiguration) == "\(variantName) debug"
From 81bd52be4b4a6779a24684a48d42e83448b95a90 Mon Sep 17 00:00:00 2001
From: Dalton Claybrook
Date: Sun, 20 Jun 2021 06:19:02 -0400
Subject: [PATCH 092/284] Add support for conditionally linking dependencies
based on platform (#1087)
* Add initial support for conditional platform dependencies
* Add tests for conditional platforms
* Update docs and changelog
* Respond to PR feedback
* Change name of field from 'conditionalPlatforms' to 'platforms'
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 4 +++
Docs/ProjectSpec.md | 3 +-
Sources/ProjectSpec/Dependency.swift | 24 ++++++++++-----
Sources/ProjectSpec/Target.swift | 7 ++++-
Sources/XcodeGenKit/PBXProjGenerator.swift | 6 ++--
.../Project.xcodeproj/project.pbxproj | 30 +++++++++++++++++++
Tests/Fixtures/TestProject/project.yml | 10 ++++---
Tests/ProjectSpecTests/SpecLoadingTests.swift | 17 ++++++-----
.../PBXProjGeneratorTests.swift | 6 ++--
9 files changed, 80 insertions(+), 27 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 61deea73d..d5c1a46c5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@
- Added support for DocC Catalogs [#1091](https://github.com/yonaskolb/XcodeGen/pull/1091) @brevansio
- Added support for "driver-extension" and "system-extension" product types [#1092](https://github.com/yonaskolb/XcodeGen/issues/1092) @vgorloff
+- Add support for conditionally linking dependencies for specific platforms [#1087](https://github.com/yonaskolb/XcodeGen/pull/1087) @daltonclaybrook
+
+### Changed
+- **Breaking**: Rename the `platform` field on `Dependency` to `platformFilter` [#1087](https://github.com/yonaskolb/XcodeGen/pull/1087) @daltonclaybrook
## 2.23.1
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index b13ae18a1..4d57e3f38 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -430,7 +430,8 @@ A dependency can be one of a 6 types:
- [ ] **codeSign**: **Bool** - Whether the `codeSignOnCopy` setting is applied when embedding framework. Defaults to true
- [ ] **removeHeaders**: **Bool** - Whether the `removeHeadersOnCopy` setting is applied when embedding the framework. Defaults to true
- [ ] **weak**: **Bool** - Whether the `Weak` setting is applied when linking the framework. Defaults to false
-- [ ] **platform**: **String** - Add dependency to selected platforms. Available platforms are: **iOS**, **macOS** and **all**. Defaults is **all**
+- [ ] **platformFilter**: **String** - This field is specific to Mac Catalyst. It corresponds to the "Platforms" dropdown in the Frameworks & Libraries section of Target settings in Xcode. Available options are: **iOS**, **macOS** and **all**. Defaults is **all**
+- [ ] **platforms**: **[[Platform](#platform)]** - List of platforms this dependency should apply to. Defaults to all applicable platforms.
**Implicit Framework options**:
diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift
index 726e1e1a8..795d0ed60 100644
--- a/Sources/ProjectSpec/Dependency.swift
+++ b/Sources/ProjectSpec/Dependency.swift
@@ -5,7 +5,7 @@ public struct Dependency: Equatable {
public static let removeHeadersDefault = true
public static let implicitDefault = false
public static let weakLinkDefault = false
- public static let platformDefault: Platform = .all
+ public static let platformFilterDefault: PlatformFilter = .all
public var type: DependencyType
public var reference: String
@@ -15,7 +15,8 @@ public struct Dependency: Equatable {
public var link: Bool?
public var implicit: Bool = implicitDefault
public var weakLink: Bool = weakLinkDefault
- public var platform: Platform = platformDefault
+ public var platformFilter: PlatformFilter = platformFilterDefault
+ public var platforms: Set?
public init(
type: DependencyType,
@@ -25,7 +26,8 @@ public struct Dependency: Equatable {
link: Bool? = nil,
implicit: Bool = implicitDefault,
weakLink: Bool = weakLinkDefault,
- platform: Platform = platformDefault
+ platformFilter: PlatformFilter = platformFilterDefault,
+ platforms: Set? = nil
) {
self.type = type
self.reference = reference
@@ -34,10 +36,11 @@ public struct Dependency: Equatable {
self.link = link
self.implicit = implicit
self.weakLink = weakLink
- self.platform = platform
+ self.platformFilter = platformFilter
+ self.platforms = platforms
}
- public enum Platform: String, Equatable {
+ public enum PlatformFilter: String, Equatable {
case all
case iOS
case macOS
@@ -123,10 +126,14 @@ extension Dependency: JSONObjectConvertible {
weakLink = bool
}
- if let platformString: String = jsonDictionary.json(atKeyPath: "platform"), let platform = Platform(rawValue: platformString) {
- self.platform = platform
+ if let platformFilterString: String = jsonDictionary.json(atKeyPath: "platformFilter"), let platformFilter = PlatformFilter(rawValue: platformFilterString) {
+ self.platformFilter = platformFilter
} else {
- self.platform = .all
+ self.platformFilter = .all
+ }
+
+ if let platforms: [ProjectSpec.Platform] = jsonDictionary.json(atKeyPath: "platforms") {
+ self.platforms = Set(platforms)
}
}
}
@@ -137,6 +144,7 @@ extension Dependency: JSONEncodable {
"embed": embed,
"codeSign": codeSign,
"link": link,
+ "platforms": platforms?.map(\.rawValue).sorted()
]
if removeHeaders != Dependency.removeHeadersDefault {
diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift
index 851aa4ef5..60752f445 100644
--- a/Sources/ProjectSpec/Target.swift
+++ b/Sources/ProjectSpec/Target.swift
@@ -301,7 +301,12 @@ extension Target: NamedJSONDictionaryConvertible {
if jsonDictionary["dependencies"] == nil {
dependencies = []
} else {
- dependencies = try jsonDictionary.json(atKeyPath: "dependencies", invalidItemBehaviour: .fail)
+ let dependencies: [Dependency] = try jsonDictionary.json(atKeyPath: "dependencies", invalidItemBehaviour: .fail)
+ self.dependencies = dependencies.filter { [platform] dependency -> Bool in
+ // If unspecified, all platforms are supported
+ guard let platforms = dependency.platforms else { return true }
+ return platforms.contains(platform)
+ }
}
if jsonDictionary["info"] != nil {
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index cc12d2f6b..3b4d4b188 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -751,7 +751,7 @@ public class PBXProjGenerator {
for dependency in targetDependencies {
let embed = dependency.embed ?? target.shouldEmbedDependencies
- let platform = makePlatform(for: dependency.platform)
+ let platform = makePlatformFilter(for: dependency.platformFilter)
switch dependency.type {
case .target:
@@ -1320,8 +1320,8 @@ public class PBXProjGenerator {
}
}
- private func makePlatform(for platform: Dependency.Platform) -> String? {
- switch platform {
+ private func makePlatformFilter(for filter: Dependency.PlatformFilter) -> String? {
+ switch filter {
case .all:
return nil
case .macOS:
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 4e2f4355f..0e634a03d 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -71,6 +71,7 @@
47D1F439B8E6D287B3F3E8D1 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
47FC57B04A3AD83359F433EA /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };
49A4B8937BB5520B36EA33F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 814D72C2B921F60B759C2D4B /* Main.storyboard */; };
+ 4C1504A05321046B3ED7A839 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB055761199DF36DB0C629A6 /* Framework2.framework */; };
4CB673A7C0C11E04F8544BDB /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB2B6A77D39CD5602F2125F /* Contacts.framework */; };
4DA7140FF84DBF39961F3409 /* NetworkSystemExtension.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
4F6481557E2BEF8D749C37E3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 187E665975BB5611AF0F27E1 /* main.m */; };
@@ -125,6 +126,7 @@
A1588BF3BFFE1DF7409CBA10 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */; };
A1AEAAB53EAEDA1C307871FA /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB178D03E75929F3F5B10C56 /* Result.framework */; };
A59B3F08914812573AFF6C2D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FD4A16C7B8FEB7F97F3CBE3F /* libz.dylib */; };
+ A7438C77A05D83E7016CF044 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0DC40025AB59B688E758829 /* Framework2.framework */; };
A7D1A9942302569A9515696A /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D296BB7355994040E197A1EE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A90C4C147AD175DB9F7B5114 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03CD22B8CD2E91BB97CC534E /* main.swift */; };
A949422315536EACDF8DD78A /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */; };
@@ -223,6 +225,13 @@
remoteGlobalIDString = 0867B0DACEF28C11442DE8F7;
remoteInfo = App_iOS;
};
+ 45907115465077029040BF29 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8B9A14DC280CCE013CC86440;
+ remoteInfo = Framework2_tvOS;
+ };
469D922BE967C6D52ED84552 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
@@ -244,6 +253,13 @@
remoteGlobalIDString = 13E8C5AB873CEE21E18E552F;
remoteInfo = StaticLibrary_ObjC_iOS;
};
+ 59BFAC272F73B46E97B74426 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 6ED01BC471A8C3642258E178;
+ remoteInfo = Framework2_watchOS;
+ };
610412261F48A0A36C32FC5C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;
@@ -800,6 +816,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 4C1504A05321046B3ED7A839 /* Framework2.framework in Frameworks */,
A1AEAAB53EAEDA1C307871FA /* Result.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -808,6 +825,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ A7438C77A05D83E7016CF044 /* Framework2.framework in Frameworks */,
9DF5931DAD58C35B830A0A75 /* Result.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -1716,6 +1734,7 @@
buildRules = (
);
dependencies = (
+ D6C733BEB62EAA62CCC68556 /* PBXTargetDependency */,
CE96B0951433713033A03DCD /* PBXTargetDependency */,
);
name = Framework_tvOS;
@@ -1805,6 +1824,7 @@
buildRules = (
);
dependencies = (
+ 0C99705018337CE91AA34CBA /* PBXTargetDependency */,
35DF16CA4A1F88140CF69620 /* PBXTargetDependency */,
);
name = Framework_watchOS;
@@ -2783,6 +2803,11 @@
target = 1C26A6A0BC446191F311D470 /* iMessageExtension */;
targetProxy = C8FD369800D87311EC532712 /* PBXContainerItemProxy */;
};
+ 0C99705018337CE91AA34CBA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 6ED01BC471A8C3642258E178 /* Framework2_watchOS */;
+ targetProxy = 59BFAC272F73B46E97B74426 /* PBXContainerItemProxy */;
+ };
0D33D01C71E8002A07F02122 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 208179651927D1138D19B5AD /* App_watchOS */;
@@ -2909,6 +2934,11 @@
target = 0867B0DACEF28C11442DE8F7 /* App_iOS */;
targetProxy = 3A81C6D6875469889D53A2C5 /* PBXContainerItemProxy */;
};
+ D6C733BEB62EAA62CCC68556 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 8B9A14DC280CCE013CC86440 /* Framework2_tvOS */;
+ targetProxy = 45907115465077029040BF29 /* PBXContainerItemProxy */;
+ };
E84285243DE0BB361A708079 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = AE3F93DB94E7208F2F1D9A78 /* Framework_iOS */;
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 784d14dac..10bbabffa 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -119,16 +119,16 @@ targets:
PRODUCT_BUNDLE_IDENTIFIER: com.project.app
dependencies:
- target: Framework_iOS
- platform: all
+ platformFilter: all
- target: StaticLibrary_ObjC_iOS
- carthage: Result
- platform: macOS
+ platformFilter: macOS
- carthage: SwiftyJSON
linkType: static
- platform: iOS
+ platformFilter: iOS
- target: Framework2_iOS
weak: true
- platform: iOS
+ platformFilter: iOS
- target: App_watchOS
- target: iMessageApp
- sdk: Contacts.framework
@@ -284,6 +284,8 @@ targets:
dependencies:
- carthage: Result
- target: StaticLibrary_ObjC_${platform}
+ - target: Framework2_${platform}
+ platforms: [tvOS, watchOS]
Framework2:
type: framework
diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift
index d302e8b3d..2282a8fa1 100644
--- a/Tests/ProjectSpecTests/SpecLoadingTests.swift
+++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift
@@ -376,9 +376,9 @@ class SpecLoadingTests: XCTestCase {
$0.it("parses target dependencies") {
var targetDictionary = validTarget
targetDictionary["dependencies"] = [
- ["target": "name", "embed": false, "platform": "all"],
- ["target": "project/name", "embed": false, "platform": "macOS"],
- ["carthage": "name", "findFrameworks": true, "platform": "iOS"],
+ ["target": "name", "embed": false, "platformFilter": "all"],
+ ["target": "project/name", "embed": false, "platformFilter": "macOS"],
+ ["carthage": "name", "findFrameworks": true, "platformFilter": "iOS"],
["carthage": "name", "findFrameworks": true, "linkType": "static"],
["framework": "path", "weak": true],
["sdk": "Contacts.framework"],
@@ -386,16 +386,19 @@ class SpecLoadingTests: XCTestCase {
"sdk": "Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework",
"root": "DEVELOPER_DIR",
],
+ ["target": "conditionalMatch", "platforms": ["iOS"]],
+ ["target": "conditionalMiss", "platforms": ["watchOS"]],
]
let target = try Target(name: "test", jsonDictionary: targetDictionary)
- try expect(target.dependencies.count) == 7
- try expect(target.dependencies[0]) == Dependency(type: .target, reference: "name", embed: false, platform: .all)
- try expect(target.dependencies[1]) == Dependency(type: .target, reference: "project/name", embed: false, platform: .macOS)
- try expect(target.dependencies[2]) == Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: "name", platform: .iOS)
+ try expect(target.dependencies.count) == 8
+ try expect(target.dependencies[0]) == Dependency(type: .target, reference: "name", embed: false, platformFilter: .all)
+ try expect(target.dependencies[1]) == Dependency(type: .target, reference: "project/name", embed: false, platformFilter: .macOS)
+ try expect(target.dependencies[2]) == Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: "name", platformFilter: .iOS)
try expect(target.dependencies[3]) == Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: "name")
try expect(target.dependencies[4]) == Dependency(type: .framework, reference: "path", weakLink: true)
try expect(target.dependencies[5]) == Dependency(type: .sdk(root: nil), reference: "Contacts.framework")
try expect(target.dependencies[6]) == Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: "Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework")
+ try expect(target.dependencies[7]) == Dependency(type: .target, reference: "conditionalMatch", platforms: [.iOS])
}
$0.it("parses info plist") {
diff --git a/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift b/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
index 93280d7be..359b6ce5f 100644
--- a/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift
@@ -354,9 +354,9 @@ class PBXProjGeneratorTests: XCTestCase {
let target1 = Target(name: "TestAll", type: .application, platform: .iOS, sources: ["Sources"])
let target2 = Target(name: "TestiOS", type: .application, platform: .iOS, sources: ["Sources"])
let target3 = Target(name: "TestmacOS", type: .application, platform: .iOS, sources: ["Sources"])
- let dependency1 = Dependency(type: .target, reference: "TestAll", platform: .all)
- let dependency2 = Dependency(type: .target, reference: "TestiOS", platform: .iOS)
- let dependency3 = Dependency(type: .target, reference: "TestmacOS", platform: .macOS)
+ let dependency1 = Dependency(type: .target, reference: "TestAll", platformFilter: .all)
+ let dependency2 = Dependency(type: .target, reference: "TestiOS", platformFilter: .iOS)
+ let dependency3 = Dependency(type: .target, reference: "TestmacOS", platformFilter: .macOS)
let target = Target(name: "Test", type: .application, platform: .iOS, sources: ["Sources"], dependencies: [dependency1, dependency2, dependency3])
let project = Project(basePath: directoryPath, name: "Test", targets: [target, target1, target2, target3])
From ce051293de1dafafbc36e89bc390536f8a554f34 Mon Sep 17 00:00:00 2001
From: David
Date: Sun, 27 Jun 2021 14:23:48 +0200
Subject: [PATCH 093/284] Fix path to an example project spec (#1096)
The previous linked file (`project.yml`) doesn't exist anymore in RxUserDefaults. Instead, `Examples/CocoaPodExample.yml` is an example spec in RxUserDefaults.
---
Docs/Examples.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Docs/Examples.md b/Docs/Examples.md
index 47ce369e1..19dc40975 100644
--- a/Docs/Examples.md
+++ b/Docs/Examples.md
@@ -2,7 +2,7 @@
These are a bunch of real world examples of XcodeGen project specs. Feel free to add your own via PR.
-- [num42/RxUserDefaults](https://github.com/num42/RxUserDefaults/blob/master/project.yml)
+- [num42/RxUserDefaults](https://github.com/num42/RxUserDefaults/blob/master/Examples/CocoaPodsExample.yml)
- [toshi0383/Bitrise-iOS](https://github.com/toshi0383/Bitrise-iOS/blob/master/project.yml)
- [johndpope/swift-models](https://github.com/johndpope/swift-models/tree/stable/Inference)
- [atelier-socle/AppRepositoryTemplate](https://github.com/atelier-socle/AppRepositoryTemplate/blob/master/project.yml)
From 66b1db4b5c0a59560bdbe649f03dc001f3eb1106 Mon Sep 17 00:00:00 2001
From: Dalton Claybrook
Date: Sun, 27 Jun 2021 08:25:26 -0400
Subject: [PATCH 094/284] Add support for specifying the UI testing screenshot
behavior in a scheme test action (#942)
* Support for specifying UI testing snapshot behavior in scheme test action
* Add tests for new screenshot scheme options
* Update changelog
* Add new fields to Scheme.Test json encoding
* Only save values to JSON if they aren't the defaults
* Using new defaults constants
---
CHANGELOG.md | 1 +
Docs/ProjectSpec.md | 2 +
Sources/ProjectSpec/Scheme.swift | 20 ++++++-
Sources/XcodeGenKit/SchemeGenerator.swift | 14 +++++
.../SchemeGeneratorTests.swift | 53 +++++++++++++++++++
5 files changed, 89 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d5c1a46c5..988888557 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Added support for DocC Catalogs [#1091](https://github.com/yonaskolb/XcodeGen/pull/1091) @brevansio
- Added support for "driver-extension" and "system-extension" product types [#1092](https://github.com/yonaskolb/XcodeGen/issues/1092) @vgorloff
- Add support for conditionally linking dependencies for specific platforms [#1087](https://github.com/yonaskolb/XcodeGen/pull/1087) @daltonclaybrook
+- Add ability to specify UI testing screenshot behavior in test schemes [#942](https://github.com/yonaskolb/XcodeGen/pull/942) @daltonclaybrook
### Changed
- **Breaking**: Rename the `platform` field on `Dependency` to `platformFilter` [#1087](https://github.com/yonaskolb/XcodeGen/pull/1087) @daltonclaybrook
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 4d57e3f38..91d80e3f6 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -814,6 +814,8 @@ A multiline script can be written using the various YAML multiline methods, for
- [ ] **coverageTargets**: **[String]** - a list of targets to gather code coverage. Each entry can either be a simple string, or a string using [Project Reference](#project-reference)
- [ ] **targets**: **[[Test Target](#test-target)]** - a list of targets to test. Each entry can either be a simple string, or a [Test Target](#test-target)
- [ ] **customLLDBInit**: **String** - the absolute path to the custom `.lldbinit` file
+- [ ] **captureScreenshotsAutomatically**: **Bool** - indicates whether screenshots should be captured automatically while UI Testing. This defaults to true.
+- [ ] **deleteScreenshotsWhenEachTestSucceeds**: **Bool** - whether successful UI tests should cause automatically-captured screenshots to be deleted. If `captureScreenshotsAutomatically` is false, this value is ignored. This defaults to true.
#### Test Target
- [x] **name**: **String** - The name of the target
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index e5e30b1b0..ed921c89d 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -164,6 +164,8 @@ public struct Scheme: Equatable {
public static let gatherCoverageDataDefault = false
public static let disableMainThreadCheckerDefault = false
public static let debugEnabledDefault = true
+ public static let captureScreenshotsAutomaticallyDefault = true
+ public static let deleteScreenshotsWhenEachTestSucceedsDefault = true
public var config: String?
public var gatherCoverageData: Bool
@@ -178,6 +180,8 @@ public struct Scheme: Equatable {
public var region: String?
public var debugEnabled: Bool
public var customLLDBInit: String?
+ public var captureScreenshotsAutomatically: Bool
+ public var deleteScreenshotsWhenEachTestSucceeds: Bool
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
public static let randomExecutionOrderDefault = false
@@ -236,7 +240,9 @@ public struct Scheme: Equatable {
language: String? = nil,
region: String? = nil,
debugEnabled: Bool = debugEnabledDefault,
- customLLDBInit: String? = nil
+ customLLDBInit: String? = nil,
+ captureScreenshotsAutomatically: Bool = captureScreenshotsAutomaticallyDefault,
+ deleteScreenshotsWhenEachTestSucceeds: Bool = deleteScreenshotsWhenEachTestSucceedsDefault
) {
self.config = config
self.gatherCoverageData = gatherCoverageData
@@ -251,6 +257,8 @@ public struct Scheme: Equatable {
self.region = region
self.debugEnabled = debugEnabled
self.customLLDBInit = customLLDBInit
+ self.captureScreenshotsAutomatically = captureScreenshotsAutomatically
+ self.deleteScreenshotsWhenEachTestSucceeds = deleteScreenshotsWhenEachTestSucceeds
}
public var shouldUseLaunchSchemeArgsEnv: Bool {
@@ -475,6 +483,8 @@ extension Scheme.Test: JSONObjectConvertible {
region = jsonDictionary.json(atKeyPath: "region")
debugEnabled = jsonDictionary.json(atKeyPath: "debugEnabled") ?? Scheme.Test.debugEnabledDefault
customLLDBInit = jsonDictionary.json(atKeyPath: "customLLDBInit")
+ captureScreenshotsAutomatically = jsonDictionary.json(atKeyPath: "captureScreenshotsAutomatically") ?? Scheme.Test.captureScreenshotsAutomaticallyDefault
+ deleteScreenshotsWhenEachTestSucceeds = jsonDictionary.json(atKeyPath: "deleteScreenshotsWhenEachTestSucceeds") ?? Scheme.Test.deleteScreenshotsWhenEachTestSucceedsDefault
}
}
@@ -508,6 +518,14 @@ extension Scheme.Test: JSONEncodable {
dict["customLLDBInit"] = customLLDBInit
}
+ if captureScreenshotsAutomatically != Scheme.Test.captureScreenshotsAutomaticallyDefault {
+ dict["captureScreenshotsAutomatically"] = captureScreenshotsAutomatically
+ }
+
+ if deleteScreenshotsWhenEachTestSucceeds != Scheme.Test.deleteScreenshotsWhenEachTestSucceedsDefault {
+ dict["deleteScreenshotsWhenEachTestSucceeds"] = deleteScreenshotsWhenEachTestSucceeds
+ }
+
return dict
}
}
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 907e2e5d4..67f681964 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -228,6 +228,7 @@ public class SchemeGenerator {
environmentVariables: testVariables,
language: scheme.test?.language,
region: scheme.test?.region,
+ systemAttachmentLifetime: scheme.test?.systemAttachmentLifetime,
customLLDBInitFile: scheme.test?.customLLDBInit
)
@@ -448,3 +449,16 @@ extension PBXProductType {
}
}
}
+
+extension Scheme.Test {
+ var systemAttachmentLifetime: XCScheme.TestAction.AttachmentLifetime? {
+ switch (captureScreenshotsAutomatically, deleteScreenshotsWhenEachTestSucceeds) {
+ case (false, _):
+ return .keepNever
+ case (true, false):
+ return .keepAlways
+ case (true, true):
+ return nil
+ }
+ }
+}
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 16f437464..3c27b8a91 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -108,6 +108,7 @@ class SchemeGeneratorTests: XCTestCase {
try expect(xcscheme.launchAction?.locationScenarioReference?.identifier) == "New York, NY, USA"
try expect(xcscheme.launchAction?.customLLDBInitFile) == "/sample/.lldbinit"
try expect(xcscheme.testAction?.customLLDBInitFile) == "/test/.lldbinit"
+ try expect(xcscheme.testAction?.systemAttachmentLifetime).to.beNil()
}
let frameworkTarget = Scheme.BuildTarget(target: .local(framework.name), buildTypes: [.archiving])
@@ -445,6 +446,42 @@ class SchemeGeneratorTests: XCTestCase {
let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)
try expect(xcscheme.launchAction?.macroExpansion?.buildableName) == "MyApp.app"
}
+
+ $0.it("generates scheme capturing screenshots automatically and deleting on success") {
+ let xcscheme = try self.makeSnapshotScheme(
+ buildTarget: buildTarget,
+ captureScreenshotsAutomatically: true,
+ deleteScreenshotsWhenEachTestSucceeds: true)
+
+ try expect(xcscheme.testAction?.systemAttachmentLifetime).to.beNil()
+ }
+
+ $0.it("generates scheme capturing screenshots and not deleting") {
+ let xcscheme = try self.makeSnapshotScheme(
+ buildTarget: buildTarget,
+ captureScreenshotsAutomatically: true,
+ deleteScreenshotsWhenEachTestSucceeds: false)
+
+ try expect(xcscheme.testAction?.systemAttachmentLifetime) == .keepAlways
+ }
+
+ $0.it("generates scheme not capturing screenshots") {
+ let xcscheme = try self.makeSnapshotScheme(
+ buildTarget: buildTarget,
+ captureScreenshotsAutomatically: false,
+ deleteScreenshotsWhenEachTestSucceeds: false)
+
+ try expect(xcscheme.testAction?.systemAttachmentLifetime) == .keepNever
+ }
+
+ $0.it("ignores screenshot delete preference when not capturing screenshots") {
+ let xcscheme = try self.makeSnapshotScheme(
+ buildTarget: buildTarget,
+ captureScreenshotsAutomatically: false,
+ deleteScreenshotsWhenEachTestSucceeds: true)
+
+ try expect(xcscheme.testAction?.systemAttachmentLifetime) == .keepNever
+ }
}
}
@@ -503,4 +540,20 @@ class SchemeGeneratorTests: XCTestCase {
let xcodeProject = try project.generateXcodeProject()
return try unwrap(xcodeProject.sharedData?.schemes.first)
}
+
+ private func makeSnapshotScheme(buildTarget: Scheme.BuildTarget, captureScreenshotsAutomatically: Bool, deleteScreenshotsWhenEachTestSucceeds: Bool) throws -> XCScheme {
+ let scheme = Scheme(
+ name: "MyScheme",
+ build: Scheme.Build(targets: [buildTarget]),
+ run: Scheme.Run(config: "Debug"),
+ test: Scheme.Test(config: "Debug", captureScreenshotsAutomatically: captureScreenshotsAutomatically, deleteScreenshotsWhenEachTestSucceeds: deleteScreenshotsWhenEachTestSucceeds)
+ )
+ let project = Project(
+ name: "test",
+ targets: [app, framework],
+ schemes: [scheme]
+ )
+ let xcodeProject = try project.generateXcodeProject()
+ return try unwrap(xcodeProject.sharedData?.schemes.first)
+ }
}
From 270ef8b27963b9fbfae3d02a253cc32a82f04ab1 Mon Sep 17 00:00:00 2001
From: yonaskolb
Date: Sun, 27 Jun 2021 22:30:14 +1000
Subject: [PATCH 095/284] Update to 2.24.0
---
CHANGELOG.md | 4 ++++
Makefile | 2 +-
README.md | 2 +-
Sources/XcodeGen/main.swift | 2 +-
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 988888557..4096688d2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Next Version
+## 2.24.0
+
### Added
- Added support for DocC Catalogs [#1091](https://github.com/yonaskolb/XcodeGen/pull/1091) @brevansio
@@ -12,6 +14,8 @@
### Changed
- **Breaking**: Rename the `platform` field on `Dependency` to `platformFilter` [#1087](https://github.com/yonaskolb/XcodeGen/pull/1087) @daltonclaybrook
+[Commits](https://github.com/yonaskolb/XcodeGen/compare/2.23.1...2.24.0)
+
## 2.23.1
### Changed
diff --git a/Makefile b/Makefile
index 876ea0d5a..9f5dad1d1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
TOOL_NAME = XcodeGen
export EXECUTABLE_NAME = xcodegen
-VERSION = 2.23.1
+VERSION = 2.24.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)
diff --git a/README.md b/README.md
index bb8191f2b..5b4d507c6 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ swift run xcodegen
Add the following to your Package.swift file's dependencies:
```swift
-.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.23.1"),
+.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.24.0"),
```
And then import wherever needed: `import XcodeGenKit`
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index d1c2d5c65..b952f7af6 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -3,6 +3,6 @@ import ProjectSpec
import XcodeGenCLI
import Version
-let version = Version("2.23.1")
+let version = Version("2.24.0")
let cli = XcodeGenCLI(version: version)
cli.execute()
From e2f062b6be56f63d9cc65ea6c041da28460de7d5 Mon Sep 17 00:00:00 2001
From: Roman Podymov
Date: Thu, 15 Jul 2021 03:41:48 +0200
Subject: [PATCH 096/284] erouska (#1107)
---
Docs/Examples.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/Docs/Examples.md b/Docs/Examples.md
index 19dc40975..27159d966 100644
--- a/Docs/Examples.md
+++ b/Docs/Examples.md
@@ -10,3 +10,4 @@ These are a bunch of real world examples of XcodeGen project specs. Feel free to
- [scelis/XcodeGen-TestStickers](https://github.com/scelis/XcodeGen-TestStickers/blob/master/project.yml)
- [minvws/nl-covid19-notification-app-ios](https://github.com/minvws/nl-covid19-notification-app-ios/blob/master/project.yml)
- [pvinis/react-native-xcodegen](https://github.com/pvinis/react-native-xcodegen/blob/master/templates)
+- [covid19cz/erouska-ios](https://github.com/covid19cz/erouska-ios/blob/develop/project.yml)
From d35d22f08bede3180bcdaa2b3270faf3bcbc0a4d Mon Sep 17 00:00:00 2001
From: Jakub Bednar
Date: Thu, 15 Jul 2021 04:10:34 +0200
Subject: [PATCH 097/284] Added support for dependency destination
specification. (Resolves #1038) (#1039)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Added support for dependency destination specification. (Resolves #1038)
* More generic way covering more different dependency types. (#1038)
* Added unit-test for each possible dependency combination. First test current embeding then the new one with custom copy spec. (#1038)
* Review fixes. (#1038)
* Minimized unit-test boiler-plate (#1038)
* Update CHANGELOG.md
Co-authored-by: Jakub Bednář
Co-authored-by: Yonas Kolb
---
CHANGELOG.md | 3 +
Docs/ProjectSpec.md | 13 +
Sources/ProjectSpec/Dependency.swift | 12 +-
Sources/XcodeGenKit/PBXProjGenerator.swift | 67 +-
.../Project.xcodeproj/project.pbxproj | 15 +-
Tests/Fixtures/TestProject/project.yml | 3 +
Tests/ProjectSpecTests/ProjectSpecTests.swift | 3 +-
.../ProjectGeneratorTests.swift | 1417 +++++++++++++++++
8 files changed, 1522 insertions(+), 11 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4096688d2..4bcbc98de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## Next Version
+### Added
+- Allow specifying a `copy` setting for each dependency. [#1038](https://github.com/yonaskolb/XcodeGen/pull/1039) @JakubBednar
+
## 2.24.0
### Added
diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md
index 91d80e3f6..c99f14628 100644
--- a/Docs/ProjectSpec.md
+++ b/Docs/ProjectSpec.md
@@ -432,6 +432,19 @@ A dependency can be one of a 6 types:
- [ ] **weak**: **Bool** - Whether the `Weak` setting is applied when linking the framework. Defaults to false
- [ ] **platformFilter**: **String** - This field is specific to Mac Catalyst. It corresponds to the "Platforms" dropdown in the Frameworks & Libraries section of Target settings in Xcode. Available options are: **iOS**, **macOS** and **all**. Defaults is **all**
- [ ] **platforms**: **[[Platform](#platform)]** - List of platforms this dependency should apply to. Defaults to all applicable platforms.
+- **copy** - Copy Files Phase for this dependency. This only applies when `embed` is true. Must be specified as an object with the following fields:
+ - [x] **destination**: **String** - Destination of the Copy Files phase. This can be one of the following values:
+ - `absolutePath`
+ - `productsDirectory`
+ - `wrapper`
+ - `executables`
+ - `resources`
+ - `javaResources`
+ - `frameworks`
+ - `sharedFrameworks`
+ - `sharedSupport`
+ - `plugins`
+ - [ ] **subpath**: **String** - The path inside of the destination to copy the files.
**Implicit Framework options**:
diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift
index 795d0ed60..2037bd444 100644
--- a/Sources/ProjectSpec/Dependency.swift
+++ b/Sources/ProjectSpec/Dependency.swift
@@ -17,6 +17,7 @@ public struct Dependency: Equatable {
public var weakLink: Bool = weakLinkDefault
public var platformFilter: PlatformFilter = platformFilterDefault
public var platforms: Set?
+ public var copyPhase: BuildPhaseSpec.CopyFilesSettings?
public init(
type: DependencyType,
@@ -27,7 +28,8 @@ public struct Dependency: Equatable {
implicit: Bool = implicitDefault,
weakLink: Bool = weakLinkDefault,
platformFilter: PlatformFilter = platformFilterDefault,
- platforms: Set? = nil
+ platforms: Set? = nil,
+ copyPhase: BuildPhaseSpec.CopyFilesSettings? = nil
) {
self.type = type
self.reference = reference
@@ -38,6 +40,7 @@ public struct Dependency: Equatable {
self.weakLink = weakLink
self.platformFilter = platformFilter
self.platforms = platforms
+ self.copyPhase = copyPhase
}
public enum PlatformFilter: String, Equatable {
@@ -135,6 +138,10 @@ extension Dependency: JSONObjectConvertible {
if let platforms: [ProjectSpec.Platform] = jsonDictionary.json(atKeyPath: "platforms") {
self.platforms = Set(platforms)
}
+
+ if let object: JSONDictionary = jsonDictionary.json(atKeyPath: "copy") {
+ copyPhase = try BuildPhaseSpec.CopyFilesSettings(jsonDictionary: object)
+ }
}
}
@@ -144,7 +151,8 @@ extension Dependency: JSONEncodable {
"embed": embed,
"codeSign": codeSign,
"link": link,
- "platforms": platforms?.map(\.rawValue).sorted()
+ "platforms": platforms?.map(\.rawValue).sorted(),
+ "copy": copyPhase?.toJSONValue(),
]
if removeHeaders != Dependency.removeHeadersDefault {
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 3b4d4b188..033b0fe31 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -662,6 +662,7 @@ public class PBXProjGenerator {
var dependencies: [PBXTargetDependency] = []
var targetFrameworkBuildFiles: [PBXBuildFile] = []
var frameworkBuildPaths = Set()
+ var customCopyDependenciesReferences: [PBXBuildFile] = []
var copyFilesBuildPhasesFiles: [BuildPhaseSpec.CopyFilesSettings: [PBXBuildFile]] = [:]
var copyFrameworksReferences: [PBXBuildFile] = []
var copyResourcesReferences: [PBXBuildFile] = []
@@ -689,7 +690,11 @@ public class PBXProjGenerator {
if dependency.removeHeaders {
embedAttributes.append("RemoveHeadersOnCopy")
}
- return ["ATTRIBUTES": embedAttributes]
+ var retval: [String:Any] = ["ATTRIBUTES": embedAttributes]
+ if let copyPhase = dependency.copyPhase {
+ retval["COPY_PHASE"] = copyPhase
+ }
+ return retval
}
func getDependencyFrameworkSettings(dependency: Dependency) -> [String: Any]? {
@@ -727,7 +732,10 @@ public class PBXProjGenerator {
pbxBuildFile.platformFilter = platform
let embedFile = addObject(pbxBuildFile)
- if dependencyTarget.type.isExtension {
+ if dependency.copyPhase != nil {
+ // custom copy takes precedence
+ customCopyDependenciesReferences.append(embedFile)
+ } else if dependencyTarget.type.isExtension {
// embed app extension
extensions.append(embedFile)
} else if dependencyTarget.type.isSystemExtension {
@@ -807,7 +815,12 @@ public class PBXProjGenerator {
let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
pbxBuildFile.platformFilter = platform
let embedFile = addObject(pbxBuildFile)
- copyFrameworksReferences.append(embedFile)
+
+ if dependency.copyPhase != nil {
+ customCopyDependenciesReferences.append(embedFile)
+ } else {
+ copyFrameworksReferences.append(embedFile)
+ }
}
case .sdk(let root):
@@ -858,7 +871,12 @@ public class PBXProjGenerator {
let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
pbxBuildFile.platformFilter = platform
let embedFile = addObject(pbxBuildFile)
- copyFrameworksReferences.append(embedFile)
+
+ if dependency.copyPhase != nil {
+ customCopyDependenciesReferences.append(embedFile)
+ } else {
+ copyFrameworksReferences.append(embedFile)
+ }
}
case .carthage(let findFrameworks, let linkType):
@@ -923,7 +941,12 @@ public class PBXProjGenerator {
settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
pbxBuildFile.platformFilter = platform
let embedFile = addObject(pbxBuildFile)
- copyFrameworksReferences.append(embedFile)
+
+ if dependency.copyPhase != nil {
+ customCopyDependenciesReferences.append(embedFile)
+ } else {
+ copyFrameworksReferences.append(embedFile)
+ }
}
case .bundle:
// Static and dynamic libraries can't copy resources
@@ -969,7 +992,11 @@ public class PBXProjGenerator {
let embedFile = addObject(
PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
)
- copyFrameworksReferences.append(embedFile)
+ if dependency.copyPhase != nil {
+ customCopyDependenciesReferences.append(embedFile)
+ } else {
+ copyFrameworksReferences.append(embedFile)
+ }
} else {
carthageFrameworksToEmbed.append(dependency.reference)
}
@@ -1016,6 +1043,19 @@ public class PBXProjGenerator {
)
}
+ func splitCopyDepsByDestination(_ references: [PBXBuildFile]) -> [BuildPhaseSpec.CopyFilesSettings : [PBXBuildFile]] {
+
+ var retval = [BuildPhaseSpec.CopyFilesSettings : [PBXBuildFile]]()
+ for reference in references {
+
+ guard let key = reference.settings?["COPY_PHASE"] as? BuildPhaseSpec.CopyFilesSettings else { continue }
+ var filesWithSameDestination = retval[key] ?? [PBXBuildFile]()
+ filesWithSameDestination.append(reference)
+ retval[key] = filesWithSameDestination
+ }
+ return retval
+ }
+
copyFilesBuildPhasesFiles.merge(getBuildFilesForCopyFilesPhases()) { $0 + $1 }
buildPhases += try target.preBuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }
@@ -1154,6 +1194,21 @@ public class PBXProjGenerator {
buildPhases.append(copyFilesPhase)
}
+ if !customCopyDependenciesReferences.isEmpty {
+
+ let splitted = splitCopyDepsByDestination(customCopyDependenciesReferences)
+ for (phase, references) in splitted {
+
+ guard let destination = phase.destination.destination else { continue }
+
+ let copyFilesPhase = addObject(
+ getPBXCopyFilesBuildPhase(dstSubfolderSpec: destination, dstPath:phase.subpath, name: "Embed Dependencies", files: references)
+ )
+
+ buildPhases.append(copyFilesPhase)
+ }
+ }
+
if !copyWatchReferences.isEmpty {
let copyFilesPhase = addObject(
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index 0e634a03d..edfa695ab 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -111,6 +111,7 @@
7F658343A505B824321E086B /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
803B7CE086CFBA409F9D1ED7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 108BB29172D27BE3BD1E7F35 /* Assets.xcassets */; };
818D448D4DDD6649B5B26098 /* example.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 28360ECA4D727FAA58557A81 /* example.mp4 */; settings = {ASSET_TAGS = (tag1, tag2, ); }; };
+ 81DFAB3A7633CE97929B9B2A /* Framework.framework in Embed Dependencies */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8267B75289E9D6C7B38FC426 /* DriverKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0A428E67153BB40184F37BE /* DriverKit.framework */; };
87927928A8A3460166ACB819 /* SwiftFileInDotPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
8C941A6EF08069CB3CB88FC1 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -142,7 +143,6 @@
BAA1C1E3828F5D43546AF997 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB1B49A91B892152D68ED76 /* libc++.tbd */; };
BB06A57E259D0D2A001EA21F /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BD1419893577E6CEDF8CBA83 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- BD95416F2005199F6B3572CF /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BFCCC56337A5D9D513C1C791 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };
C093BF20B99FE892D0F06B2D /* libEndpointSecurity.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */; };
C3672B561F456794151C047C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C3FE6B986506724DAB5D0F /* ViewController.swift */; };
@@ -578,6 +578,17 @@
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
+ CF6B94E7B2D2312582A526F5 /* Embed Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = test;
+ dstSubfolderSpec = 13;
+ files = (
+ 81DFAB3A7633CE97929B9B2A /* Framework.framework in Embed Dependencies */,
+ );
+ name = "Embed Dependencies";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DE875E9A37F7CB9C347AEFA0 /* Embed System Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -607,7 +618,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- BD95416F2005199F6B3572CF /* Framework.framework in Embed Frameworks */,
A7D1A9942302569A9515696A /* Result.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
@@ -1529,6 +1539,7 @@
A6E1C88C073F8CC6B5B072B6 /* Frameworks */,
DE875E9A37F7CB9C347AEFA0 /* Embed System Extensions */,
F8CDEFED6ED131A09041F995 /* Embed Frameworks */,
+ CF6B94E7B2D2312582A526F5 /* Embed Dependencies */,
);
buildRules = (
);
diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml
index 10bbabffa..686471eb2 100644
--- a/Tests/Fixtures/TestProject/project.yml
+++ b/Tests/Fixtures/TestProject/project.yml
@@ -57,6 +57,9 @@ targets:
optional: true
dependencies:
- target: Framework_macOS
+ copy:
+ destination: plugins
+ subpath: "test"
- target: XPC Service
- target: NetworkSystemExtension
- target: EndpointSecuritySystemExtension
diff --git a/Tests/ProjectSpecTests/ProjectSpecTests.swift b/Tests/ProjectSpecTests/ProjectSpecTests.swift
index 07bbe8441..56b93c41d 100644
--- a/Tests/ProjectSpecTests/ProjectSpecTests.swift
+++ b/Tests/ProjectSpecTests/ProjectSpecTests.swift
@@ -398,7 +398,8 @@ class ProjectSpecTests: XCTestCase {
codeSign: true,
link: true,
implicit: true,
- weakLink: true)],
+ weakLink: true,
+ copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "example", phaseOrder: .postCompile))],
info: Plist(path: "info.plist", attributes: ["foo": "bar"]),
entitlements: Plist(path: "entitlements.plist", attributes: ["foo": "bar"]),
transitivelyLinkDependencies: true,
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 9309c59aa..8b3d71ec9 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -1581,6 +1581,1423 @@ class ProjectGeneratorTests: XCTestCase {
}
}
}
+
+ func testGenerateXcodeProjectWithCustomDependencyDestinations() throws {
+
+ describe("generateXcodeProject") {
+
+ func generateProjectForApp(withDependencies: [Dependency], targets: [Target], packages: [String: SwiftPackage] = [:]) throws -> PBXProj {
+
+ let app = Target(
+ name: "App",
+ type: .application,
+ platform: .macOS,
+ dependencies: withDependencies
+ )
+
+ let project = Project(
+ name: "test",
+ targets: targets + [app],
+ packages: packages
+ )
+
+ return try project.generatePbxProj()
+ }
+
+ func expectCopyPhase(in project:PBXProj, withFilePaths: [String]? = nil, withProductPaths: [String]? = nil, toSubFolder subfolder: PBXCopyFilesBuildPhase.SubFolder, dstPath: String? = nil) throws {
+
+ let phases = project.copyFilesBuildPhases
+ try expect(phases.count) == 1
+ let phase = phases.first!
+ try expect(phase.dstSubfolderSpec) == subfolder
+ try expect(phase.dstPath) == dstPath
+ if let paths = withFilePaths {
+ try expect(phase.files?.count) == paths.count
+ let filePaths = phase.files!.map { $0.file!.path }
+ try expect(filePaths) == paths
+ }
+ if let paths = withProductPaths {
+ try expect(phase.files?.count) == paths.count
+ let filePaths = phase.files!.map { $0.product!.productName }
+ try expect(filePaths) == paths
+ }
+ }
+
+ $0.context("with target dependencies") {
+ $0.context("application") {
+
+ let appA = Target(
+ name: "appA",
+ type: .application,
+ platform: .macOS
+ )
+ let appB = Target(
+ name: "appB",
+ type: .application,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true),
+ Dependency(type: .target, reference: appB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [ appA, appB ])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["appA.app"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("framework") {
+
+ let frameworkA = Target(
+ name: "frameworkA",
+ type: .framework,
+ platform: .macOS
+ )
+ let frameworkB = Target(
+ name: "frameworkB",
+ type: .framework,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into frameworks without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: frameworkA.name, embed: true),
+ Dependency(type: .target, reference: frameworkB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .frameworks, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: frameworkA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: frameworkB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("staticFramework") {
+
+ let frameworkA = Target(
+ name: "frameworkA",
+ type: .staticFramework,
+ platform: .macOS
+ )
+ let frameworkB = Target(
+ name: "frameworkB",
+ type: .staticFramework,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into frameworks without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: frameworkA.name, embed: true),
+ Dependency(type: .target, reference: frameworkB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .frameworks, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: frameworkA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: frameworkB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("xcFramework") {
+
+ let frameworkA = Target(
+ name: "frameworkA",
+ type: .xcFramework,
+ platform: .macOS
+ )
+ let frameworkB = Target(
+ name: "frameworkB",
+ type: .xcFramework,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: frameworkA.name, embed: true),
+ Dependency(type: .target, reference: frameworkB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: frameworkA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: frameworkB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.xcframework"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("Dynamic Library") {
+
+ let libraryA = Target(
+ name: "libraryA",
+ type: .dynamicLibrary,
+ platform: .macOS
+ )
+ let libraryB = Target(
+ name: "libraryB",
+ type: .dynamicLibrary,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: libraryA.name, embed: true),
+ Dependency(type: .target, reference: libraryB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: libraryA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: libraryB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["libraryA.dylib"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("Static Library") {
+
+ let libraryA = Target(
+ name: "libraryA",
+ type: .staticLibrary,
+ platform: .macOS
+ )
+ let libraryB = Target(
+ name: "libraryB",
+ type: .staticLibrary,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: libraryA.name, embed: true),
+ Dependency(type: .target, reference: libraryB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them to custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: libraryA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: libraryB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["liblibraryA.a"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("bundle") {
+
+ let bundleA = Target(
+ name: "bundleA",
+ type: .bundle,
+ platform: .macOS
+ )
+ let bundleB = Target(
+ name: "bundleB",
+ type: .bundle,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true),
+ Dependency(type: .target, reference: bundleB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["bundleA.bundle"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("unitTestBundle") {
+
+ let bundleA = Target(
+ name: "bundleA",
+ type: .unitTestBundle,
+ platform: .macOS
+ )
+ let bundleB = Target(
+ name: "bundleB",
+ type: .unitTestBundle,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true),
+ Dependency(type: .target, reference: bundleB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["bundleA.xctest"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("uitTestBundle") {
+
+ let bundleA = Target(
+ name: "bundleA",
+ type: .uiTestBundle,
+ platform: .macOS
+ )
+ let bundleB = Target(
+ name: "bundleB",
+ type: .uiTestBundle,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true),
+ Dependency(type: .target, reference: bundleB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["bundleA.xctest"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("appExtension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .appExtension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .appExtension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .executables, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .executables, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .executables, dstPath: "test")
+ }
+ }
+
+ $0.context("commandLineTool") {
+
+ let toolA = Target(
+ name: "toolA",
+ type: .commandLineTool,
+ platform: .macOS
+ )
+ let toolB = Target(
+ name: "toolB",
+ type: .commandLineTool,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: toolA.name, embed: true),
+ Dependency(type: .target, reference: toolB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [toolA, toolB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: toolA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: toolB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [toolA, toolB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["toolA"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("watchApp") {
+
+ let appA = Target(
+ name: "appA",
+ type: .watchApp,
+ platform: .macOS
+ )
+ let appB = Target(
+ name: "appB",
+ type: .watchApp,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true),
+ Dependency(type: .target, reference: appB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["appA.app"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("watch2App") {
+
+ let appA = Target(
+ name: "appA",
+ type: .watch2App,
+ platform: .macOS
+ )
+ let appB = Target(
+ name: "appB",
+ type: .watch2App,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true),
+ Dependency(type: .target, reference: appB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["appA.app"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("watch2AppContainer") {
+
+ let appA = Target(
+ name: "appA",
+ type: .watch2AppContainer,
+ platform: .macOS
+ )
+ let appB = Target(
+ name: "appB",
+ type: .watch2AppContainer,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true),
+ Dependency(type: .target, reference: appB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["appA.app"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("watchExtension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .watchExtension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .watchExtension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("watch2Extension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .watch2Extension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .watch2Extension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("tvExtension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .tvExtension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .tvExtension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("messagesApplication") {
+
+ let appA = Target(
+ name: "appA",
+ type: .messagesApplication,
+ platform: .macOS
+ )
+ let appB = Target(
+ name: "appB",
+ type: .messagesApplication,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true),
+ Dependency(type: .target, reference: appB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["appA.app"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("messagesExtension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .messagesExtension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .messagesExtension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("stickerPack") {
+
+ let extA = Target(
+ name: "extA",
+ type: .stickerPack,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .stickerPack,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("xpcService") {
+
+ let xpcA = Target(
+ name: "xpcA",
+ type: .xpcService,
+ platform: .macOS
+ )
+ let xpcB = Target(
+ name: "xpcB",
+ type: .xpcService,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: xpcA.name, embed: true),
+ Dependency(type: .target, reference: xpcB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [xpcA, xpcB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["xpcA.xpc"], toSubFolder: .productsDirectory, dstPath: "$(CONTENTS_FOLDER_PATH)/XPCServices")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: xpcA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: xpcB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [xpcA, xpcB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["xpcA.xpc"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("ocUnitTestBundle") {
+
+ let bundleA = Target(
+ name: "bundleA",
+ type: .ocUnitTestBundle,
+ platform: .macOS
+ )
+ let bundleB = Target(
+ name: "bundleB",
+ type: .ocUnitTestBundle,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true),
+ Dependency(type: .target, reference: bundleB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["bundleA.octest"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("xcodeExtension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .xcodeExtension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .xcodeExtension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("instrumentsPackage") {
+
+ let pkgA = Target(
+ name: "pkgA",
+ type: .instrumentsPackage,
+ platform: .macOS
+ )
+ let pkgB = Target(
+ name: "pkgB",
+ type: .instrumentsPackage,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: pkgA.name, embed: true),
+ Dependency(type: .target, reference: pkgB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [pkgA, pkgB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: pkgA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: pkgB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [pkgA, pkgB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["pkgA.instrpkg"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("intentsServiceExtension") {
+
+ let extA = Target(
+ name: "extA",
+ type: .intentsServiceExtension,
+ platform: .macOS
+ )
+ let extB = Target(
+ name: "extB",
+ type: .intentsServiceExtension,
+ platform: .macOS
+ )
+
+ $0.it("embeds them into plugins without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true),
+ Dependency(type: .target, reference: extB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .plugins, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["extA.appex"], toSubFolder: .frameworks, dstPath: "test")
+ }
+ }
+
+ $0.context("appClip") {
+
+ let clipA = Target(
+ name: "clipA",
+ type: .onDemandInstallCapableApplication,
+ platform: .macOS
+ )
+ let clipB = Target(
+ name: "clipB",
+ type: .onDemandInstallCapableApplication,
+ platform: .macOS
+ )
+
+ $0.it("does embed them into products directory without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: clipA.name, embed: true),
+ Dependency(type: .target, reference: clipB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [clipA, clipB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["clipA.app"], toSubFolder: .productsDirectory, dstPath: "$(CONTENTS_FOLDER_PATH)/AppClips")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: clipA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: clipB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [clipA, clipB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["clipA.app"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("Metal Library") {
+
+ let libraryA = Target(
+ name: "libraryA",
+ type: .metalLibrary,
+ platform: .macOS
+ )
+ let libraryB = Target(
+ name: "libraryB",
+ type: .metalLibrary,
+ platform: .macOS
+ )
+
+ $0.it("does not embed them without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: libraryA.name, embed: true),
+ Dependency(type: .target, reference: libraryB.name, embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])
+
+ // then
+ try expect(pbxProject.copyFilesBuildPhases.count) == 0
+ }
+
+ $0.it("embeds them to custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .target, reference: libraryA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .target, reference: libraryB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["libraryA.metallib"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+ }
+
+ $0.context("with framework dependencies") {
+ $0.it("embeds them into frameworks without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .framework, reference: "frameworkA.framework", embed: true),
+ Dependency(type: .framework, reference: "frameworkB.framework", embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .frameworks, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .framework, reference: "frameworkA.framework", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .framework, reference: "frameworkB.framework", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .plugins, dstPath: "test")
+ }
+
+ $0.it("generates single copy phase for multiple frameworks with same copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .framework, reference: "frameworkA.framework", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .framework, reference: "frameworkB.framework", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework", "frameworkB.framework"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("with sdk dependencies") {
+
+ $0.it("embeds them into frameworks without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .sdk(root: nil), reference: "sdkA.framework", embed: true),
+ Dependency(type: .sdk(root: nil), reference: "sdkB.framework", embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["System/Library/Frameworks/sdkA.framework"], toSubFolder: .frameworks, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .sdk(root: nil), reference: "sdkA.framework", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .sdk(root: nil), reference: "sdkB.framework", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["System/Library/Frameworks/sdkA.framework"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("with package dependencies") {
+
+ let packages: [String: SwiftPackage] = [
+ "RxSwift": .remote(url: "https://github.com/ReactiveX/RxSwift", versionRequirement: .upToNextMajorVersion("5.1.1")),
+ ]
+
+ $0.it("embeds them into frameworks without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .package(product: "RxSwift"), reference: "RxSwift", embed: true),
+ Dependency(type: .package(product: "RxCocoa"), reference: "RxSwift", embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [], packages: packages)
+
+ // then
+ try expectCopyPhase(in: pbxProject, withProductPaths: ["RxSwift"], toSubFolder: .frameworks, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .package(product: "RxSwift"), reference: "RxSwift", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .package(product: "RxCocoa"), reference: "RxSwift", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [], packages: packages)
+
+ // then
+ try expectCopyPhase(in: pbxProject, withProductPaths: ["RxSwift"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("with carthage dependencies") {
+
+ $0.it("embeds them into frameworks without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "frameworkA.framework", embed: true),
+ Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "frameworkB.framework", embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .frameworks, dstPath: "")
+ }
+
+ $0.it("embeds them into custom location with copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "frameworkA.framework", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .carthage(findFrameworks: false, linkType: .static), reference: "frameworkB.framework", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["frameworkA.framework"], toSubFolder: .plugins, dstPath: "test")
+ }
+ }
+
+ $0.context("with bundle dependencies") {
+ $0.it("embeds them into resources without copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .bundle, reference: "bundleA.bundle", embed: true),
+ Dependency(type: .bundle, reference: "bundleB.bundle", embed: false),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ /// XcodeGen ignores embed: false for bundles
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["bundleA.bundle", "bundleB.bundle"], toSubFolder: .resources)
+ }
+
+ $0.it("ignores custom copy phase spec") {
+
+ // given
+ let dependencies = [
+ Dependency(type: .bundle, reference: "bundleA.bundle", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ Dependency(type: .bundle, reference: "bundleB.bundle", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: "test", phaseOrder: .postCompile)),
+ ]
+
+ // when
+ let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])
+
+ // then
+ /// XcodeGen ignores embed: false for bundles
+ try expectCopyPhase(in: pbxProject, withFilePaths: ["bundleA.bundle", "bundleB.bundle"], toSubFolder: .resources)
+ }
+ }
+ }
+ }
}
private extension PBXTarget {
From a4d7a61a6805f62b6da9f7ffb5cdf13a18d16a40 Mon Sep 17 00:00:00 2001
From: Yuta Saito
Date: Thu, 15 Jul 2021 18:06:33 +0900
Subject: [PATCH 098/284] Fix broken codesign option for bundle dependency
(#1104)
* Fix missing codesign option for bundle dependency
* Add codeSign: false test case for bundle dependency
* Update CHANGELOG.md
---
CHANGELOG.md | 4 +
Sources/XcodeGenKit/PBXProjGenerator.swift | 5 +-
.../AnotherProject.xcodeproj/project.pbxproj | 102 ++++++++++++++++
.../TestProject/AnotherProject/project.yml | 3 +
.../Project.xcodeproj/project.pbxproj | 114 +++++++++++++++++-
Tests/Fixtures/TestProject/project.yml | 1 +
6 files changed, 227 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4bcbc98de..eb97619e2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@
### Added
- Allow specifying a `copy` setting for each dependency. [#1038](https://github.com/yonaskolb/XcodeGen/pull/1039) @JakubBednar
+### Fixed
+
+- Fix broken codesign option for bundle dependency [#1104](https://github.com/yonaskolb/XcodeGen/pull/1104) @kateinoigakukun
+
## 2.24.0
### Added
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 033b0fe31..4496f548c 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -958,7 +958,10 @@ public class PBXProjGenerator {
sourceTree: .buildProductsDir
)
- let pbxBuildFile = PBXBuildFile(file: fileReference, settings: nil)
+ let pbxBuildFile = PBXBuildFile(
+ file: fileReference,
+ settings: embed ? getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true) : nil
+ )
pbxBuildFile.platformFilter = platform
let buildFile = addObject(pbxBuildFile)
copyBundlesReferences.append(buildFile)
diff --git a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
index c0b561029..add10f0bc 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj
@@ -10,6 +10,7 @@
6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
60D6679FB526839EAFEA2EEE /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
D6340FC7DEBC81E0127BAFD6 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F1EFFCA88BFC3A1DD2D89DA7 /* BundleY.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleY.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
@@ -34,6 +35,7 @@
isa = PBXGroup;
children = (
6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */,
+ F1EFFCA88BFC3A1DD2D89DA7 /* BundleY.bundle */,
D6340FC7DEBC81E0127BAFD6 /* ExternalTarget.framework */,
);
name = Products;
@@ -59,6 +61,20 @@
/* End PBXLegacyTarget section */
/* Begin PBXNativeTarget section */
+ 201AC870383B8CD218AD0FAB /* BundleY */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = EF9E2AA4073D3B2EC8195688 /* Build configuration list for PBXNativeTarget "BundleY" */;
+ buildPhases = (
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = BundleY;
+ productName = BundleY;
+ productReference = F1EFFCA88BFC3A1DD2D89DA7 /* BundleY.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
63A2D4898D974A06E85B07F8 /* BundleX */ = {
isa = PBXNativeTarget;
buildConfigurationList = 32C09717E388BCD9DB9E513C /* Build configuration list for PBXNativeTarget "BundleX" */;
@@ -110,6 +126,7 @@
projectRoot = "";
targets = (
63A2D4898D974A06E85B07F8 /* BundleX */,
+ 201AC870383B8CD218AD0FAB /* BundleY */,
E76A5F5E363E470416D3B487 /* ExternalTarget */,
A6D9FB94860C005F0B723B5F /* IncludedLegacy */,
);
@@ -322,6 +339,18 @@
};
name = "Test Debug";
};
+ 1CE986A8B593E707AB71BDBA /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
270E1D32776D2D196D435FDA /* Staging Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -570,6 +599,18 @@
};
name = "Production Debug";
};
+ 58F418B6745A09C6479FDD6E /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
5F14CE04E33ACD729A0EE6B6 /* Test Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -648,6 +689,18 @@
};
name = "Test Release";
};
+ 816E80EA88CB645CE988138C /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
9BD6CAD5463121A1C3FED138 /* Production Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -760,6 +813,42 @@
};
name = "Production Release";
};
+ E7907C46C6282D78E009083B /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ FB66976FF75B2B0B255D5AA4 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ FD9323224BE5A91248B7BEF2 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -815,6 +904,19 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Production Debug";
};
+ EF9E2AA4073D3B2EC8195688 /* Build configuration list for PBXNativeTarget "BundleY" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ FD9323224BE5A91248B7BEF2 /* Production Debug */,
+ 1CE986A8B593E707AB71BDBA /* Production Release */,
+ 816E80EA88CB645CE988138C /* Staging Debug */,
+ 58F418B6745A09C6479FDD6E /* Staging Release */,
+ E7907C46C6282D78E009083B /* Test Debug */,
+ FB66976FF75B2B0B255D5AA4 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
/* End XCConfigurationList section */
};
rootObject = 1B166EB49192B73A9DD8E108 /* Project object */;
diff --git a/Tests/Fixtures/TestProject/AnotherProject/project.yml b/Tests/Fixtures/TestProject/AnotherProject/project.yml
index 65e729ede..3c0cc4867 100644
--- a/Tests/Fixtures/TestProject/AnotherProject/project.yml
+++ b/Tests/Fixtures/TestProject/AnotherProject/project.yml
@@ -8,6 +8,9 @@ targets:
BundleX:
type: bundle
platform: iOS
+ BundleY:
+ type: bundle
+ platform: iOS
ExternalTarget:
type: framework
platform: iOS
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
index edfa695ab..854a725f6 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -63,11 +63,12 @@
339578307B9266AB3D7722D9 /* File2.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC56891DA7446EAC8C2F27EB /* File2.swift */; };
3535891EC86283BB5064E7E1 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };
3788E1382B38DF4ACE3D2BB1 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3BBCA6F76E5F212E9C55FB78 /* BundleX.bundle in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = 45C12576F5AA694DD0CE2132 /* BundleX.bundle */; };
+ 3BBCA6F76E5F212E9C55FB78 /* BundleX.bundle in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = 45C12576F5AA694DD0CE2132 /* BundleX.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3C5134EE524310ACF7B7CD6E /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CAF6C55B555E3E1352645B6 /* ExtensionDelegate.swift */; };
42BC5788871D1D838B253952 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
447D59BE2E0993D7245EA247 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3797E591F302ECC0AA2FC607 /* Assets.xcassets */; };
45E6702CD9C088FF1FC25F34 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = A680BE9F68A255B0FB291AE6 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 470D3493CDBFE56E2083A5FD /* BundleY.bundle in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = E3958AB20082EA12D4D5E60C /* BundleY.bundle */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
47D1F439B8E6D287B3F3E8D1 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
47FC57B04A3AD83359F433EA /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };
49A4B8937BB5520B36EA33F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 814D72C2B921F60B759C2D4B /* Main.storyboard */; };
@@ -608,6 +609,7 @@
dstSubfolderSpec = 7;
files = (
3BBCA6F76E5F212E9C55FB78 /* BundleX.bundle in Copy Bundle Resources */,
+ 470D3493CDBFE56E2083A5FD /* BundleY.bundle in Copy Bundle Resources */,
);
name = "Copy Bundle Resources";
runOnlyForDeploymentPostprocessing = 0;
@@ -765,6 +767,7 @@
B76E17CE3574081D5BF45B44 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
BA040F1F7D6CA08878323A55 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
BB178D03E75929F3F5B10C56 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
+ BB677D970923F663D846D7E0 /* BundleY.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleY.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
BC56891DA7446EAC8C2F27EB /* File2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File2.swift; path = Group2/File2.swift; sourceTree = ""; };
BDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "GoogleService-Info.plist"; sourceTree = ""; };
BECEA4A483ADEB8158F640B3 /* Tool */ = {isa = PBXFileReference; includeInIndex = 0; path = Tool; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -787,6 +790,7 @@
D8A016580A3B8F72B820BFBF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "