From 1aac853e7bf7dccc6280d529e769b9ffdc94daaf Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 20 Sep 2018 08:43:40 +1000 Subject: [PATCH 01/77] add xcodegen.zip to ignored files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 89dd5826..01d32c76 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ xcuserdata *.xccheckout *.xcuserstate XcodeGen.xcodeproj +xcodegen.zip From e97b002655a093096ede6d4989d07cf2cc108abc Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 25 Sep 2018 21:08:11 +1000 Subject: [PATCH 02/77] upgrade to xcodeproj 5 --- Package.resolved | 26 +- Package.swift | 6 +- Sources/ProjectSpec/Config.swift | 1 - Sources/ProjectSpec/Dependency.swift | 1 - Sources/ProjectSpec/DeploymentTarget.swift | 1 - Sources/ProjectSpec/Project.swift | 1 - Sources/ProjectSpec/Scheme.swift | 10 +- Sources/ProjectSpec/Settings.swift | 2 +- Sources/ProjectSpec/SpecOptions.swift | 1 - Sources/ProjectSpec/Target.swift | 2 +- Sources/ProjectSpec/TargetScheme.swift | 2 +- Sources/ProjectSpec/TargetSource.swift | 6 +- Sources/ProjectSpec/XCProjExtensions.swift | 2 +- Sources/XcodeGen/main.swift | 5 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 244 +- Sources/XcodeGenKit/ProjectGenerator.swift | 2 +- Sources/XcodeGenKit/SettingsBuilder.swift | 5 +- Sources/XcodeGenKit/SettingsPresetFile.swift | 2 +- Sources/XcodeGenKit/SourceGenerator.swift | 78 +- Sources/XcodeGenKit/XCProjExtensions.swift | 38 +- .../Project.xcodeproj/project.pbxproj | 5468 ++++++++--------- .../xcshareddata/xcschemes/App_iOS.xcscheme | 12 +- .../xcschemes/App_watchOS.xcscheme | 8 +- .../xcshareddata/xcschemes/Framework.xcscheme | 10 +- .../xcschemes/iMessageApp.xcscheme | 8 +- Tests/XcodeGenKitTests/GeneratorHelpers.swift | 8 +- .../ProjectFixtureTests.swift | 18 +- .../ProjectGeneratorTests.swift | 113 +- Tests/XcodeGenKitTests/ProjectSpecTests.swift | 2 +- .../SourceGeneratorTests.swift | 53 +- Tests/XcodeGenKitTests/SpecLoadingTests.swift | 2 +- Tests/XcodeGenKitTests/TestHelpers.swift | 2 +- 32 files changed, 3066 insertions(+), 3073 deletions(-) diff --git a/Package.resolved b/Package.resolved index a82af1f5..eed901f3 100644 --- a/Package.resolved +++ b/Package.resolved @@ -46,15 +46,6 @@ "version": "3.1.4" } }, - { - "package": "ShellOut", - "repositoryURL": "https://github.com/JohnSundell/ShellOut.git", - "state": { - "branch": null, - "revision": "f1c253a34a40df4bfd268b09fdb101b059f6d52d", - "version": "2.1.0" - } - }, { "package": "Spectre", "repositoryURL": "https://github.com/kylef/Spectre.git", @@ -65,12 +56,21 @@ } }, { - "package": "xcproj", - "repositoryURL": "https://github.com/tuist/xcodeproj.git", + "package": "SwiftPM", + "repositoryURL": "https://github.com/apple/swift-package-manager", "state": { "branch": null, - "revision": "5253c22f208558264e3a64a3a29f11537ca1b41a", - "version": "4.3.1" + "revision": "6983434787dec4e543e9d398a0a9acf63ccd4da1", + "version": "0.2.1" + } + }, + { + "package": "xcodeproj", + "repositoryURL": "https://github.com/tuist/xcodeproj.git", + "state": { + "branch": "master", + "revision": "f7f497b00e41dae704815ecebfd030b85f82c240", + "version": null } }, { diff --git a/Package.swift b/Package.swift index b942cd34..93e4c9d5 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", from: "4.3.1"), + .package(url: "https://github.com/tuist/xcodeproj.git", .branchItem("master")), ], targets: [ .target(name: "XcodeGen", dependencies: [ @@ -27,12 +27,12 @@ let package = Package( .target(name: "XcodeGenKit", dependencies: [ "ProjectSpec", "JSONUtilities", - "xcproj", + "xcodeproj", "PathKit", ]), .target(name: "ProjectSpec", dependencies: [ "JSONUtilities", - "xcproj", + "xcodeproj", "Yams", ]), .testTarget(name: "XcodeGenKitTests", dependencies: [ diff --git a/Sources/ProjectSpec/Config.swift b/Sources/ProjectSpec/Config.swift index 20c7c4ab..2e343e57 100644 --- a/Sources/ProjectSpec/Config.swift +++ b/Sources/ProjectSpec/Config.swift @@ -1,6 +1,5 @@ import Foundation import JSONUtilities -import xcproj public struct Config: Equatable { public var name: String diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift index 324f703a..84602873 100644 --- a/Sources/ProjectSpec/Dependency.swift +++ b/Sources/ProjectSpec/Dependency.swift @@ -1,6 +1,5 @@ import Foundation import JSONUtilities -import xcproj public struct Dependency: Equatable { diff --git a/Sources/ProjectSpec/DeploymentTarget.swift b/Sources/ProjectSpec/DeploymentTarget.swift index 190ce071..e8640d13 100644 --- a/Sources/ProjectSpec/DeploymentTarget.swift +++ b/Sources/ProjectSpec/DeploymentTarget.swift @@ -1,6 +1,5 @@ import Foundation import JSONUtilities -import xcproj public struct DeploymentTarget: Equatable { diff --git a/Sources/ProjectSpec/Project.swift b/Sources/ProjectSpec/Project.swift index bb6eeebb..482d3986 100644 --- a/Sources/ProjectSpec/Project.swift +++ b/Sources/ProjectSpec/Project.swift @@ -1,7 +1,6 @@ import Foundation import JSONUtilities import PathKit -import xcproj import Yams public struct Project: BuildSettingsContainer { diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift index d6d87836..1bd83431 100644 --- a/Sources/ProjectSpec/Scheme.swift +++ b/Sources/ProjectSpec/Scheme.swift @@ -1,6 +1,6 @@ import Foundation import JSONUtilities -import xcproj +import xcodeproj public typealias BuildType = XCScheme.BuildAction.Entry.BuildFor @@ -311,7 +311,7 @@ extension BuildType: JSONPrimitiveConvertible { } } -extension XCScheme.EnvironmentVariable: JSONObjectConvertible, Equatable { +extension XCScheme.EnvironmentVariable: JSONObjectConvertible { private static func parseValue(_ value: Any) -> String { if let bool = value as? Bool { @@ -346,10 +346,4 @@ extension XCScheme.EnvironmentVariable: JSONObjectConvertible, Equatable { return [] } } - - public static func == (lhs: XCScheme.EnvironmentVariable, rhs: XCScheme.EnvironmentVariable) -> Bool { - return lhs.variable == rhs.variable && - lhs.value == rhs.value && - lhs.enabled == rhs.enabled - } } diff --git a/Sources/ProjectSpec/Settings.swift b/Sources/ProjectSpec/Settings.swift index c1a5dad5..26d061bf 100644 --- a/Sources/ProjectSpec/Settings.swift +++ b/Sources/ProjectSpec/Settings.swift @@ -1,7 +1,7 @@ import Foundation import JSONUtilities import PathKit -import xcproj +import xcodeproj public struct Settings: Equatable, JSONObjectConvertible, CustomStringConvertible { diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift index 6b4adfc4..9d559578 100644 --- a/Sources/ProjectSpec/SpecOptions.swift +++ b/Sources/ProjectSpec/SpecOptions.swift @@ -1,6 +1,5 @@ import Foundation import JSONUtilities -import xcproj public struct SpecOptions: Equatable { diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index a38e5b13..4cdb7b88 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -1,6 +1,6 @@ import Foundation import JSONUtilities -import xcproj +import xcodeproj public struct LegacyTarget: Equatable { public var toolPath: String diff --git a/Sources/ProjectSpec/TargetScheme.swift b/Sources/ProjectSpec/TargetScheme.swift index 72194461..50d49f88 100644 --- a/Sources/ProjectSpec/TargetScheme.swift +++ b/Sources/ProjectSpec/TargetScheme.swift @@ -1,6 +1,6 @@ import Foundation import JSONUtilities -import xcproj +import xcodeproj public struct TargetScheme: Equatable { public var testTargets: [String] diff --git a/Sources/ProjectSpec/TargetSource.swift b/Sources/ProjectSpec/TargetSource.swift index 08bc65cd..91264e51 100644 --- a/Sources/ProjectSpec/TargetSource.swift +++ b/Sources/ProjectSpec/TargetSource.swift @@ -1,7 +1,7 @@ import Foundation import JSONUtilities import PathKit -import xcproj +import xcodeproj public struct TargetSource: Equatable { @@ -57,7 +57,7 @@ public struct TargetSource: Equatable { case sharedSupport case plugins - public var destination: xcproj.PBXCopyFilesBuildPhase.SubFolder? { + public var destination: xcodeproj.PBXCopyFilesBuildPhase.SubFolder? { switch self { case .absolutePath: return .absolutePath case .productsDirectory: return .productsDirectory @@ -82,7 +82,7 @@ public struct TargetSource: Equatable { } } - public var buildPhase: xcproj.BuildPhase? { + public var buildPhase: xcodeproj.BuildPhase? { switch self { case .sources: return .sources case .headers: return .headers diff --git a/Sources/ProjectSpec/XCProjExtensions.swift b/Sources/ProjectSpec/XCProjExtensions.swift index 0b3096dc..85f74b4d 100644 --- a/Sources/ProjectSpec/XCProjExtensions.swift +++ b/Sources/ProjectSpec/XCProjExtensions.swift @@ -1,6 +1,6 @@ import Foundation import PathKit -import xcproj +import xcodeproj extension PBXProductType { diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index 7531e821..b7288ab2 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -4,7 +4,8 @@ import JSONUtilities import PathKit import ProjectSpec import XcodeGenKit -import xcproj +import xcodeproj +import Basic let version = try Version("1.11.2") @@ -54,7 +55,7 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { if projectFile.exists { try projectFile.copy(tempPath) } - try xcodeProject.write(path: tempPath, override: true) + try xcodeProject.write(path: AbsolutePath(tempPath.absolute().string), override: true) try? projectFile.delete() try tempPath.copy(projectFile) try? tempPath.delete() diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index de814fd0..962bc445 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -1,8 +1,7 @@ import Foundation -import JSONUtilities import PathKit import ProjectSpec -import xcproj +import xcodeproj import Yams public class PBXProjGenerator { @@ -12,13 +11,13 @@ public class PBXProjGenerator { let pbxProj: PBXProj var sourceGenerator: SourceGenerator! - var targetObjects: [String: ObjectReference] = [:] - var targetAggregateObjects: [String: ObjectReference] = [:] - var targetBuildFiles: [String: ObjectReference] = [:] - var targetFileReferences: [String: String] = [:] + var targetObjects: [String: PBXTarget] = [:] + var targetAggregateObjects: [String: PBXAggregateTarget] = [:] + var targetBuildFiles: [String: PBXBuildFile] = [:] + var targetFileReferences: [String: PBXObjectReference] = [:] - var carthageFrameworksByPlatform: [String: Set] = [:] - var frameworkFiles: [String] = [] + var carthageFrameworksByPlatform: [String: Set] = [:] + var frameworkFiles: [PBXObjectReference] = [] var generated = false @@ -28,21 +27,21 @@ public class PBXProjGenerator { public init(project: Project) { self.project = project - pbxProj = PBXProj(rootObject: "", objectVersion: 46) + pbxProj = PBXProj(objectVersion: 46) sourceGenerator = SourceGenerator(project: project) { [unowned self] id, object in - self.addObject(id: id, object) + _ = self.addObject(id: id, object) } } - func addObject(id: String, _ object: PBXObject) -> String { - let reference = pbxProj.objects.generateReference(object, id) - pbxProj.objects.addObject(object, reference: reference) - return reference + func addObject(id: String, _ object: T) -> T { +// let reference = pbxProj.objects.generateReference(object, id) + pbxProj.objects.addObject(object) + return object } - func createObject(id: String, _ object: T) -> ObjectReference { - let reference = addObject(id: id, object) - return ObjectReference(reference: reference, object: object) + func createObject(id: String, _ object: T) -> T { + pbxProj.objects.addObject(object) + return object } public func generate() throws -> PBXProj { @@ -55,9 +54,9 @@ public class PBXProjGenerator { try sourceGenerator.getFileGroups(path: group) } - let buildConfigs: [ObjectReference] = project.configs.map { config in + let buildConfigs: [XCBuildConfiguration] = project.configs.map { config in let buildSettings = project.getProjectBuildSettings(config: config) - var baseConfigurationReference: String? + var baseConfigurationReference: PBXObjectReference? if let configPath = project.configFiles[config.name] { baseConfigurationReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) } @@ -71,21 +70,21 @@ public class PBXProjGenerator { ) } - let configName = project.options.defaultConfig ?? buildConfigs.first?.object.name ?? "" + let configName = project.options.defaultConfig ?? buildConfigs.first?.name ?? "" let buildConfigList = createObject( id: project.name, XCConfigurationList( - buildConfigurations: buildConfigs.map { $0.reference }, + buildConfigurationsReferences: buildConfigs.map { $0.reference }, defaultConfigurationName: configName ) ) - var derivedGroups: [ObjectReference] = [] + var derivedGroups: [PBXGroup] = [] let mainGroup = createObject( id: "Project", PBXGroup( - children: [], + childrenReferences: [], sourceTree: .group, usesTabs: project.options.usesTabs, indentWidth: project.options.indentWidth, @@ -97,14 +96,14 @@ public class PBXProjGenerator { id: project.name, PBXProject( name: project.name, - buildConfigurationList: buildConfigList.reference, + buildConfigurationListReference: buildConfigList.reference, compatibilityVersion: "Xcode 3.2", - mainGroup: mainGroup.reference, + mainGroupReference: mainGroup.reference, developmentRegion: project.options.developmentLanguage ?? "en" ) ) - pbxProj.rootObject = pbxProject.reference + pbxProj.rootObjectReference = pbxProject.reference for target in project.targets { let targetObject: PBXTarget @@ -125,7 +124,7 @@ public class PBXProjGenerator { var explicitFileType: String? var lastKnownFileType: String? - let fileType = PBXFileReference.fileType(path: Path(target.filename)) + let fileType = Xcode.fileType(path: Path(target.filename)) if target.platform == .macOS || target.platform == .watchOS || target.type == .framework { explicitFileType = fileType } else { @@ -146,8 +145,8 @@ public class PBXProjGenerator { targetFileReferences[target.name] = fileReference.reference targetBuildFiles[target.name] = createObject( - id: fileReference.reference, - PBXBuildFile(fileRef: fileReference.reference) + id: "legacy target build file" + target.name, + PBXBuildFile(fileReference: fileReference.reference) ) } } @@ -170,7 +169,7 @@ public class PBXProjGenerator { let productGroup = createObject( id: "Products", PBXGroup( - children: Array(targetFileReferences.values), + childrenReferences: Array(targetFileReferences.values), sourceTree: .group, name: "Products" ) @@ -179,23 +178,23 @@ public class PBXProjGenerator { if !carthageFrameworksByPlatform.isEmpty { var platforms: [PBXGroup] = [] - var platformReferences: [String] = [] + var platformReferences: [PBXObjectReference] = [] for (platform, fileReferences) in carthageFrameworksByPlatform { - let platformGroup: ObjectReference = createObject( + let platformGroup: PBXGroup = createObject( id: "Carthage" + platform, PBXGroup( - children: fileReferences.sorted(), + childrenReferences: fileReferences.sorted(), sourceTree: .group, path: platform ) ) platformReferences.append(platformGroup.reference) - platforms.append(platformGroup.object) + platforms.append(platformGroup) } let carthageGroup = createObject( id: "Carthage", PBXGroup( - children: platformReferences.sorted(), + childrenReferences: platformReferences.sorted(), sourceTree: .group, name: "Carthage", path: carthageBuildPath @@ -208,7 +207,7 @@ public class PBXProjGenerator { let group = createObject( id: "Frameworks", PBXGroup( - children: frameworkFiles, + childrenReferences: frameworkFiles, sourceTree: .group, name: "Frameworks" ) @@ -216,12 +215,12 @@ public class PBXProjGenerator { derivedGroups.append(group) } - mainGroup.object.children = Array(sourceGenerator.rootGroups) + mainGroup.childrenReferences = Array(sourceGenerator.rootGroups) sortGroups(group: mainGroup) // add derived groups at the end derivedGroups.forEach(sortGroups) - mainGroup.object.children += derivedGroups - .sorted { $0.object.nameOrPath.localizedStandardCompare($1.object.nameOrPath) == .orderedAscending } + mainGroup.childrenReferences += derivedGroups + .sorted { $0.nameOrPath.localizedStandardCompare($1.nameOrPath) == .orderedAscending } .map { $0.reference } let projectAttributes: [String: Any] = ["LastUpgradeCheck": project.xcodeVersion] @@ -231,24 +230,24 @@ public class PBXProjGenerator { let knownRegions = sourceGenerator.knownRegions.sorted() pbxProject.object.knownRegions = knownRegions.isEmpty ? ["en"] : knownRegions - let allTargets: [ObjectReference] = Array(targetObjects.values) + Array(targetAggregateObjects.values.map { ObjectReference(reference: $0.reference, object: $0.object) }) + let allTargets: [PBXTarget] = Array(targetObjects.values) + Array(targetAggregateObjects.values) pbxProject.object.targets = allTargets - .sorted { $0.object.name < $1.object.name } + .sorted { $0.name < $1.name } .map { $0.reference } - pbxProject.object.attributes = projectAttributes + pbxProject.attributes = projectAttributes return pbxProj } func generateAggregateTarget(_ target: AggregateTarget) throws { - let aggregateTarget = targetAggregateObjects[target.name]!.object + let aggregateTarget = targetAggregateObjects[target.name]! - let configs: [ObjectReference] = project.configs.map { config in + let configs: [XCBuildConfiguration] = project.configs.map { config in let buildSettings = project.getBuildSettings(settings: target.settings, config: config) - var baseConfigurationReference: String? + var baseConfigurationReference: PBXObjectReference? if let configPath = target.configFiles[config.name] { baseConfigurationReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) } @@ -260,30 +259,30 @@ public class PBXProjGenerator { return createObject(id: config.name + target.name, buildConfig) } - let dependencies: [String] = target.targets.map { generateTargetDependency(from: target.name, to: $0).reference } + let dependencies: [PBXObjectReference] = target.targets.map { generateTargetDependency(from: target.name, to: $0).reference } let buildConfigList = createObject(id: target.name, XCConfigurationList( - buildConfigurations: configs.map { $0.reference }, + buildConfigurationsReferences: configs.map { $0.reference }, defaultConfigurationName: "" )) - var buildPhases: [String] = [] + var buildPhases: [PBXObjectReference] = [] buildPhases += try target.buildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) } - aggregateTarget.buildPhases = buildPhases - aggregateTarget.buildConfigurationList = buildConfigList.reference - aggregateTarget.dependencies = dependencies + aggregateTarget.buildPhasesReferences = buildPhases + aggregateTarget.buildConfigurationListReference = buildConfigList.reference + aggregateTarget.dependenciesReferences = dependencies } - func generateTargetDependency(from: String, to target: String) -> ObjectReference { + func generateTargetDependency(from: String, to target: String) -> PBXTargetDependency { guard let targetReference = targetObjects[target]?.reference ?? targetAggregateObjects[target]?.reference else { fatalError("target not found") } let targetProxy = createObject( id: "\(from)-\(target)", PBXContainerItemProxy( - containerPortal: pbxProj.rootObject, - remoteGlobalIDString: targetReference, + containerPortalReference: pbxProj.rootObjectReference!, + remoteGlobalIDReference: targetReference, proxyType: .nativeTarget, remoteInfo: target ) @@ -292,14 +291,14 @@ public class PBXProjGenerator { let targetDependency = createObject( id: "\(from)-\(target)", PBXTargetDependency( - target: targetReference, - targetProxy: targetProxy.reference + targetReference: targetReference, + targetProxyReference: targetProxy.reference ) ) return targetDependency } - func generateBuildScript(targetName: String, buildScript: BuildScript) throws -> String { + func generateBuildScript(targetName: String, buildScript: BuildScript) throws -> PBXObjectReference { let shellScript: String switch buildScript.script { @@ -310,7 +309,7 @@ public class PBXProjGenerator { } let shellScriptPhase = PBXShellScriptBuildPhase( - files: [], + fileReferences: [], name: buildScript.name ?? "Run Script", inputPaths: buildScript.inputFiles, outputPaths: buildScript.outputFiles, @@ -324,15 +323,15 @@ public class PBXProjGenerator { func generateTargetAttributes() -> [String: Any]? { - var targetAttributes: [String: [String: Any]] = [:] + var targetAttributes: [PBXObjectReference: [String: Any]] = [:] - let uiTestTargets = pbxProj.objects.nativeTargets.objectReferences.filter { $0.object.productType == .uiTestBundle } + let uiTestTargets = pbxProj.objects.nativeTargets.values.filter { $0.productType == .uiTestBundle } for uiTestTarget in uiTestTargets { // look up TEST_TARGET_NAME build setting func testTargetName(_ target: PBXTarget) -> String? { - guard let configurationList = target.buildConfigurationList else { return nil } - guard let buildConfigurationReferences = self.pbxProj.objects.configurationLists[configurationList]?.buildConfigurations else { return nil } + guard let configurationList = target.buildConfigurationListReference else { return nil } + guard let buildConfigurationReferences = self.pbxProj.objects.configurationLists[configurationList]?.buildConfigurationsReferences else { return nil } let configs = buildConfigurationReferences .compactMap { ref in self.pbxProj.objects.buildConfigurations[ref] } @@ -342,13 +341,13 @@ public class PBXProjGenerator { .first } - guard let name = testTargetName(uiTestTarget.object) else { continue } + guard let name = testTargetName(uiTestTarget) else { continue } guard let target = self.pbxProj.objects.targets(named: name).first else { continue } targetAttributes[uiTestTarget.reference, default: [:]].merge(["TestTargetID": target.reference]) } - func generateTargetAttributes(_ target: ProjectTarget, targetReference: String) { + func generateTargetAttributes(_ target: ProjectTarget, targetReference: PBXObjectReference) { if !target.attributes.isEmpty { targetAttributes[targetReference, default: [:]].merge(target.attributes) } @@ -392,33 +391,24 @@ public class PBXProjGenerator { return targetAttributes.isEmpty ? nil : ["TargetAttributes": targetAttributes] } - func sortGroups(group: ObjectReference) { + func sortGroups(group: PBXGroup) { // sort children - let children = group.object.children - .compactMap { reference -> ObjectReference? in - guard let fileElement = pbxProj.objects.getFileElement(reference: reference) else { - return nil - } - return ObjectReference(reference: reference, object: fileElement) - } + let children = group.childrenReferences + .compactMap { pbxProj.objects.getFileElement(reference: $0) } .sorted { child1, child2 in - let sortOrder1 = child1.object.getSortOrder(groupSortPosition: project.options.groupSortPosition) - let sortOrder2 = child2.object.getSortOrder(groupSortPosition: project.options.groupSortPosition) + let sortOrder1 = child1.getSortOrder(groupSortPosition: project.options.groupSortPosition) + let sortOrder2 = child2.getSortOrder(groupSortPosition: project.options.groupSortPosition) if sortOrder1 == sortOrder2 { - return child1.object.nameOrPath.localizedStandardCompare(child2.object.nameOrPath) == .orderedAscending + return child1.nameOrPath.localizedStandardCompare(child2.nameOrPath) == .orderedAscending } else { return sortOrder1 < sortOrder2 } } - group.object.children = children.map { $0.reference }.filter { $0 != group.reference } + group.childrenReferences = children.map { $0.reference }.filter { $0 != group.reference } // sort sub groups - let childGroups = group.object.children.compactMap { reference -> ObjectReference? in - guard let group = pbxProj.objects.groups[reference] else { - return nil - } - return ObjectReference(reference: reference, object: group) } + let childGroups = group.childrenReferences.compactMap { pbxProj.objects.groups[$0] } childGroups.forEach(sortGroups) } @@ -433,14 +423,14 @@ public class PBXProjGenerator { var searchForPlist = true var anyDependencyRequiresObjCLinking = false - var dependencies: [String] = [] - var targetFrameworkBuildFiles: [String] = [] + var dependencies: [PBXObjectReference] = [] + var targetFrameworkBuildFiles: [PBXObjectReference] = [] var frameworkBuildPaths = Set() - var copyFilesBuildPhasesFiles: [TargetSource.BuildPhase.CopyFilesSettings: [String]] = [:] - var copyFrameworksReferences: [String] = [] - var copyResourcesReferences: [String] = [] - var copyWatchReferences: [String] = [] - var extensions: [String] = [] + var copyFilesBuildPhasesFiles: [TargetSource.BuildPhase.CopyFilesSettings: [PBXObjectReference]] = [:] + var copyFrameworksReferences: [PBXObjectReference] = [] + var copyResourcesReferences: [PBXObjectReference] = [] + var copyWatchReferences: [PBXObjectReference] = [] + var extensions: [PBXObjectReference] = [] var carthageFrameworksToEmbed: [String] = [] let targetDependencies = (target.transitivelyLinkDependencies ?? project.options.transitivelyLinkDependencies) ? @@ -479,10 +469,10 @@ public class PBXProjGenerator { || (dependecyLinkage == .static && target.type.isExecutable) ) if link { - let dependencyBuildFile = targetBuildFiles[dependencyTargetName]! + let dependencyBuildFileReference = targetBuildFiles[dependencyTargetName]!.fileReference! let buildFile = createObject( - id: dependencyBuildFile.reference + target.name, - PBXBuildFile(fileRef: dependencyBuildFile.object.fileRef!) + id: "target dependency build file" + target.name, + PBXBuildFile(fileReference: dependencyBuildFileReference) ) targetFrameworkBuildFiles.append(buildFile.reference) @@ -498,9 +488,9 @@ public class PBXProjGenerator { )) if embed { let embedFile = createObject( - id: dependencyFileReference + target.name, + id: "target dependency embed build file" + target.name, PBXBuildFile( - fileRef: dependencyFileReference, + fileReference: dependencyFileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable) ) ) @@ -522,7 +512,7 @@ public class PBXProjGenerator { case .framework: guard target.type != .staticLibrary else { break } - let fileReference: String + let fileReference: PBXObjectReference if dependency.implicit { fileReference = sourceGenerator.getFileReference( path: Path(dependency.reference), @@ -537,8 +527,8 @@ public class PBXProjGenerator { } let buildFile = createObject( - id: "framework" + fileReference + target.name, - PBXBuildFile(fileRef: fileReference) + id: "framework file reference" + target.name, + PBXBuildFile(fileReference: fileReference) ) targetFrameworkBuildFiles.append(buildFile.reference) @@ -548,8 +538,8 @@ public class PBXProjGenerator { if embed { let embedFile = createObject( - id: "framework embed" + fileReference + target.name, - PBXBuildFile(fileRef: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) + id: "framework embed file" + target.name, + PBXBuildFile(fileReference: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) ) copyFrameworksReferences.append(embedFile.reference) } @@ -568,8 +558,8 @@ public class PBXProjGenerator { let fileReference = sourceGenerator.getFileReference(path: frameworkPath, inPath: platformPath) let buildFile = createObject( - id: "carthage" + fileReference + target.name, - PBXBuildFile(fileRef: fileReference) + id: "carthage dependency build file" + target.name, + PBXBuildFile(fileReference: fileReference) ) carthageFrameworksByPlatform[target.platform.carthageDirectoryName, default: []].insert(fileReference) @@ -595,8 +585,8 @@ public class PBXProjGenerator { if embed { if directlyEmbedCarthage { let embedFile = createObject( - id: "carthage embed" + fileReference + target.name, - PBXBuildFile(fileRef: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) + id: "carthage embed" + target.name, + PBXBuildFile(fileReference: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) ) copyFrameworksReferences.append(embedFile.reference) } else { @@ -606,9 +596,9 @@ public class PBXProjGenerator { } let fileReference = targetFileReferences[target.name] - var buildPhases: [String] = [] + var buildPhases: [PBXObjectReference] = [] - func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [String] { + func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXObjectReference] { let files = sourceFiles .reduce(into: [SourceFile]()) { output, sourceFile in if !output.contains(where: { $0.fileReference == sourceFile.fileReference }) { @@ -616,17 +606,17 @@ public class PBXProjGenerator { } } .sorted { $0.path.lastComponent < $1.path.lastComponent } - return files.map { createObject(id: $0.fileReference + target.name, $0.buildFile) } + return files.map { createObject(id: $0.path.string + target.name, $0.buildFile) } .map { $0.reference } } - func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [String] { + func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [PBXObjectReference] { let filteredSourceFiles = sourceFiles .filter { $0.buildPhase?.buildPhase == buildPhase } return getBuildFilesForSourceFiles(filteredSourceFiles) } - func getBuildFilesForCopyFilesPhases() -> [TargetSource.BuildPhase.CopyFilesSettings: [String]] { + func getBuildFilesForCopyFilesPhases() -> [TargetSource.BuildPhase.CopyFilesSettings: [PBXObjectReference]] { var sourceFilesByCopyFiles: [TargetSource.BuildPhase.CopyFilesSettings: [SourceFile]] = [:] for sourceFile in sourceFiles { guard case let .copyFiles(copyFilesSettings)? = sourceFile.buildPhase else { continue } @@ -639,17 +629,17 @@ public class PBXProjGenerator { let headersBuildPhaseFiles = getBuildFilesForPhase(.headers) if !headersBuildPhaseFiles.isEmpty && (target.type == .framework || target.type == .dynamicLibrary) { - let headersBuildPhase = createObject(id: target.name, PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) + let headersBuildPhase = createObject(id: target.name, PBXHeadersBuildPhase(fileReferences: headersBuildPhaseFiles)) buildPhases.append(headersBuildPhase.reference) } let sourcesBuildPhaseFiles = getBuildFilesForPhase(.sources) - let sourcesBuildPhase = createObject(id: target.name, PBXSourcesBuildPhase(files: sourcesBuildPhaseFiles)) + let sourcesBuildPhase = createObject(id: target.name, PBXSourcesBuildPhase(fileReferences: sourcesBuildPhaseFiles)) buildPhases.append(sourcesBuildPhase.reference) let resourcesBuildPhaseFiles = getBuildFilesForPhase(.resources) + copyResourcesReferences if !resourcesBuildPhaseFiles.isEmpty { - let resourcesBuildPhase = createObject(id: target.name, PBXResourcesBuildPhase(files: resourcesBuildPhaseFiles)) + let resourcesBuildPhase = createObject(id: target.name, PBXResourcesBuildPhase(fileReferences: resourcesBuildPhaseFiles)) buildPhases.append(resourcesBuildPhase.reference) } @@ -665,7 +655,7 @@ public class PBXProjGenerator { let script = createObject( id: "Swift.h" + target.name, PBXShellScriptBuildPhase( - files: [], + fileReferences: [], name: "Copy Swift Objective-C Interface Header", inputPaths: inputPaths, outputPaths: outputPaths, @@ -684,7 +674,7 @@ public class PBXProjGenerator { PBXCopyFilesBuildPhase( dstPath: copyFiles.subpath, dstSubfolderSpec: copyFiles.destination.destination, - files: buildPhaseFiles + fileReferences: buildPhaseFiles ) ) @@ -696,7 +686,7 @@ public class PBXProjGenerator { let frameworkBuildPhase = createObject( id: target.name, - PBXFrameworksBuildPhase(files: targetFrameworkBuildFiles) + PBXFrameworksBuildPhase(fileReferences: targetFrameworkBuildFiles) ) buildPhases.append(frameworkBuildPhase.reference) } @@ -709,7 +699,7 @@ public class PBXProjGenerator { dstPath: "", dstSubfolderSpec: .plugins, name: "Embed App Extensions", - files: extensions + fileReferences: extensions ) ) @@ -725,7 +715,7 @@ public class PBXProjGenerator { dstPath: "", dstSubfolderSpec: .frameworks, name: "Embed Frameworks", - files: copyFrameworksReferences + fileReferences: copyFrameworksReferences ) ) @@ -740,7 +730,7 @@ public class PBXProjGenerator { dstPath: "$(CONTENTS_FOLDER_PATH)/Watch", dstSubfolderSpec: .productsDirectory, name: "Embed Watch Content", - files: copyWatchReferences + fileReferences: copyWatchReferences ) ) @@ -757,7 +747,7 @@ public class PBXProjGenerator { let carthageScript = createObject( id: "Carthage" + target.name, PBXShellScriptBuildPhase( - files: [], + fileReferences: [], name: "Carthage", inputPaths: inputPaths, outputPaths: outputPaths, @@ -786,7 +776,7 @@ public class PBXProjGenerator { buildPhases += try target.postbuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) } - let configs: [ObjectReference] = project.configs.map { config in + let configs: [XCBuildConfiguration] = project.configs.map { config in var buildSettings = project.getTargetBuildSettings(target: target, config: config) // automatically set INFOPLIST_FILE path @@ -860,7 +850,7 @@ public class PBXProjGenerator { } } - var baseConfigurationReference: String? + var baseConfigurationReference: PBXObjectReference? if let configPath = target.configFiles[config.name] { baseConfigurationReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) } @@ -873,18 +863,18 @@ public class PBXProjGenerator { } let buildConfigList = createObject(id: target.name, XCConfigurationList( - buildConfigurations: configs.map { $0.reference }, + buildConfigurationsReferences: configs.map { $0.reference }, defaultConfigurationName: "" )) - let targetObject = targetObjects[target.name]!.object + let targetObject = targetObjects[target.name]! targetObject.name = target.name - targetObject.buildConfigurationList = buildConfigList.reference - targetObject.buildPhases = buildPhases - targetObject.dependencies = dependencies + targetObject.buildConfigurationListReference = buildConfigList.reference + targetObject.buildPhasesReferences = buildPhases + targetObject.dependenciesReferences = dependencies targetObject.productName = target.name - targetObject.buildRules = buildRules + targetObject.buildRulesReferences = buildRules targetObject.productReference = fileReference if !target.isLegacy { targetObject.productType = target.type @@ -927,7 +917,7 @@ public class PBXProjGenerator { if let target = projectTarget as? Target { for dependency in target.dependencies { // don't overwrite frameworks, to allow top level ones to rule - if frameworks.contains(reference: dependency.reference) { + if frameworks[dependency.reference] != nil { continue } @@ -971,7 +961,7 @@ public class PBXProjGenerator { for dependency in target.dependencies { // don't overwrite dependencies, to allow top level ones to rule - if dependencies.contains(reference: dependency.reference) { + if dependencies[dependency.reference] != nil { continue } diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index c1c70f58..9336a249 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -2,7 +2,7 @@ import Foundation import JSONUtilities import PathKit import ProjectSpec -import xcproj +import xcodeproj import Yams public class ProjectGenerator { diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index c5974e9f..348f6275 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -2,8 +2,9 @@ import Foundation import JSONUtilities import PathKit import ProjectSpec -import xcproj +import xcodeproj import Yams +import Basic extension Project { @@ -129,7 +130,7 @@ extension Project { if let settings = configFileSettings[configFilePath.string] { return settings } else { - guard let configFile = try? XCConfig(path: configFilePath) else { return nil } + guard let configFile = try? XCConfig(path: AbsolutePath(configFilePath.absolute().string)) else { return nil } let settings = configFile.flattenedBuildSettings() configFileSettings[configFilePath.string] = settings return settings diff --git a/Sources/XcodeGenKit/SettingsPresetFile.swift b/Sources/XcodeGenKit/SettingsPresetFile.swift index 4fa276b3..5122bc96 100644 --- a/Sources/XcodeGenKit/SettingsPresetFile.swift +++ b/Sources/XcodeGenKit/SettingsPresetFile.swift @@ -1,6 +1,6 @@ import Foundation import ProjectSpec -import xcproj +import xcodeproj public enum SettingsPresetFile { case config(ConfigType) diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index a56614e3..5c443249 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -1,24 +1,24 @@ import Foundation import PathKit import ProjectSpec -import xcproj +import xcodeproj struct SourceFile { let path: Path - let fileReference: String + let fileReference: PBXObjectReference let buildFile: PBXBuildFile let buildPhase: TargetSource.BuildPhase? } class SourceGenerator { - var rootGroups: Set = [] - private var fileReferencesByPath: [String: String] = [:] - private var groupsByPath: [Path: ObjectReference] = [:] - private var variantGroupsByPath: [Path: ObjectReference] = [:] + var rootGroups: Set = [] + private var fileReferencesByPath: [String: PBXObjectReference] = [:] + private var groupsByPath: [Path: PBXGroup] = [:] + private var variantGroupsByPath: [Path: PBXVariantGroup] = [:] private let project: Project - var addObjectClosure: (String, PBXObject) -> String + var addObjectClosure: (String, PBXObject) -> Void var targetSourceExcludePaths: Set = [] var defaultExcludedFiles = [ ".DS_Store", @@ -28,18 +28,19 @@ class SourceGenerator { private(set) var knownRegions: Set = [] - init(project: Project, addObjectClosure: @escaping (String, PBXObject) -> String) { + init(project: Project, addObjectClosure: @escaping (String, PBXObject) -> Void) { self.project = project self.addObjectClosure = addObjectClosure } - func addObject(id: String, _ object: PBXObject) -> String { - return addObjectClosure(id, object) + func createObject(id: String, _ object: T) -> T { + addObjectClosure(id, object) + return object } - func createObject(id: String, _ object: T) -> ObjectReference { - let reference = addObject(id: id, object) - return ObjectReference(reference: reference, object: object) + func addObject(id: String, _ object: T) -> T { + addObjectClosure(id, object) + return object } func getAllSourceFiles(targetType: PBXProductType, sources: [TargetSource]) throws -> [SourceFile] { @@ -90,7 +91,7 @@ class SourceGenerator { settings["COMPILER_FLAGS"] = targetSource.compilerFlags.joined(separator: " ") } - let buildFile = PBXBuildFile(fileRef: fileReference, settings: settings.isEmpty ? nil : settings) + let buildFile = PBXBuildFile(fileReference: fileReference, settings: settings.isEmpty ? nil : settings) return SourceFile( path: path, fileReference: fileReference, @@ -99,7 +100,7 @@ class SourceGenerator { ) } - func getContainedFileReference(path: Path) -> String { + func getContainedFileReference(path: Path) -> PBXObjectReference { let createIntermediateGroups = project.options.createIntermediateGroups let parentPath = path.parent() @@ -117,7 +118,7 @@ class SourceGenerator { return fileReference } - func getFileReference(path: Path, inPath: Path, name: String? = nil, sourceTree: PBXSourceTree = .group, lastKnownFileType: String? = nil) -> String { + func getFileReference(path: Path, inPath: Path, name: String? = nil, sourceTree: PBXSourceTree = .group, lastKnownFileType: String? = nil) -> PBXObjectReference { let fileReferenceKey = path.string.lowercased() if let fileReference = fileReferencesByPath[fileReferenceKey] { return fileReference @@ -127,7 +128,7 @@ class SourceGenerator { if fileReferencePath.string == fileReferenceName { fileReferenceName = nil } - let lastKnownFileType = lastKnownFileType ?? PBXFileReference.fileType(path: path) + let lastKnownFileType = lastKnownFileType ?? Xcode.fileType(path: path) if path.extension == "xcdatamodeld" { let versionedModels = (try? path.children()) ?? [] @@ -151,7 +152,7 @@ class SourceGenerator { // If no current version path is found we fall back to alphabetical // order by taking the last item in the sortedPaths array let currentVersionPath = findCurrentCoreDataModelVersionPath(using: versionedModels) ?? sortedPaths.last - let currentVersion: ObjectReference? = { + let currentVersion: PBXFileReference? = { guard let indexOf = sortedPaths.index(where: { $0 == currentVersionPath }) else { return nil } return modelFileReference[indexOf] }() @@ -160,10 +161,10 @@ class SourceGenerator { path: fileReferencePath.string, sourceTree: sourceTree, versionGroupType: "wrapper.xcdatamodel", - children: modelFileReference.map { $0.reference } + childrenReferences: modelFileReference.map { $0.reference } )) - fileReferencesByPath[fileReferenceKey] = versionGroup - return versionGroup + fileReferencesByPath[fileReferenceKey] = versionGroup.reference + return versionGroup.reference } else { // For all extensions other than `xcdatamodeld` let fileReference = createObject( @@ -207,12 +208,12 @@ class SourceGenerator { /// Create a group or return an existing one at the path. /// Any merged children are added to a new group or merged into an existing one. - private func getGroup(path: Path, name: String? = nil, mergingChildren children: [String], createIntermediateGroups: Bool, isBaseGroup: Bool) -> ObjectReference { - let groupReference: ObjectReference + private func getGroup(path: Path, name: String? = nil, mergingChildren children: [PBXObjectReference], createIntermediateGroups: Bool, isBaseGroup: Bool) -> PBXGroup { + let groupReference: PBXGroup if let cachedGroup = groupsByPath[path] { // only add the children that aren't already in the cachedGroup - cachedGroup.object.children = Array(Set(cachedGroup.object.children + children)) + cachedGroup.childrenReferences = Array(Set(cachedGroup.childrenReferences + children)) groupReference = cachedGroup } else { @@ -230,7 +231,7 @@ class SourceGenerator { path.byRemovingBase(path: project.basePath).string : path.lastComponent let group = PBXGroup( - children: children, + childrenReferences: children, sourceTree: .group, name: groupName != groupPath ? groupName : nil, path: groupPath @@ -246,13 +247,12 @@ class SourceGenerator { } /// Creates a variant group or returns an existing one at the path - private func getVariantGroup(path: Path, inPath: Path) -> ObjectReference { - let variantGroup: ObjectReference + private func getVariantGroup(path: Path, inPath: Path) -> PBXVariantGroup { + let variantGroup: PBXVariantGroup if let cachedGroup = variantGroupsByPath[path] { variantGroup = cachedGroup } else { let group = PBXVariantGroup( - children: [], sourceTree: .group, name: path.lastComponent ) @@ -305,7 +305,7 @@ class SourceGenerator { /// creates all the source files and groups they belong to for a given targetSource private func getGroupSources(targetType: PBXProductType, targetSource: TargetSource, path: Path, isBaseGroup: Bool) - throws -> (sourceFiles: [SourceFile], groups: [ObjectReference]) { + throws -> (sourceFiles: [SourceFile], groups: [PBXGroup]) { let children = try getSourceChildren(targetSource: targetSource, dirPath: path) @@ -321,11 +321,11 @@ class SourceGenerator { .filter { $0.extension == "lproj" } .sorted { $0.lastComponent < $1.lastComponent } - var groupChildren: [String] = filePaths.map { getFileReference(path: $0, inPath: path) } + var groupChildren: [PBXObjectReference] = filePaths.map { getFileReference(path: $0, inPath: path) } var allSourceFiles: [SourceFile] = filePaths.map { generateSourceFile(targetType: targetType, targetSource: targetSource, path: $0) } - var groups: [ObjectReference] = [] + var groups: [PBXGroup] = [] for path in directories { let subGroups = try getGroupSources(targetType: targetType, targetSource: targetSource, path: path, isBaseGroup: false) @@ -364,12 +364,12 @@ class SourceGenerator { .sorted() { let variantGroup = getVariantGroup(path: filePath, inPath: path) groupChildren.append(variantGroup.reference) - baseLocalisationVariantGroups.append(variantGroup.object) + baseLocalisationVariantGroups.append(variantGroup) let sourceFile = SourceFile( path: filePath, fileReference: variantGroup.reference, - buildFile: PBXBuildFile(fileRef: variantGroup.reference), + buildFile: PBXBuildFile(fileReference: variantGroup.reference), buildPhase: .resources ) allSourceFiles.append(sourceFile) @@ -399,15 +399,15 @@ class SourceGenerator { ) if let variantGroup = variantGroup { - if !variantGroup.children.contains(fileReference) { - variantGroup.children.append(fileReference) + if !variantGroup.childrenReferences.contains(fileReference) { + variantGroup.childrenReferences.append(fileReference) } } else { // add SourceFile to group if there is no Base.lproj directory let sourceFile = SourceFile( path: filePath, fileReference: fileReference, - buildFile: PBXBuildFile(fileRef: fileReference), + buildFile: PBXBuildFile(fileReference: fileReference), buildPhase: .resources ) allSourceFiles.append(sourceFile) @@ -440,7 +440,7 @@ class SourceGenerator { let createIntermediateGroups = project.options.createIntermediateGroups var sourceFiles: [SourceFile] = [] - let sourceReference: String + let sourceReference: PBXObjectReference var sourcePath = path switch type { case .folder: @@ -489,7 +489,7 @@ class SourceGenerator { let (groupSourceFiles, groups) = try getGroupSources(targetType: targetType, targetSource: targetSource, path: path, isBaseGroup: true) let group = groups.first! if let name = targetSource.name { - group.object.name = name + group.name = name } sourceFiles += groupSourceFiles @@ -504,7 +504,7 @@ class SourceGenerator { } // Add groups for all parents recursively - private func createIntermediaGroups(for groupReference: String, at path: Path) { + private func createIntermediaGroups(for groupReference: PBXObjectReference, at path: Path) { let parentPath = path.parent() guard parentPath != project.basePath && path.string.contains(project.basePath.string) else { diff --git a/Sources/XcodeGenKit/XCProjExtensions.swift b/Sources/XcodeGenKit/XCProjExtensions.swift index edf9fe5e..539ded37 100644 --- a/Sources/XcodeGenKit/XCProjExtensions.swift +++ b/Sources/XcodeGenKit/XCProjExtensions.swift @@ -1,5 +1,6 @@ import Foundation -import xcproj +import xcodeproj +import PathKit extension PBXFileElement { @@ -12,7 +13,7 @@ extension PBXProj { public func printGroups() -> String { guard let project = objects.projects.first?.value, - let mainGroup = objects.groups.getReference(project.mainGroup) else { + let mainGroup = objects.groups.getReference(project.mainGroupReference) else { return "" } return printGroup(group: mainGroup) @@ -20,7 +21,7 @@ extension PBXProj { public func printGroup(group: PBXGroup) -> String { var string = group.nameOrPath - for reference in group.children { + for reference in group.childrenReferences { if let group = objects.groups.getReference(reference) { string += "\n 📁 " + printGroup(group: group).replacingOccurrences(of: "\n ", with: "\n ") } else if let fileReference = objects.fileReferences.getReference(reference) { @@ -34,3 +35,34 @@ extension PBXProj { return string } } + +extension PBXObjects { + + public func getFileElement(reference: PBXObjectReference) -> PBXFileElement? { + return groups[reference] ?? + fileReferences[reference] ?? + versionGroups[reference] ?? + variantGroups[reference] + } +} + +extension Dictionary { + + public var valueArray: Array { + return Array(values) + } +} + +extension Dictionary where Key == PBXObjectReference { + + public func getReference(_ reference: PBXObjectReference) -> Value? { + return self[reference] + } +} + +extension Xcode { + + public static func fileType(path: Path) -> String? { + return path.extension.flatMap { Xcode.filetype(extension: $0) } + } +} diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index badfd0f1..1a7e1f9f 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXAggregateTarget section */ - AT_445731917037 /* SuperTarget */ = { + AB59C0690172FF119F045336C1F1CA0D /* SuperTarget */ = { isa = PBXAggregateTarget; - buildConfigurationList = CL_445731917037 /* Build configuration list for PBXAggregateTarget "SuperTarget" */; + buildConfigurationList = DF19D3419A77EDFF6F8498EFC3E36048 /* Build configuration list for PBXAggregateTarget "SuperTarget" */; buildPhases = ( - SSBP_8280041834 /* MyScript */, + 69E4B11A07FF06F8306B5646CA2403EF /* MyScript */, ); dependencies = ( - TD_208010900457 /* PBXTargetDependency */, - TD_747418473860 /* PBXTargetDependency */, + 3E978D446B3957A557629CD1DF47004B /* PBXTargetDependency */, + 3FFD524CC10F62CA07750D1026106CB3 /* PBXTargetDependency */, ); name = SuperTarget; productName = SuperTarget; @@ -23,829 +23,826 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - BF_138356261076 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_363921640403 /* InterfaceController.swift */; }; - BF_139519317795 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_452853029807 /* Alamofire.framework */; }; - BF_167705969896 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_145531354566 /* TestProjectUITests.swift */; }; - BF_182635022050 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_830053537293 /* Assets.xcassets */; }; - BF_184447863946 = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; }; - BF_186245454304 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_118219888726 /* LocalizedStoryboard.storyboard */; }; - BF_190684453680 = {isa = PBXBuildFile; fileRef = FR_376569054786 /* XPC Service.xpc */; }; - BF_206432481076 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_340586388409 /* ExtensionDelegate.swift */; }; - BF_211435872001 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG_473000061463 /* Localizable.strings */; }; - BF_212221512596 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_470929579339 /* StaticLibrary.swift */; }; - BF_215463341392 /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; }; - BF_217053936758 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; }; - BF_225293845818 = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; }; - BF_237760701422 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_987043315473 /* Assets.xcassets */; }; - BF_239684316986 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_243071719122 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; - BF_259448131292 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_268392110450 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_587738154368 /* Assets.xcassets */; }; - BF_279581961655 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_868653349092 /* Assets.xcassets */; }; - BF_280535243540 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_609193904586 /* Main.storyboard */; }; - BF_284620660317 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FR_238161558082 /* MyBundle.bundle */; }; - BF_292474606791 = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; }; - BF_303822704662 = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; }; - BF_304637845091 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_151462316179 /* main.m */; }; - BF_308631758818 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_376569054786 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_314868376788 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = VG_746876637628 /* Localizable.stringsdict */; }; - BF_324363145049 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; }; - BF_331192862207 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_481575785861 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - BF_334321520545 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_377082606829 /* Assets.xcassets */; }; - BF_334778067417 = {isa = PBXBuildFile; fileRef = FR_783122899910 /* App_iOS_Tests.xctest */; }; - BF_337656089700 = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; - BF_360196406184 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_722239415598 /* TestProjectTests.swift */; }; - BF_415651546539 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; }; - BF_425679397292 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_441538117869 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - BF_456457948943 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; - BF_458111705914 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; }; - BF_461044234706 /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_496472559782 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_501771188469 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_503484983186 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_196911129660 /* MoreUnder.swift */; }; - BF_510053944904 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_518775144316 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_229826849033 /* SomeXPCService.xpc */; }; - BF_526105569599 = {isa = PBXBuildFile; fileRef = FR_437179166843 /* StaticLibrary_Swift.a */; }; - BF_535236390262 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; }; - BF_538515166673 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_256263906698 /* LaunchScreen.storyboard */; }; - BF_552913093094 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_561304997165 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; - BF_563614389392 = {isa = PBXBuildFile; fileRef = FR_618687462494 /* iMessageExtension.appex */; }; - BF_597639300414 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; }; - BF_607543323797 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; - BF_612351978356 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_264279911176 /* Interface.storyboard */; }; - BF_624802436672 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; - BF_632297340262 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; - BF_647038614509 /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - BF_650026899468 = {isa = PBXBuildFile; fileRef = FR_602719163962 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_670499288392 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = VG_229021855709 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - BF_681504666330 = {isa = PBXBuildFile; fileRef = FR_825232110500 /* App_iOS.app */; }; - BF_703054643820 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_310979699934 /* MessagesViewController.swift */; }; - BF_704149935229 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; - BF_721498080533 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = FR_257073931060 /* ResourceFolder */; }; - BF_725992639588 = {isa = PBXBuildFile; fileRef = FR_480982116789 /* App_macOS.app */; }; - BF_732745079658 = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; }; - BF_734036107922 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_742449020987 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; }; - BF_747443236192 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - BF_752022362638 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; - BF_757906110813 = {isa = PBXBuildFile; fileRef = FR_662315837182 /* Framework.framework */; }; - BF_770495922915 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; - BF_803757127643 = {isa = PBXBuildFile; fileRef = FR_739513596122 /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_807556340853 /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_837374194182 /* Empty.h */; }; - BF_813358525536 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_828878846239 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_201160695646 /* MainInterface.storyboard */; }; - BF_830383951771 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_304712043717 /* NotificationController.swift */; }; - BF_854463933379 = {isa = PBXBuildFile; fileRef = FR_438704538506 /* Framework.framework */; }; - BF_854691035877 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; }; - BF_855988705556 /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_602719163945 /* XPC_Service.m */; }; - BF_860391087135 /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_408537768279 /* StandaloneAssets.xcassets */; }; - BF_863842036151 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_870702193513 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_618687462494 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - BF_892119987440 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_854336462818 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - BF_897881229855 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_898051828670 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; }; - BF_901390118565 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; - BF_905038616071 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_905617636654 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_940936137577 = {isa = PBXBuildFile; fileRef = FR_123503999387 /* App_iOS_UITests.xctest */; }; - BF_943177036061 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; + 01E1BB1F24B4A80B8FC21EC54DDAFCFB /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */; }; + 0A774DBC62F3C7721971E0C95BB2564A /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */; }; + 11620E0E3097992FFB14B60ADB580C14 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12BB537967032E2ECE176F4F6BD7FEF1 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */; }; + 1392EC1CE7BD042F68C39A2AAB6AFBF0 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */; }; + 142F53A6CDA1596543042CFD876E1B17 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; }; + 1469E5437CDCEAB8B753538C36C6EC91 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */; }; + 155B03B91592C42BB787EB5FB9FA4625 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 166B4DE0C553AC808EA56CB57358CD95 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C71345D3886B5E2221F4441BD871D5 /* Alamofire.framework */; }; + 1D1EBBAD810AB8280C138C76BE8AF7B5 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 277BE1159CD7855C287566F29F8939BA /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */; }; + 27D1C1B8C60FD46B541C840BFBA7DD44 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 2A8A171902ADC287F600AAB4C3020AA3 /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */; }; + 2B3F156D5B5BB22B1A6955B8B43F417F /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6237064EDBE405135BC1CE7DE20A131C /* Alamofire.framework */; }; + 2CCCB0657766F9F9527F77A9F42AAF9E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9835A83F1E5D8E22848E171BA3C2DBA6 /* LaunchScreen.storyboard */; }; + 2F3C2D29AD1524C2DAA8601042880BF1 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */; }; + 304090AFAC1ED0D09C95B0CB2BEFEB9E /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */; }; + 3243ACA306AD909C8186921F288640DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E005A2734C32783354AAB8546A12718B /* Localizable.strings */; }; + 334AA8E27C083421E9B411D7CD5D3458 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 34D18588625C4E99A9A1265B3B918A50 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 370B3DF5D5741094E48BE3C0E00B68E7 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C358B60A4C6D98BF3CD9B2C0C75FFC31 /* Interface.storyboard */; }; + 3D49538E97F4592012896021971B0166 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49A30AD670910672DABA8B736EECBAEB /* LocalizedStoryboard.storyboard */; }; + 3E8A30F173DFFDBDDD0EBDA2D21A0D77 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 523DB06F1851416DDCF4B7616911B6CB /* Assets.xcassets */; }; + 3F6CF73FD22CC393D7A5EA3B0C66C24C /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; }; + 44B62E9C097529F3D5C7A44A5F777A61 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + 45FE59E8EE4FE189573959804F6F6076 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 486E2AABDE448C496C0FCC393A35E669 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49C46F18756F4E9EE9E1CC328F79A2AD /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01801EB5629DB3812650E5E47F3362C8 /* NotificationController.swift */; }; + 4A99C1479D453718EDAFA771656D6958 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6237064EDBE405135BC1CE7DE20A131C /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5163749E505B01D5ACB99C653525D046 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0C43CE340B78E88FE95F7E8DF5EC35D2 /* Assets.xcassets */; }; + 51FCB6F2D56B68E627A35C53729E423A /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = 508B113F244D2D7F7731ED871B2F16DA /* XPC_Service.m */; }; + 55E7240008DD5452802A41DA6FC7A16F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68FD4BD70DF5429E43E14A65FDF9D81 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + 59A1A5DC48B33CCB164751AF5F9B4EF6 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6237064EDBE405135BC1CE7DE20A131C /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5A6137039176A4E48CF6B399372D56EA /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 6013ED0F37BB222A6B44D0CB89CE69AE /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60677C8B465E055458D1DF51F0EC0A90 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */; }; + 631A7BEDCB97C03DC5E6AED97FDF408E /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5FCB8A69D323BC3CA127642FCFD887A6 /* Empty.h */; }; + 68642C69AC9333487FC491E6FA98261E /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0248345678C3EEA7143459B634AB4F99 /* TestProjectTests.swift */; }; + 702E56BFA3B2A830E24D74FCA3A33D55 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + 718D11FA2B62EFF8783CF9693CEFC64F /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */; }; + 766C78D100B581A2A469B47A02A0E6D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10D051136D86691641578C2EB7616D4B /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + 7AE6DE3A93E56909084D4F93795B3C93 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8EAFD105FB449C592C944D3003203AB5 /* Main.storyboard */; }; + 7AF2CCC3F2ECDC1FE82B2C05BEF75B71 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AC31952D4BF4BB8CC21459D75DCB7DC9 /* main.m */; }; + 7C2B87BE6AEC5813069E896736FA68A3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 80294B8FAECA0DC3B83DC6D2FC6FBE59 /* Assets.xcassets */; }; + 809CDDAA142679CDCFCF376C9CA71C09 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C67AA6BA96CF5A5E2A3FBED848E6C3D4 /* MyBundle.bundle */; }; + 8CF2462D2181DDDA1A8E8A1F176F9A47 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 959956C14A10B778A0CF1618CA4BC63C /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6237064EDBE405135BC1CE7DE20A131C /* Alamofire.framework */; }; + 9F2CA54E38CDF41C367FAC8E304AF4C5 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81F7E21FBB8DA98ECF0A51099CDAF2EE /* MainInterface.storyboard */; }; + A37247C6EE3138C4083810BA1BA6C7FD /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A4E000AF88BD17B9A2B08452C17C2EEF /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B653BE433FA2C7F27E0DD742C56972 /* StaticLibrary.swift */; }; + A6CCC432869EB6B8A65A89B565B57EA5 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */; }; + AA5AF277386012CD6CC015073239E50F /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */; }; + AD00993C2491D03BD3A1B6E48D685C29 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */; }; + AUTO_5VZIHqJ600tEPf73suYa = {isa = PBXBuildFile; fileRef = 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */; }; + AUTO_7MKZu584cIQuU5pdvEAL = {isa = PBXBuildFile; fileRef = EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */; }; + AUTO_9aaVkTyiyQWj9chRFSXC = {isa = PBXBuildFile; fileRef = C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */; }; + AUTO_CX9m7izxITPbe6k7gIMS = {isa = PBXBuildFile; fileRef = D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */; }; + AUTO_FHqmKTu8R9eQcDSHtBl2 = {isa = PBXBuildFile; fileRef = 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AUTO_FI4P0L7mD3dfGGVPVNvx = {isa = PBXBuildFile; fileRef = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; }; + AUTO_GN80IEuWvCvUcPwoAVnt = {isa = PBXBuildFile; fileRef = DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */; }; + AUTO_LFQ2NgxpvrhYJSYshySZ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; + AUTO_Ni16m8Y84i5PMkMaGKaR = {isa = PBXBuildFile; fileRef = 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */; }; + AUTO_OkqadiIPIeuHfZsWVaT8 = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; + AUTO_cBeRILf3hWlctfWZW9JQ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; + AUTO_eO1L3NPJcUbCdbs0LA8S = {isa = PBXBuildFile; fileRef = F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AUTO_elwIMiarYGjkKHoLYkNz = {isa = PBXBuildFile; fileRef = 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */; }; + AUTO_iHu2o18WOxDYzCUar5IX = {isa = PBXBuildFile; fileRef = AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */; }; + AUTO_m5qNHcIsAuTywjDdFCMx = {isa = PBXBuildFile; fileRef = 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */; }; + AUTO_sv3hFquUhPl9qfllDvyL = {isa = PBXBuildFile; fileRef = CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */; }; + AUTO_vusM5sNOIMe1bxFDS6ZY = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; + BD4C8B77EF89CF7F4ED0D1C4713397E4 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; + BD8FA9115EB29C8438DE82A4C33C249A /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BE38983978B6D70795D2924F52F3081D /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */; }; + C4F880A62908F7CD24C87CE5D67B0196 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; + C5DD61FED061701F52A2AE59334C3964 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EF485495979F5EF324B541071E00D33B /* Assets.xcassets */; }; + D8E194DE99C1389B4335B7112DEA7DC4 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71DECBD66A150B303E116D2F05C0B4E /* ExtensionDelegate.swift */; }; + D9338C1374B8F82194B44B6F73075123 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 083D78A107BD9A58D0F5B30EA9A65E2C /* Assets.xcassets */; }; + DB95C341F44FE1E093C948F4F734515B /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 466B302E661DE3B3972203B31F4AFED4 /* Localizable.stringsdict */; }; + DDEAB9F0EBC3BBC4D641C06A86BFD425 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */; }; + E249D28B974B22ED41B7BAE7A1CC7468 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + E831CFC1214156450B81B78792D4A0C1 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */; }; + EBC3AA70BAD516864D119DDEEE2C436D /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; + F16AD8A4E1A6E1189CE048C03CEA9469 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; + F25CA48D38ED8577DF81395CFBFF0FA5 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; + F7E9F427669FE7710D0A19AA4E1156F4 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BE8C8DF245700F7E0EF36D9F2B8C0E3 /* TestProjectUITests.swift */; }; + FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; + FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - CIP_10972496596 /* PBXContainerItemProxy */ = { + 09709070DE34AF9CD99E9E5EB9990FEA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_472296042419; - remoteInfo = Framework_iOS; - }; - CIP_19329118292 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_507023492251; - remoteInfo = "App_watchOS Extension"; - }; - CIP_20801090045 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_825232110500; + remoteGlobalIDString = DB85CB6A2C15660854D634EF1B0C1FAD; remoteInfo = App_iOS; }; - CIP_23558050412 /* PBXContainerItemProxy */ = { + 0BF678D2C5D11E654050E6FD6AF1321C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_525119120469; - remoteInfo = Framework_macOS; - }; - CIP_28856087625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_935153865209; + remoteGlobalIDString = 24B389B0959F4A6CB05BB732DABDFE40; remoteInfo = iMessageApp; }; - CIP_31792113134 /* PBXContainerItemProxy */ = { + 29DD3982DDC8FB1816F3413908D59361 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_618687462494; - remoteInfo = iMessageExtension; - }; - CIP_33710394010 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; - CIP_62903878492 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; - CIP_66745555235 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; - CIP_67619158112 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_825232110500; - remoteInfo = App_iOS; - }; - CIP_72152212817 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; - CIP_74378499241 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_376569054786; - remoteInfo = "XPC Service"; - }; - CIP_74741847386 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_472296042419; + remoteGlobalIDString = FE8D0077B0ADF688264AFA16A3FC213E; remoteInfo = Framework_iOS; }; - CIP_78441234790 /* PBXContainerItemProxy */ = { + 322420B31CCE201E90F298BE48129574 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_399755008402; + remoteGlobalIDString = 6805881B1B6A80ABD523DAF4AFA493E2; + remoteInfo = Framework_macOS; + }; + 454E9650A00080FE30274224CC9F46C0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CBCC05D0B8E90F960AA198981827667B; + remoteInfo = "App_watchOS Extension"; + }; + 5A941DAF3EECD0D974E9330E048ABAF1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C21579FB597F51FACE99F831124CEB70; remoteInfo = StaticLibrary_ObjC; }; - CIP_82410178775 /* PBXContainerItemProxy */ = { + 61EAE260C32C57D1ADCEAA01E33B62F0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_324671077936; + remoteGlobalIDString = 9F21B9C99E75314E51854589C0A2D40C; remoteInfo = App_watchOS; }; - CIP_88714386547 /* PBXContainerItemProxy */ = { + 707E4E6909BBD1E09760167B4CFEC227 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_825232110500; + remoteGlobalIDString = C21579FB597F51FACE99F831124CEB70; + remoteInfo = StaticLibrary_ObjC; + }; + 91B2DBDD3AE5AF1D532D18340182CF27 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C21579FB597F51FACE99F831124CEB70; + remoteInfo = StaticLibrary_ObjC; + }; + 931421A32656354E62549752A08EDBF8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB85CB6A2C15660854D634EF1B0C1FAD; remoteInfo = App_iOS; }; - CIP_95747640947 /* PBXContainerItemProxy */ = { + 9B58798122BFEA3C65A8FF0A3351860D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_399755008402; + remoteGlobalIDString = F61DEA90F1B7331EE9B26BBA1F66D1F3; + remoteInfo = "XPC Service"; + }; + C3EE26A1AAD19418C160843CDB61D97D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C21579FB597F51FACE99F831124CEB70; + remoteInfo = StaticLibrary_ObjC; + }; + CC516AFC796533BF02DD6B96F8DD7E74 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB85CB6A2C15660854D634EF1B0C1FAD; + remoteInfo = App_iOS; + }; + DE00464172E7A41CC51991B9136AA5BD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8A0FE14A3A3815C1F26B447C6178089C; + remoteInfo = iMessageExtension; + }; + E09571F16E5252817F36D382C4132D85 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C21579FB597F51FACE99F831124CEB70; + remoteInfo = StaticLibrary_ObjC; + }; + EEB2D30EB7369BDB638EBEEF136463C2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FE8D0077B0ADF688264AFA16A3FC213E; + remoteInfo = Framework_iOS; + }; + FF9930E567A8C8A64F553637C661978F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C21579FB597F51FACE99F831124CEB70; remoteInfo = StaticLibrary_ObjC; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - CFBP_2836118931 /* Embed Watch Content */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; - dstSubfolderSpec = 16; - files = ( - BF_747443236192 /* App_watchOS.app in Embed Watch Content */, - ); - name = "Embed Watch Content"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_3265670993 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - BF_607543323797 /* StaticLibrary_ObjC.h in CopyFiles */, - BF_752022362638 /* module.modulemap in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_4082141876 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - BF_863842036151 /* Alamofire.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_4626438721 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - BF_501771188469 /* Alamofire.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_4684049960 /* Embed App Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - BF_441538117869 /* App_watchOS Extension.appex in Embed App Extensions */, - ); - name = "Embed App Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_4930089528 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - BF_552913093094 /* Framework.framework in Embed Frameworks */, - BF_897881229855 /* Alamofire.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_5460766702 /* Embed App Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - BF_870702193513 /* iMessageExtension.appex in Embed App Extensions */, - ); - name = "Embed App Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_6493932244 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - BF_905038616071 /* Framework.framework in Embed Frameworks */, - BF_461044234706 /* SomeFramework.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_7191905390 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - BF_807556340853 /* Empty.h in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CFBP_8368933518 /* CopyFiles */ = { + 0B85189BAB2D1568EECF81226FF3FF97 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; dstSubfolderSpec = 16; files = ( - BF_308631758818 /* XPC Service.xpc in CopyFiles */, - BF_518775144316 /* SomeXPCService.xpc in CopyFiles */, + A37247C6EE3138C4083810BA1BA6C7FD /* XPC Service.xpc in CopyFiles */, + 1392EC1CE7BD042F68C39A2AAB6AFBF0 /* SomeXPCService.xpc in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1130301AAAB06CA6AE2DBC09B9F82B74 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 1D1EBBAD810AB8280C138C76BE8AF7B5 /* Framework.framework in Embed Frameworks */, + BD8FA9115EB29C8438DE82A4C33C249A /* SomeFramework.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 31035708668339C7624CD18BC4971F27 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 4A99C1479D453718EDAFA771656D6958 /* Alamofire.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 64735A35127234188A50A9CC433F3D43 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 45FE59E8EE4FE189573959804F6F6076 /* App_watchOS Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 800C402270322E33CF2C5DBBAE32DD06 /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + 155B03B91592C42BB787EB5FB9FA4625 /* App_watchOS.app in Embed Watch Content */, + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; + 8748CD344E8DDE93B221AA670D93DA94 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + DDEAB9F0EBC3BBC4D641C06A86BFD425 /* StaticLibrary_ObjC.h in CopyFiles */, + E831CFC1214156450B81B78792D4A0C1 /* module.modulemap in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8C62857F0DCEBB22C299F26FCCE769F9 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 34D18588625C4E99A9A1265B3B918A50 /* iMessageExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 916C69163E65CD06E8BD0CCC8D8227C2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 59A1A5DC48B33CCB164751AF5F9B4EF6 /* Alamofire.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + DBC722FD0EE319959445B8F14D3EE091 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 334AA8E27C083421E9B411D7CD5D3458 /* Framework.framework in Embed Frameworks */, + 27D1C1B8C60FD46B541C840BFBA7DD44 /* Alamofire.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + FE39362C1CB6263D81609FF7975359EE /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 631A7BEDCB97C03DC5E6AED97FDF408E /* Empty.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - FR_118219888726 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; - FR_123503999387 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_145531354566 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; - FR_151462316179 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - FR_172952167809 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; - FR_183521624014 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; }; - FR_196911129660 /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; }; - FR_201160695646 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; - FR_229826849033 /* SomeXPCService.xpc */ = {isa = PBXFileReference; path = SomeXPCService.xpc; sourceTree = ""; }; - FR_232605427418 /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; }; - FR_238161558082 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; }; - FR_247808626608 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_256263906698 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - FR_257073931060 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; - FR_257516580010 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; - FR_263408310401 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; - FR_264279911176 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; - FR_293137352077 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_304712043717 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; }; - FR_310979699934 /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; - FR_324671077936 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_340586388409 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; - FR_363921640403 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; - FR_376569054786 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_377082606829 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FR_399755008402 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_408537768279 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; }; - FR_410645050443 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; - FR_437179166843 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_438704538506 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_452853029807 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; - FR_461737784133 /* module.modulemap */ = {isa = PBXFileReference; path = module.modulemap; sourceTree = ""; }; - FR_470929579339 /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; }; - FR_472296042419 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_473000061463 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - FR_479281060337 /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; }; - FR_480982116789 /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_481575785861 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - FR_500792082643 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; }; - FR_505327409380 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_507023492251 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_525119120469 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_530852296303 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_570918052822 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; - FR_587738154368 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FR_602633703434 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; - FR_602719163945 /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; }; - FR_602719163962 /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = ""; }; - FR_609193904586 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - FR_618687462494 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_635802719871 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; }; - FR_643034527839 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_654302359039 /* SomeFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SomeFramework.framework; path = Vendor/SomeFramework.framework; sourceTree = ""; }; - FR_655678458041 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_660690926982 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; - FR_662315837182 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_665156855283 /* module.modulemap */ = {isa = PBXFileReference; path = module.modulemap; sourceTree = ""; }; - FR_675266829517 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; - FR_698230898030 /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; - "FR_698230898030-1" /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; }; - FR_722239415598 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; }; - FR_725187762757 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_739513596122 /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; - FR_746876637628 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; }; - FR_748548478992 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; }; - FR_752394658615 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; - FR_771029596306 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - FR_775316160345 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; }; - FR_783122899910 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_796781152159 /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; }; - FR_803921963291 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_815403394914 /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; }; - FR_825232110500 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_830053537293 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FR_837374194182 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; - FR_854336462818 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - FR_868653349092 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FR_935153865209 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_948931241088 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_987043315473 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 01801EB5629DB3812650E5E47F3362C8 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; }; + 0248345678C3EEA7143459B634AB4F99 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; }; + 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; }; + 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SomeFramework.framework; path = Vendor/SomeFramework.framework; sourceTree = ""; }; + 083D78A107BD9A58D0F5B30EA9A65E2C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0BE8C8DF245700F7E0EF36D9F2B8C0E3 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; + 0BFEFFB973F5EEEF285D98AB90CFC9B0 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; }; + 0C43CE340B78E88FE95F7E8DF5EC35D2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; + 10D051136D86691641578C2EB7616D4B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 11DBDC38AD04D9F24454201311335431 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; }; + 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; }; + 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; + 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; }; + 247D8122E426D1FC239D36918CE3C0C5 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; }; + 25F603F3FBBAB0B8947331C9190A6282 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 2923CD786EB965107819EFF08193E672 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2E871C49A75D636E1E87F8904C5BA3D9 /* en */ = {isa = PBXFileReference; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; + 31F27C0F2868434258A846C4ADE4B35A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 354650483D8F76CB15A0FB0A99D2657F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 3F8D809984627520BE1811A1AC9B1AD9 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; + 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; + 508B113F244D2D7F7731ED871B2F16DA /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; }; + 523DB06F1851416DDCF4B7616911B6CB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; + 5FA5EA11F66D659044AB1FB5496EBF25 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 5FCB8A69D323BC3CA127642FCFD887A6 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; + 6237064EDBE405135BC1CE7DE20A131C /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; + 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; + 6B9588F9AA980468B26837ADE36D0D2E /* Base */ = {isa = PBXFileReference; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; }; + 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */ = {isa = PBXFileReference; path = SomeXPCService.xpc; sourceTree = ""; }; + 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 72AE3D8A409EF0F4D17EA0BD0EC3BFFA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 75B653BE433FA2C7F27E0DD742C56972 /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; }; + 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = ""; }; + 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; + 7AF3ACEAC55D3B6352EED8415D5B2951 /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; }; + 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; }; + 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; + 80294B8FAECA0DC3B83DC6D2FC6FBE59 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; + 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; + 88CE11E8D928D43BCC70F12A5576D511 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8AFEF032B9B258B97EFBD5B5AA741E8C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A444869BCBB55167EF043EEFFD075A78 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A59DAE760F32225493BDC5D378468EA9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; + AC31952D4BF4BB8CC21459D75DCB7DC9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AFDDC1A69B4B2637D36C39EE01DF23C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B71DECBD66A150B303E116D2F05C0B4E /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; + B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; }; + BD07DCE20104773C42E7617A09A55BD5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C64021D20FD55B89CE1AFE88AE7C1CDD /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; + C67AA6BA96CF5A5E2A3FBED848E6C3D4 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; }; + C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + C8822458902508063262BA655921BA2F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D68FD4BD70DF5429E43E14A65FDF9D81 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + D99F14029800E2D9F2434C4B6D718A5E /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; + DB194C9EF763551CE2D5131407E8CF1C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; }; + DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; + E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC5C7923578F1110EE9EE74505530753 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + EF485495979F5EF324B541071E00D33B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + F04030C0892CAC78F4B4376F938018E3 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; + F435E28C9379AF718A5D502BF3B2FB26 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + F56A7C74F4A75492F063A0A5BDBBF65C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; + F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; + F9C71345D3886B5E2221F4441BD871D5 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; + FBF4C9FD09B493401414CA2F3086041F /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; }; + FFA022D59DE3CD80EDCC5CCEC6DB29C7 /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - FBP_32467107793 /* Frameworks */ = { + 1D124A23C4D38CE6B023194E85A64BBA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_415651546539 /* Alamofire.framework in Frameworks */, + 01E1BB1F24B4A80B8FC21EC54DDAFCFB /* Alamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_43870453850 /* Frameworks */ = { + 266AF93F95F8ECC5F62E443DD79D4263 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_898051828670 /* Alamofire.framework in Frameworks */, + 12BB537967032E2ECE176F4F6BD7FEF1 /* Alamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_47229604241 /* Frameworks */ = { + 3730EBC6001089E597081CA9CF12AF52 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_742449020987 /* Alamofire.framework in Frameworks */, + 2B3F156D5B5BB22B1A6955B8B43F417F /* Alamofire.framework in Frameworks */, + F25CA48D38ED8577DF81395CFBFF0FA5 /* Framework.framework in Frameworks */, + 142F53A6CDA1596543042CFD876E1B17 /* StaticLibrary_ObjC.a in Frameworks */, + 2A8A171902ADC287F600AAB4C3020AA3 /* SomeFramework.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_48098211678 /* Frameworks */ = { + 6F3C985C6701880E8731C4AAFBDC9FEF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_535236390262 /* Alamofire.framework in Frameworks */, - BF_597639300414 /* Framework.framework in Frameworks */, - BF_770495922915 /* StaticLibrary_ObjC.a in Frameworks */, + 959956C14A10B778A0CF1618CA4BC63C /* Alamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_50702349225 /* Frameworks */ = { + 78E2554EF343D4CF421577E8651E5480 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_217053936758 /* Alamofire.framework in Frameworks */, + 60677C8B465E055458D1DF51F0EC0A90 /* Alamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_52511912046 /* Frameworks */ = { + C79A51DBA8AF7631AEF22BA83E104A04 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_854691035877 /* Alamofire.framework in Frameworks */, + 166B4DE0C553AC808EA56CB57358CD95 /* Alamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_66231583718 /* Frameworks */ = { + C8CA7D5902F866D50BF6F9A24BF1D10A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_139519317795 /* Alamofire.framework in Frameworks */, + 2F3C2D29AD1524C2DAA8601042880BF1 /* Alamofire.framework in Frameworks */, + FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */, + 3F6CF73FD22CC393D7A5EA3B0C66C24C /* StaticLibrary_ObjC.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_82523211050 /* Frameworks */ = { + F6C2490C6497837A21966090C77C3602 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_458111705914 /* Alamofire.framework in Frameworks */, - BF_324363145049 /* Framework.framework in Frameworks */, - BF_943177036061 /* StaticLibrary_ObjC.a in Frameworks */, - BF_215463341392 /* SomeFramework.framework in Frameworks */, + 718D11FA2B62EFF8783CF9693CEFC64F /* Alamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - G_1235039993875 /* App_iOS_UITests */ = { + 0637537049544BDB5A2EB886E765A6C8 /* Module */ = { isa = PBXGroup; children = ( - FR_643034527839 /* Info.plist */, - FR_145531354566 /* TestProjectUITests.swift */, - ); - path = App_iOS_UITests; - sourceTree = ""; - }; - G_1646573205915 /* iMessage MessagesExtension */ = { - isa = PBXGroup; - children = ( - FR_830053537293 /* Assets.xcassets */, - FR_948931241088 /* Info.plist */, - VG_201160695646 /* MainInterface.storyboard */, - FR_310979699934 /* MessagesViewController.swift */, - ); - path = "iMessage MessagesExtension"; - sourceTree = ""; - }; - G_1885780145626 /* CopyFiles */ = { - isa = PBXGroup; - children = ( - FR_837374194182 /* Empty.h */, - ); - path = CopyFiles; - sourceTree = ""; - }; - G_1952740716080 /* Frameworks */ = { - isa = PBXGroup; - children = ( - G_2883690153011 /* Carthage */, - FR_654302359039 /* SomeFramework.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - G_2262017438925 /* iOS */ = { - isa = PBXGroup; - children = ( - FR_410645050443 /* Alamofire.framework */, - ); - path = iOS; - sourceTree = ""; - }; - G_2262017442691 /* Mac */ = { - isa = PBXGroup; - children = ( - FR_257516580010 /* Alamofire.framework */, - ); - path = Mac; - sourceTree = ""; - }; - G_2883690153011 /* Carthage */ = { - isa = PBXGroup; - children = ( - G_2262017438925 /* iOS */, - G_2262017442691 /* Mac */, - G_8628897169668 /* tvOS */, - G_8244488572839 /* watchOS */, - ); - name = Carthage; - path = Carthage/Build; - sourceTree = ""; - }; - G_3234630030493 /* FileGroup */ = { - isa = PBXGroup; - children = ( - G_8030722683864 /* UnderFileGroup */, - ); - path = FileGroup; - sourceTree = ""; - }; - G_3246710779368 /* App_watchOS */ = { - isa = PBXGroup; - children = ( - FR_587738154368 /* Assets.xcassets */, - FR_293137352077 /* Info.plist */, - VG_264279911176 /* Interface.storyboard */, - ); - path = App_watchOS; - sourceTree = ""; - }; - G_3765690547864 /* XPC Service */ = { - isa = PBXGroup; - children = ( - FR_803921963291 /* Info.plist */, - FR_151462316179 /* main.m */, - FR_602719163962 /* XPC_Service.h */, - FR_602719163945 /* XPC_Service.m */, - FR_739513596122 /* XPC_ServiceProtocol.h */, - ); - path = "XPC Service"; - sourceTree = ""; - }; - G_3997550084026 /* StaticLibrary_ObjC */ = { - isa = PBXGroup; - children = ( - G_5938599606592 /* Module */, - FR_698230898030 /* StaticLibrary_ObjC.h */, - "FR_698230898030-1" /* StaticLibrary_ObjC.m */, - ); - path = StaticLibrary_ObjC; - sourceTree = ""; - }; - G_4371791668439 /* StaticLibrary_Swift */ = { - isa = PBXGroup; - children = ( - FR_470929579339 /* StaticLibrary.swift */, - ); - path = StaticLibrary_Swift; - sourceTree = ""; - }; - G_4661500274312 /* Framework */ = { - isa = PBXGroup; - children = ( - FR_172952167809 /* FrameworkFile.swift */, - FR_247808626608 /* Info.plist */, - FR_183521624014 /* MyFramework.h */, - ); - path = Framework; - sourceTree = ""; - }; - G_4793969390202 /* Vendor */ = { - isa = PBXGroup; - children = ( - FR_229826849033 /* SomeXPCService.xpc */, - ); - path = Vendor; - sourceTree = ""; - }; - G_5070234922517 /* App_watchOS Extension */ = { - isa = PBXGroup; - children = ( - FR_987043315473 /* Assets.xcassets */, - FR_340586388409 /* ExtensionDelegate.swift */, - FR_530852296303 /* Info.plist */, - FR_363921640403 /* InterfaceController.swift */, - FR_304712043717 /* NotificationController.swift */, - FR_748548478992 /* PushNotificationPayload.apns */, - ); - path = "App_watchOS Extension"; - sourceTree = ""; - }; - G_5938599606592 /* Module */ = { - isa = PBXGroup; - children = ( - FR_665156855283 /* module.modulemap */, + 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */, ); path = Module; sourceTree = ""; }; - G_6651250437419 /* StandaloneFiles */ = { + 09F7EC373CEDA69072DC9D77495F0E25 /* App_iOS_UITests */ = { isa = PBXGroup; children = ( - FR_675266829517 /* Standalone.swift */, - FR_408537768279 /* StandaloneAssets.xcassets */, + 31F27C0F2868434258A846C4ADE4B35A /* Info.plist */, + 0BE8C8DF245700F7E0EF36D9F2B8C0E3 /* TestProjectUITests.swift */, ); - path = StandaloneFiles; + path = App_iOS_UITests; sourceTree = ""; }; - G_7189434949822 /* Resources */ = { + 17999F76E13B84D118972DC03BCEA6F2 /* App_iOS_Tests */ = { isa = PBXGroup; children = ( - FR_238161558082 /* MyBundle.bundle */, - ); - path = Resources; - sourceTree = ""; - }; - G_7831228999101 /* App_iOS_Tests */ = { - isa = PBXGroup; - children = ( - FR_655678458041 /* Info.plist */, - FR_722239415598 /* TestProjectTests.swift */, + BD07DCE20104773C42E7617A09A55BD5 /* Info.plist */, + 0248345678C3EEA7143459B634AB4F99 /* TestProjectTests.swift */, ); path = App_iOS_Tests; sourceTree = ""; }; - G_8030722683864 /* UnderFileGroup */ = { + 1AAEB7BBE834CAB4A205069AE3E0AF11 /* Frameworks */ = { isa = PBXGroup; children = ( - FR_196911129660 /* MoreUnder.swift */, + F4476AACF02F14D7CACC61F1763C176B /* Carthage */, + 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */, ); - path = UnderFileGroup; + name = Frameworks; sourceTree = ""; }; - G_8244488572839 /* watchOS */ = { + 215025EF88E84A49861B7B0A717D575C /* Configs */ = { isa = PBXGroup; children = ( - FR_752394658615 /* Alamofire.framework */, + 0BFEFFB973F5EEEF285D98AB90CFC9B0 /* base.xcconfig */, + C64021D20FD55B89CE1AFE88AE7C1CDD /* config.xcconfig */, ); - path = watchOS; + path = Configs; sourceTree = ""; }; - G_8252321105004 /* App */ = { + 384C5FF5A3C798619B2A3F5A9C654EE3 /* Resources */ = { isa = PBXGroup; children = ( - FR_854336462818 /* AppDelegate.swift */, - FR_868653349092 /* Assets.xcassets */, - FR_725187762757 /* Info.plist */, - VG_256263906698 /* LaunchScreen.storyboard */, - VG_473000061463 /* Localizable.strings */, - VG_746876637628 /* Localizable.stringsdict */, - VG_118219888726 /* LocalizedStoryboard.storyboard */, - VG_609193904586 /* Main.storyboard */, - VG_229021855709 /* Model.xcdatamodeld */, - FR_461737784133 /* module.modulemap */, - FR_481575785861 /* ViewController.swift */, + C67AA6BA96CF5A5E2A3FBED848E6C3D4 /* MyBundle.bundle */, + ); + path = Resources; + sourceTree = ""; + }; + 4AD39BFA18B0D81C8C8BA3425FE6E91A /* Framework */ = { + isa = PBXGroup; + children = ( + 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */, + 25F603F3FBBAB0B8947331C9190A6282 /* Info.plist */, + 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */, + ); + path = Framework; + sourceTree = ""; + }; + 56936C3686A0928B34562E16F94536C8 /* App_watchOS */ = { + isa = PBXGroup; + children = ( + 0C43CE340B78E88FE95F7E8DF5EC35D2 /* Assets.xcassets */, + 88CE11E8D928D43BCC70F12A5576D511 /* Info.plist */, + C358B60A4C6D98BF3CD9B2C0C75FFC31 /* Interface.storyboard */, + ); + path = App_watchOS; + sourceTree = ""; + }; + 5BC30B8BA34DE0A67196277EA184BAAC /* CopyFiles */ = { + isa = PBXGroup; + children = ( + 5FCB8A69D323BC3CA127642FCFD887A6 /* Empty.h */, + ); + path = CopyFiles; + sourceTree = ""; + }; + 61FC1E8D4842FD2FBD2E37F067E943F9 /* iOS */ = { + isa = PBXGroup; + children = ( + 6237064EDBE405135BC1CE7DE20A131C /* Alamofire.framework */, + ); + path = iOS; + sourceTree = ""; + }; + 63A2C5F06E17FA2652DDA338F0A32501 /* StaticLibrary_ObjC */ = { + isa = PBXGroup; + children = ( + 0637537049544BDB5A2EB886E765A6C8 /* Module */, + 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */, + B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */, + ); + path = StaticLibrary_ObjC; + sourceTree = ""; + }; + 874A71D4E37BA319FD212D21173C1CED /* iMessage MessagesExtension */ = { + isa = PBXGroup; + children = ( + 80294B8FAECA0DC3B83DC6D2FC6FBE59 /* Assets.xcassets */, + 72AE3D8A409EF0F4D17EA0BD0EC3BFFA /* Info.plist */, + 81F7E21FBB8DA98ECF0A51099CDAF2EE /* MainInterface.storyboard */, + 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */, + ); + path = "iMessage MessagesExtension"; + sourceTree = ""; + }; + B2AA9B645D928F657D399D8F62BB4DDC /* App_watchOS Extension */ = { + isa = PBXGroup; + children = ( + 523DB06F1851416DDCF4B7616911B6CB /* Assets.xcassets */, + B71DECBD66A150B303E116D2F05C0B4E /* ExtensionDelegate.swift */, + AFDDC1A69B4B2637D36C39EE01DF23C3 /* Info.plist */, + 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */, + 01801EB5629DB3812650E5E47F3362C8 /* NotificationController.swift */, + 11DBDC38AD04D9F24454201311335431 /* PushNotificationPayload.apns */, + ); + path = "App_watchOS Extension"; + sourceTree = ""; + }; + BA50A516F5BBC843E3CD4B1845B99334 /* App */ = { + isa = PBXGroup; + children = ( + 10D051136D86691641578C2EB7616D4B /* AppDelegate.swift */, + 083D78A107BD9A58D0F5B30EA9A65E2C /* Assets.xcassets */, + A444869BCBB55167EF043EEFFD075A78 /* Info.plist */, + 9835A83F1E5D8E22848E171BA3C2DBA6 /* LaunchScreen.storyboard */, + E005A2734C32783354AAB8546A12718B /* Localizable.strings */, + 466B302E661DE3B3972203B31F4AFED4 /* Localizable.stringsdict */, + 49A30AD670910672DABA8B736EECBAEB /* LocalizedStoryboard.storyboard */, + 8EAFD105FB449C592C944D3003203AB5 /* Main.storyboard */, + 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */, + 3F8D809984627520BE1811A1AC9B1AD9 /* module.modulemap */, + D68FD4BD70DF5429E43E14A65FDF9D81 /* ViewController.swift */, ); name = App; path = App_iOS; sourceTree = ""; }; - G_8268950006174 /* iMessage */ = { + BEB2E21F3B6F8B8E6CA0CB877DE3D47D /* Vendor */ = { isa = PBXGroup; children = ( - FR_377082606829 /* Assets.xcassets */, - FR_505327409380 /* Info.plist */, + 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */, + ); + path = Vendor; + sourceTree = ""; + }; + C27E200F9D2708164A4BDD75B7A861BC /* StandaloneFiles */ = { + isa = PBXGroup; + children = ( + 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */, + 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */, + ); + path = StandaloneFiles; + sourceTree = ""; + }; + C30E33740CB17218735DAE1FFFC565AE /* FileGroup */ = { + isa = PBXGroup; + children = ( + D81BDF703E98A5351121B96103BD52A6 /* UnderFileGroup */, + ); + path = FileGroup; + sourceTree = ""; + }; + D59738133ECA1ACC9C32CAD22FBEF0F4 /* StaticLibrary_Swift */ = { + isa = PBXGroup; + children = ( + 75B653BE433FA2C7F27E0DD742C56972 /* StaticLibrary.swift */, + ); + path = StaticLibrary_Swift; + sourceTree = ""; + }; + D81BDF703E98A5351121B96103BD52A6 /* UnderFileGroup */ = { + isa = PBXGroup; + children = ( + 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */, + ); + path = UnderFileGroup; + sourceTree = ""; + }; + DA18B6EB7FF6E1DAACDFA5EB93833C54 /* watchOS */ = { + isa = PBXGroup; + children = ( + 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */, + ); + path = watchOS; + sourceTree = ""; + }; + E0B77C999E8E6D192A135A06E7331C27 /* Mac */ = { + isa = PBXGroup; + children = ( + 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */, + ); + path = Mac; + sourceTree = ""; + }; + ECD23E49A0CA25E14EC0D028673840D6 /* iMessage */ = { + isa = PBXGroup; + children = ( + EF485495979F5EF324B541071E00D33B /* Assets.xcassets */, + 2923CD786EB965107819EFF08193E672 /* Info.plist */, ); path = iMessage; sourceTree = ""; }; - G_8340618952527 /* Configs */ = { + EDFE6B7A5CE9583846B704EE371675F2 = { isa = PBXGroup; children = ( - FR_635802719871 /* base.xcconfig */, - FR_660690926982 /* config.xcconfig */, - ); - path = Configs; - sourceTree = ""; - }; - G_8448771205358 = { - isa = PBXGroup; - children = ( - G_8252321105004 /* App */, - G_7831228999101 /* App_iOS_Tests */, - G_1235039993875 /* App_iOS_UITests */, - G_3246710779368 /* App_watchOS */, - G_5070234922517 /* App_watchOS Extension */, - G_8340618952527 /* Configs */, - G_1885780145626 /* CopyFiles */, - G_3234630030493 /* FileGroup */, - G_4661500274312 /* Framework */, - G_8268950006174 /* iMessage */, - G_1646573205915 /* iMessage MessagesExtension */, - G_7189434949822 /* Resources */, - G_6651250437419 /* StandaloneFiles */, - G_3997550084026 /* StaticLibrary_ObjC */, - G_4371791668439 /* StaticLibrary_Swift */, - G_4793969390202 /* Vendor */, - G_3765690547864 /* XPC Service */, - FR_479281060337 /* Folder */, - FR_815403394914 /* Headers */, - FR_232605427418 /* Mintfile */, - FR_257073931060 /* ResourceFolder */, - FR_775316160345 /* SomeFile */, - G_1952740716080 /* Frameworks */, - G_8620238527590 /* Products */, + BA50A516F5BBC843E3CD4B1845B99334 /* App */, + 17999F76E13B84D118972DC03BCEA6F2 /* App_iOS_Tests */, + 09F7EC373CEDA69072DC9D77495F0E25 /* App_iOS_UITests */, + 56936C3686A0928B34562E16F94536C8 /* App_watchOS */, + B2AA9B645D928F657D399D8F62BB4DDC /* App_watchOS Extension */, + 215025EF88E84A49861B7B0A717D575C /* Configs */, + 5BC30B8BA34DE0A67196277EA184BAAC /* CopyFiles */, + C30E33740CB17218735DAE1FFFC565AE /* FileGroup */, + 4AD39BFA18B0D81C8C8BA3425FE6E91A /* Framework */, + ECD23E49A0CA25E14EC0D028673840D6 /* iMessage */, + 874A71D4E37BA319FD212D21173C1CED /* iMessage MessagesExtension */, + 384C5FF5A3C798619B2A3F5A9C654EE3 /* Resources */, + C27E200F9D2708164A4BDD75B7A861BC /* StandaloneFiles */, + 63A2C5F06E17FA2652DDA338F0A32501 /* StaticLibrary_ObjC */, + D59738133ECA1ACC9C32CAD22FBEF0F4 /* StaticLibrary_Swift */, + BEB2E21F3B6F8B8E6CA0CB877DE3D47D /* Vendor */, + F37F48EF1C25643F0E408DC3E115895A /* XPC Service */, + FFA022D59DE3CD80EDCC5CCEC6DB29C7 /* Folder */, + 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */, + 7AF3ACEAC55D3B6352EED8415D5B2951 /* Mintfile */, + 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */, + 247D8122E426D1FC239D36918CE3C0C5 /* SomeFile */, + 1AAEB7BBE834CAB4A205069AE3E0AF11 /* Frameworks */, + FC1E35057FBB1EE0597B70D0D9EDF4EE /* Products */, ); indentWidth = 2; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; - G_8620238527590 /* Products */ = { + EF06950CAC36EBAD861CAD7CA561D440 /* tvOS */ = { isa = PBXGroup; children = ( - FR_783122899910 /* App_iOS_Tests.xctest */, - FR_123503999387 /* App_iOS_UITests.xctest */, - FR_825232110500 /* App_iOS.app */, - FR_480982116789 /* App_macOS.app */, - FR_507023492251 /* App_watchOS Extension.appex */, - FR_324671077936 /* App_watchOS.app */, - FR_525119120469 /* Framework.framework */, - FR_662315837182 /* Framework.framework */, - FR_438704538506 /* Framework.framework */, - FR_472296042419 /* Framework.framework */, - FR_935153865209 /* iMessageApp.app */, - FR_618687462494 /* iMessageExtension.appex */, - FR_399755008402 /* StaticLibrary_ObjC.a */, - FR_437179166843 /* StaticLibrary_Swift.a */, - FR_376569054786 /* XPC Service.xpc */, - ); - name = Products; - sourceTree = ""; - }; - G_8628897169668 /* tvOS */ = { - isa = PBXGroup; - children = ( - FR_452853029807 /* Alamofire.framework */, + F9C71345D3886B5E2221F4441BD871D5 /* Alamofire.framework */, ); path = tvOS; sourceTree = ""; }; + F37F48EF1C25643F0E408DC3E115895A /* XPC Service */ = { + isa = PBXGroup; + children = ( + 8AFEF032B9B258B97EFBD5B5AA741E8C /* Info.plist */, + AC31952D4BF4BB8CC21459D75DCB7DC9 /* main.m */, + 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */, + 508B113F244D2D7F7731ED871B2F16DA /* XPC_Service.m */, + F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */, + ); + path = "XPC Service"; + sourceTree = ""; + }; + F4476AACF02F14D7CACC61F1763C176B /* Carthage */ = { + isa = PBXGroup; + children = ( + 61FC1E8D4842FD2FBD2E37F067E943F9 /* iOS */, + E0B77C999E8E6D192A135A06E7331C27 /* Mac */, + EF06950CAC36EBAD861CAD7CA561D440 /* tvOS */, + DA18B6EB7FF6E1DAACDFA5EB93833C54 /* watchOS */, + ); + name = Carthage; + path = Carthage/Build; + sourceTree = ""; + }; + FC1E35057FBB1EE0597B70D0D9EDF4EE /* Products */ = { + isa = PBXGroup; + children = ( + C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */, + EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */, + 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */, + AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */, + 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */, + CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */, + E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, + E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, + E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, + E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, + D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */, + 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */, + 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */, + 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */, + DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */, + ); + name = Products; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - HBP_43870453850 /* Headers */ = { + 440F7F1F9382CEDD92D75B89E25552D5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BF_239684316986 /* Headers in Headers */, - BF_813358525536 /* MyFramework.h in Headers */, + E249D28B974B22ED41B7BAE7A1CC7468 /* Headers in Headers */, + 486E2AABDE448C496C0FCC393A35E669 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - HBP_47229604241 /* Headers */ = { + 9C424B9F3AFC563C6A6CE8FA124F8801 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BF_510053944904 /* Headers in Headers */, - BF_425679397292 /* MyFramework.h in Headers */, + FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */, + 6013ED0F37BB222A6B44D0CB89CE69AE /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - HBP_52511912046 /* Headers */ = { + A08871F94C4ADE4FF10D349F4ECC06C9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BF_905617636654 /* Headers in Headers */, - BF_496472559782 /* MyFramework.h in Headers */, + 44B62E9C097529F3D5C7A44A5F777A61 /* Headers in Headers */, + 11620E0E3097992FFB14B60ADB580C14 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - HBP_66231583718 /* Headers */ = { + B6AA01763EF8349E60D1FA4E652778F3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BF_259448131292 /* Headers in Headers */, - BF_734036107922 /* MyFramework.h in Headers */, + 702E56BFA3B2A830E24D74FCA3A33D55 /* Headers in Headers */, + 8CF2462D2181DDDA1A8E8A1F176F9A47 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ - LT_479264660374 /* Legacy */ = { + D47258787A296733EB9A496796369EDC /* Legacy */ = { isa = PBXLegacyTarget; - buildConfigurationList = CL_479264660374 /* Build configuration list for PBXLegacyTarget "Legacy" */; + buildConfigurationList = 7523052A5C96494802A0431E05947F67 /* Build configuration list for PBXLegacyTarget "Legacy" */; buildPhases = ( - SBP_47926466037 /* Sources */, + 634CFCBFE3760F2A0288F1BF42B66FF9 /* Sources */, ); buildToolPath = /usr/bin/true; dependencies = ( @@ -857,191 +854,87 @@ /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ - NT_123503999387 /* App_iOS_UITests */ = { + 24B389B0959F4A6CB05BB732DABDFE40 /* iMessageApp */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_123503999387 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */; + buildConfigurationList = 59C3AA3AEA5802DA17DF9B42615D9B6B /* Build configuration list for PBXNativeTarget "iMessageApp" */; buildPhases = ( - SBP_12350399938 /* Sources */, - CFBP_4082141876 /* Embed Frameworks */, + 1C8F955BEA261BDB36838B408C2D7D23 /* Sources */, + DFB4932D20872BF046F9902EB430C6B6 /* Resources */, + 8C62857F0DCEBB22C299F26FCCE769F9 /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( - TD_676191581124 /* PBXTargetDependency */, + D976477E0195A8FFD5043C8BBD4B67C4 /* PBXTargetDependency */, ); - name = App_iOS_UITests; - productName = App_iOS_UITests; - productReference = FR_123503999387 /* App_iOS_UITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; + name = iMessageApp; + productName = iMessageApp; + productReference = D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */; + productType = "com.apple.product-type.application.messages"; }; - NT_324671077936 /* App_watchOS */ = { + 2563A01E1A5E949F2AE1CD7308779FE3 /* Framework_tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_324671077936 /* Build configuration list for PBXNativeTarget "App_watchOS" */; + buildConfigurationList = 0AA719054B034D653457F3861CE722A9 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */; buildPhases = ( - SBP_32467107793 /* Sources */, - RBP_32467107793 /* Resources */, - FBP_32467107793 /* Frameworks */, - CFBP_4684049960 /* Embed App Extensions */, - SSBP_5954948530 /* Carthage */, + E74DACDAB11D89D5B824405B81E48D89 /* Sources */, + B6AA01763EF8349E60D1FA4E652778F3 /* Headers */, + C79A51DBA8AF7631AEF22BA83E104A04 /* Frameworks */, + ADF413AF548A97CB33898BB4F6211314 /* MyScript */, ); buildRules = ( ); dependencies = ( - TD_193291182921 /* PBXTargetDependency */, + 63D97355ECD5B9E4B835338653920BC1 /* PBXTargetDependency */, ); - name = App_watchOS; - productName = App_watchOS; - productReference = FR_324671077936 /* App_watchOS.app */; - productType = "com.apple.product-type.application.watchapp2"; + name = Framework_tvOS; + productName = Framework_tvOS; + productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; + productType = "com.apple.product-type.framework"; }; - NT_376569054786 /* XPC Service */ = { + 347AE2E7B939A276DEE77148A708FDE4 /* Framework_watchOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_376569054786 /* Build configuration list for PBXNativeTarget "XPC Service" */; + buildConfigurationList = CCF68725DCD5EF7FD03872D0B98C32F0 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */; buildPhases = ( - SBP_37656905478 /* Sources */, + A0301004CBF36C0004B23102202FA9FE /* Sources */, + 9C424B9F3AFC563C6A6CE8FA124F8801 /* Headers */, + F6C2490C6497837A21966090C77C3602 /* Frameworks */, + DABB7DFD3C5DB4EAC8C5D24C79EA4E35 /* MyScript */, ); buildRules = ( ); dependencies = ( - ); - name = "XPC Service"; - productName = "XPC Service"; - productReference = FR_376569054786 /* XPC Service.xpc */; - productType = "com.apple.product-type.xpc-service"; - }; - NT_399755008402 /* StaticLibrary_ObjC */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_399755008402 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC" */; - buildPhases = ( - SBP_39975500840 /* Sources */, - CFBP_3265670993 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_ObjC; - productName = StaticLibrary_ObjC; - productReference = FR_399755008402 /* StaticLibrary_ObjC.a */; - productType = "com.apple.product-type.library.static"; - }; - NT_437179166843 /* StaticLibrary_Swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_437179166843 /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */; - buildPhases = ( - SBP_43717916684 /* Sources */, - SSBP_5390042403 /* Copy Swift Objective-C Interface Header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_Swift; - productName = StaticLibrary_Swift; - productReference = FR_437179166843 /* StaticLibrary_Swift.a */; - productType = "com.apple.product-type.library.static"; - }; - NT_438704538506 /* Framework_watchOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_438704538506 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */; - buildPhases = ( - HBP_43870453850 /* Headers */, - SBP_43870453850 /* Sources */, - FBP_43870453850 /* Frameworks */, - SSBP_2467869845 /* MyScript */, - ); - buildRules = ( - ); - dependencies = ( - TD_784412347908 /* PBXTargetDependency */, + 7E5A83C554576126BB5DB76070940A42 /* PBXTargetDependency */, ); name = Framework_watchOS; productName = Framework_watchOS; - productReference = FR_438704538506 /* Framework.framework */; + productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; - NT_472296042419 /* Framework_iOS */ = { + 6805881B1B6A80ABD523DAF4AFA493E2 /* Framework_macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_472296042419 /* Build configuration list for PBXNativeTarget "Framework_iOS" */; + buildConfigurationList = 9BA95DBD7B862EE1F43DC68338281D0E /* Build configuration list for PBXNativeTarget "Framework_macOS" */; buildPhases = ( - HBP_47229604241 /* Headers */, - SBP_47229604241 /* Sources */, - FBP_47229604241 /* Frameworks */, - SSBP_3886691194 /* MyScript */, + 1411E21883A09388E140C6D123029288 /* Sources */, + A08871F94C4ADE4FF10D349F4ECC06C9 /* Headers */, + 266AF93F95F8ECC5F62E443DD79D4263 /* Frameworks */, + 78EF33E6A08B3BB88D8805DC3588843C /* MyScript */, ); buildRules = ( ); dependencies = ( - TD_667455552356 /* PBXTargetDependency */, - ); - name = Framework_iOS; - productName = Framework_iOS; - productReference = FR_472296042419 /* Framework.framework */; - productType = "com.apple.product-type.framework"; - }; - NT_480982116789 /* App_macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_480982116789 /* Build configuration list for PBXNativeTarget "App_macOS" */; - buildPhases = ( - SBP_48098211678 /* Sources */, - CFBP_8368933518 /* CopyFiles */, - FBP_48098211678 /* Frameworks */, - CFBP_4930089528 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - TD_235580504123 /* PBXTargetDependency */, - TD_629038784927 /* PBXTargetDependency */, - TD_743784992411 /* PBXTargetDependency */, - ); - name = App_macOS; - productName = App_macOS; - productReference = FR_480982116789 /* App_macOS.app */; - productType = "com.apple.product-type.application"; - }; - NT_507023492251 /* App_watchOS Extension */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_507023492251 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */; - buildPhases = ( - SBP_50702349225 /* Sources */, - RBP_50702349225 /* Resources */, - FBP_50702349225 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "App_watchOS Extension"; - productName = "App_watchOS Extension"; - productReference = FR_507023492251 /* App_watchOS Extension.appex */; - productType = "com.apple.product-type.watchkit2-extension"; - }; - NT_525119120469 /* Framework_macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_525119120469 /* Build configuration list for PBXNativeTarget "Framework_macOS" */; - buildPhases = ( - HBP_52511912046 /* Headers */, - SBP_52511912046 /* Sources */, - FBP_52511912046 /* Frameworks */, - SSBP_8255377629 /* MyScript */, - ); - buildRules = ( - ); - dependencies = ( - TD_337103940101 /* PBXTargetDependency */, + B7FA3A9932789DFBE8BEDD648C9424B2 /* PBXTargetDependency */, ); name = Framework_macOS; productName = Framework_macOS; - productReference = FR_525119120469 /* Framework.framework */; + productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; - NT_618687462494 /* iMessageExtension */ = { + 8A0FE14A3A3815C1F26B447C6178089C /* iMessageExtension */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_618687462494 /* Build configuration list for PBXNativeTarget "iMessageExtension" */; + buildConfigurationList = 330B76D4702856DD55067456FD7A4F4A /* Build configuration list for PBXNativeTarget "iMessageExtension" */; buildPhases = ( - SBP_61868746249 /* Sources */, - RBP_61868746249 /* Resources */, + 35714896F7B0D8F151E1A3B4C04AE0DB /* Sources */, + 32ECF2BB5AFA1C4E9A0F6DFE1417110E /* Resources */, ); buildRules = ( ); @@ -1049,113 +942,204 @@ ); name = iMessageExtension; productName = iMessageExtension; - productReference = FR_618687462494 /* iMessageExtension.appex */; + productReference = 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */; productType = "com.apple.product-type.app-extension.messages"; }; - NT_662315837182 /* Framework_tvOS */ = { + 8CDD0FC5B69DB55054CAECF513716138 /* App_iOS_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_662315837182 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */; + buildConfigurationList = 4DF366239AC6F6E9EE59EEA525319ABA /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */; buildPhases = ( - HBP_66231583718 /* Headers */, - SBP_66231583718 /* Sources */, - FBP_66231583718 /* Frameworks */, - SSBP_6331376344 /* MyScript */, + E74227370CF6081A47B8C2AB02479899 /* Sources */, + 31035708668339C7624CD18BC4971F27 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( - TD_957476409477 /* PBXTargetDependency */, - ); - name = Framework_tvOS; - productName = Framework_tvOS; - productReference = FR_662315837182 /* Framework.framework */; - productType = "com.apple.product-type.framework"; - }; - NT_783122899910 /* App_iOS_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_783122899910 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */; - buildPhases = ( - SBP_78312289991 /* Sources */, - CFBP_4626438721 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - TD_887143865471 /* PBXTargetDependency */, + 85A9116EE91FAB1AA6CA20FD4203A941 /* PBXTargetDependency */, ); name = App_iOS_Tests; productName = App_iOS_Tests; - productReference = FR_783122899910 /* App_iOS_Tests.xctest */; + productReference = C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - NT_825232110500 /* App_iOS */ = { + 9F21B9C99E75314E51854589C0A2D40C /* App_watchOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_825232110500 /* Build configuration list for PBXNativeTarget "App_iOS" */; + buildConfigurationList = 13FC8BD638A49F585CF46B85EF6E6E4E /* Build configuration list for PBXNativeTarget "App_watchOS" */; buildPhases = ( - SBP_82523211050 /* Sources */, - RBP_82523211050 /* Resources */, - CFBP_7191905390 /* CopyFiles */, - FBP_82523211050 /* Frameworks */, - CFBP_6493932244 /* Embed Frameworks */, - CFBP_2836118931 /* Embed Watch Content */, - SSBP_8106229290 /* Carthage */, - SSBP_5106020372 /* Strip Unused Architectures from Frameworks */, - SSBP_8706434794 /* MyScript */, + 8E6FC06C82186DB3FA95E51EFE18711C /* Sources */, + 24E393E5BC60BE4C18A4E88099C92B0B /* Resources */, + 1D124A23C4D38CE6B023194E85A64BBA /* Frameworks */, + 64735A35127234188A50A9CC433F3D43 /* Embed App Extensions */, + 2F13215A0801F44C3CCF154F3EE02A7B /* Carthage */, ); buildRules = ( ); dependencies = ( - TD_824101787753 /* PBXTargetDependency */, - TD_109724965966 /* PBXTargetDependency */, - TD_721522128177 /* PBXTargetDependency */, - TD_288560876254 /* PBXTargetDependency */, + 586BE274C55FC00DE6BE62A0AAC127F6 /* PBXTargetDependency */, + ); + name = App_watchOS; + productName = App_watchOS; + productReference = CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */; + productType = "com.apple.product-type.application.watchapp2"; + }; + B145BCFEB550C3DDF48510BB85CDE8DC /* App_iOS_UITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 933D4300D58AA7B25E208357C65F2AD3 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */; + buildPhases = ( + D037068D88E7DAEB3A373602EE996609 /* Sources */, + 916C69163E65CD06E8BD0CCC8D8227C2 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + A835D5FBAD20741BCF95975E1CD63A7A /* PBXTargetDependency */, + ); + name = App_iOS_UITests; + productName = App_iOS_UITests; + productReference = EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7066464807EABA4728B984B10A24E931 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC" */; + buildPhases = ( + 6186DB37B6D48F0D14D3C9300D18BE16 /* Sources */, + 8748CD344E8DDE93B221AA670D93DA94 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC; + productName = StaticLibrary_ObjC; + productReference = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; + CBCC05D0B8E90F960AA198981827667B /* App_watchOS Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = FC084246C395F08CB12677620BAF2399 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */; + buildPhases = ( + 910907240480D0AFBF32A79A4008D866 /* Sources */, + 918FF44B84209799C8ECD292189E6D55 /* Resources */, + 78E2554EF343D4CF421577E8651E5480 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "App_watchOS Extension"; + productName = "App_watchOS Extension"; + productReference = 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */; + productType = "com.apple.product-type.watchkit2-extension"; + }; + D20DB1C7D23BB53FF8FD09BAF451A294 /* StaticLibrary_Swift */ = { + isa = PBXNativeTarget; + buildConfigurationList = F40A414D7A0A13368AC9FB64BA5C73AC /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */; + buildPhases = ( + A305A9C4673244353334E95DCDFD735D /* Sources */, + 06FB4F63AAEECCDD060382A3AF8AEF4B /* Copy Swift Objective-C Interface Header */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_Swift; + productName = StaticLibrary_Swift; + productReference = 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */; + productType = "com.apple.product-type.library.static"; + }; + DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5B1322FEBB7A746BD1BF9227D37A7421 /* Build configuration list for PBXNativeTarget "App_iOS" */; + buildPhases = ( + 1C758FAD884F96BE234FBB1BBE295E97 /* Sources */, + FEFBCD77CD631C182084B94EC52BEE33 /* Resources */, + FE39362C1CB6263D81609FF7975359EE /* CopyFiles */, + 3730EBC6001089E597081CA9CF12AF52 /* Frameworks */, + 1130301AAAB06CA6AE2DBC09B9F82B74 /* Embed Frameworks */, + 800C402270322E33CF2C5DBBAE32DD06 /* Embed Watch Content */, + 712CA3288AD8B0F43FAA19930C53500B /* Carthage */, + 974A437754992A1B4A30613EC766AE2C /* Strip Unused Architectures from Frameworks */, + 70D0BCF93538A104153586A9BF269386 /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + 10B5BED93CB8C9A5B7BB81E996C7F071 /* PBXTargetDependency */, + 5189C5E269DD98A187BF59169A4FC1D1 /* PBXTargetDependency */, + FA8E2412D27AAD48D0F75809A484D599 /* PBXTargetDependency */, + 16156D2E07BFBB09D5921589B483FF23 /* PBXTargetDependency */, ); name = App_iOS; productName = App_iOS; - productReference = FR_825232110500 /* App_iOS.app */; + productReference = 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */; productType = "com.apple.product-type.application"; }; - NT_935153865209 /* iMessageApp */ = { + E165F00BB866D2A7087C93650EDB1138 /* App_macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CL_935153865209 /* Build configuration list for PBXNativeTarget "iMessageApp" */; + buildConfigurationList = 837376727FE2CF4AE46785F0E9561ED1 /* Build configuration list for PBXNativeTarget "App_macOS" */; buildPhases = ( - SBP_93515386520 /* Sources */, - RBP_93515386520 /* Resources */, - CFBP_5460766702 /* Embed App Extensions */, + 25185271EDE7FEEC99372505A683359C /* Sources */, + 0B85189BAB2D1568EECF81226FF3FF97 /* CopyFiles */, + C8CA7D5902F866D50BF6F9A24BF1D10A /* Frameworks */, + DBC722FD0EE319959445B8F14D3EE091 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( - TD_317921131342 /* PBXTargetDependency */, + BCAEBFE2D144CD4E9F4042CB793B6FFB /* PBXTargetDependency */, + 8583B3541D71924D376A891CCAD90C80 /* PBXTargetDependency */, + 632C4C9ABCE4E550CC5CC6F87B5C4DBD /* PBXTargetDependency */, ); - name = iMessageApp; - productName = iMessageApp; - productReference = FR_935153865209 /* iMessageApp.app */; - productType = "com.apple.product-type.application.messages"; + name = App_macOS; + productName = App_macOS; + productReference = AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */; + productType = "com.apple.product-type.application"; + }; + F61DEA90F1B7331EE9B26BBA1F66D1F3 /* XPC Service */ = { + isa = PBXNativeTarget; + buildConfigurationList = 526C1EB2E50CDBABCB448EE2FDF2E5D8 /* Build configuration list for PBXNativeTarget "XPC Service" */; + buildPhases = ( + E32AAD525623BF5008484D641327F1AD /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "XPC Service"; + productName = "XPC Service"; + productReference = DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */; + productType = "com.apple.product-type.xpc-service"; + }; + FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = ABBCABD06AD7666C13DD9BAF0C16276E /* Build configuration list for PBXNativeTarget "Framework_iOS" */; + buildPhases = ( + AFF1863F9CDDD4DD0B0EB22A6AD9850A /* Sources */, + 440F7F1F9382CEDD92D75B89E25552D5 /* Headers */, + 6F3C985C6701880E8731C4AAFBDC9FEF /* Frameworks */, + 2983C9312429A22DF5437C4020B9937E /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + 0F0F18C8C8E08CF4C25A4DA89DB09A3A /* PBXTargetDependency */, + ); + name = Framework_iOS; + productName = Framework_iOS; + productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; + productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - P_8448771205358 /* Project object */ = { + 48BA824E9883B72747F77581255D9C94 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0930; - TargetAttributes = { - AT_445731917037 = { - CUSTOM = value; - }; - NT_123503999387 = { - TestTargetID = NT_825232110500; - }; - NT_480982116789 = { - ProvisioningStyle = Automatic; - }; - NT_825232110500 = { - ProvisioningStyle = Automatic; - }; - }; + TargetAttributes = "[xcodeproj.PBXObjectReference: [\"TestTargetID\": xcodeproj.PBXObjectReference], xcodeproj.PBXObjectReference: [\"CUSTOM\": \"value\"], xcodeproj.PBXObjectReference: [\"ProvisioningStyle\": \"Automatic\"], xcodeproj.PBXObjectReference: [\"ProvisioningStyle\": \"Automatic\"]]"; }; - buildConfigurationList = CL_844877120535 /* Build configuration list for PBXProject "Project" */; + buildConfigurationList = 0D5965C1A1D5123D687DA32AC9B957F8 /* Build configuration list for PBXProject "Project" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; @@ -1163,129 +1147,87 @@ Base, en, ); - mainGroup = G_8448771205358; + mainGroup = EDFE6B7A5CE9583846B704EE371675F2; projectDirPath = ""; projectRoot = ""; targets = ( - NT_825232110500 /* App_iOS */, - NT_783122899910 /* App_iOS_Tests */, - NT_123503999387 /* App_iOS_UITests */, - NT_480982116789 /* App_macOS */, - NT_324671077936 /* App_watchOS */, - NT_507023492251 /* App_watchOS Extension */, - NT_472296042419 /* Framework_iOS */, - NT_525119120469 /* Framework_macOS */, - NT_662315837182 /* Framework_tvOS */, - NT_438704538506 /* Framework_watchOS */, - LT_479264660374 /* Legacy */, - NT_399755008402 /* StaticLibrary_ObjC */, - NT_437179166843 /* StaticLibrary_Swift */, - AT_445731917037 /* SuperTarget */, - NT_376569054786 /* XPC Service */, - NT_935153865209 /* iMessageApp */, - NT_618687462494 /* iMessageExtension */, + DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */, + 8CDD0FC5B69DB55054CAECF513716138 /* App_iOS_Tests */, + B145BCFEB550C3DDF48510BB85CDE8DC /* App_iOS_UITests */, + E165F00BB866D2A7087C93650EDB1138 /* App_macOS */, + 9F21B9C99E75314E51854589C0A2D40C /* App_watchOS */, + CBCC05D0B8E90F960AA198981827667B /* App_watchOS Extension */, + FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */, + 6805881B1B6A80ABD523DAF4AFA493E2 /* Framework_macOS */, + 2563A01E1A5E949F2AE1CD7308779FE3 /* Framework_tvOS */, + 347AE2E7B939A276DEE77148A708FDE4 /* Framework_watchOS */, + D47258787A296733EB9A496796369EDC /* Legacy */, + C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */, + D20DB1C7D23BB53FF8FD09BAF451A294 /* StaticLibrary_Swift */, + AB59C0690172FF119F045336C1F1CA0D /* SuperTarget */, + F61DEA90F1B7331EE9B26BBA1F66D1F3 /* XPC Service */, + 24B389B0959F4A6CB05BB732DABDFE40 /* iMessageApp */, + 8A0FE14A3A3815C1F26B447C6178089C /* iMessageExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - RBP_32467107793 /* Resources */ = { + 24E393E5BC60BE4C18A4E88099C92B0B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_268392110450 /* Assets.xcassets in Resources */, - BF_612351978356 /* Interface.storyboard in Resources */, + 5163749E505B01D5ACB99C653525D046 /* Assets.xcassets in Resources */, + 370B3DF5D5741094E48BE3C0E00B68E7 /* Interface.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - RBP_50702349225 /* Resources */ = { + 32ECF2BB5AFA1C4E9A0F6DFE1417110E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_237760701422 /* Assets.xcassets in Resources */, + 7C2B87BE6AEC5813069E896736FA68A3 /* Assets.xcassets in Resources */, + 9F2CA54E38CDF41C367FAC8E304AF4C5 /* MainInterface.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - RBP_61868746249 /* Resources */ = { + 918FF44B84209799C8ECD292189E6D55 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_182635022050 /* Assets.xcassets in Resources */, - BF_828878846239 /* MainInterface.storyboard in Resources */, + 3E8A30F173DFFDBDDD0EBDA2D21A0D77 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - RBP_82523211050 /* Resources */ = { + DFB4932D20872BF046F9902EB430C6B6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_279581961655 /* Assets.xcassets in Resources */, - BF_538515166673 /* LaunchScreen.storyboard in Resources */, - BF_211435872001 /* Localizable.strings in Resources */, - BF_314868376788 /* Localizable.stringsdict in Resources */, - BF_186245454304 /* LocalizedStoryboard.storyboard in Resources */, - BF_280535243540 /* Main.storyboard in Resources */, - BF_284620660317 /* MyBundle.bundle in Resources */, - BF_721498080533 /* ResourceFolder in Resources */, - BF_860391087135 /* StandaloneAssets.xcassets in Resources */, - BF_647038614509 /* iMessageApp.app in Resources */, + C5DD61FED061701F52A2AE59334C3964 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - RBP_93515386520 /* Resources */ = { + FEFBCD77CD631C182084B94EC52BEE33 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_334321520545 /* Assets.xcassets in Resources */, + D9338C1374B8F82194B44B6F73075123 /* Assets.xcassets in Resources */, + 2CCCB0657766F9F9527F77A9F42AAF9E /* LaunchScreen.storyboard in Resources */, + 3243ACA306AD909C8186921F288640DB /* Localizable.strings in Resources */, + DB95C341F44FE1E093C948F4F734515B /* Localizable.stringsdict in Resources */, + 3D49538E97F4592012896021971B0166 /* LocalizedStoryboard.storyboard in Resources */, + 7AE6DE3A93E56909084D4F93795B3C93 /* Main.storyboard in Resources */, + 809CDDAA142679CDCFCF376C9CA71C09 /* MyBundle.bundle in Resources */, + BE38983978B6D70795D2924F52F3081D /* ResourceFolder in Resources */, + AA5AF277386012CD6CC015073239E50F /* StandaloneAssets.xcassets in Resources */, + 5A6137039176A4E48CF6B399372D56EA /* iMessageApp.app in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - SSBP_2467869845 /* MyScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = MyScript; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"You ran a script\"\n"; - }; - SSBP_3886691194 /* MyScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = MyScript; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"You ran a script\"\n"; - }; - SSBP_5106020372 /* Strip Unused Architectures from Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Strip Unused Architectures from Frameworks"; - 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"; - }; - SSBP_5390042403 /* Copy Swift Objective-C Interface Header */ = { + 06FB4F63AAEECCDD060382A3AF8AEF4B /* Copy Swift Objective-C Interface Header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1301,7 +1243,21 @@ shellPath = /bin/sh; shellScript = "ditto \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n"; }; - SSBP_5954948530 /* Carthage */ = { + 2983C9312429A22DF5437C4020B9937E /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"You ran a script\"\n"; + }; + 2F13215A0801F44C3CCF154F3EE02A7B /* Carthage */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1317,7 +1273,7 @@ shellPath = /bin/sh; shellScript = "carthage copy-frameworks\n"; }; - SSBP_6331376344 /* MyScript */ = { + 69E4B11A07FF06F8306B5646CA2403EF /* MyScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1329,9 +1285,23 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"You ran a script\"\n"; + shellScript = "echo \"do the thing\""; }; - SSBP_8106229290 /* Carthage */ = { + 70D0BCF93538A104153586A9BF269386 /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"You ran a script!\"\n"; + }; + 712CA3288AD8B0F43FAA19930C53500B /* Carthage */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1347,7 +1317,7 @@ shellPath = /bin/sh; shellScript = "carthage copy-frameworks\n"; }; - SSBP_8255377629 /* MyScript */ = { + 78EF33E6A08B3BB88D8805DC3588843C /* MyScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1361,21 +1331,21 @@ shellPath = /bin/sh; shellScript = "echo \"You ran a script\"\n"; }; - SSBP_8280041834 /* MyScript */ = { + 974A437754992A1B4A30613EC766AE2C /* Strip Unused Architectures from Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = MyScript; + name = "Strip Unused Architectures from Frameworks"; outputPaths = ( ); - runOnlyForDeploymentPostprocessing = 0; + runOnlyForDeploymentPostprocessing = 1; shellPath = /bin/sh; - shellScript = "echo \"do the thing\""; + 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"; }; - SSBP_8706434794 /* MyScript */ = { + ADF413AF548A97CB33898BB4F6211314 /* MyScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1387,538 +1357,311 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"You ran a script!\"\n"; + shellScript = "echo \"You ran a script\"\n"; + }; + DABB7DFD3C5DB4EAC8C5D24C79EA4E35 /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"You ran a script\"\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - SBP_12350399938 /* Sources */ = { + 1411E21883A09388E140C6D123029288 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_167705969896 /* TestProjectUITests.swift in Sources */, + BD4C8B77EF89CF7F4ED0D1C4713397E4 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_32467107793 /* Sources */ = { + 1C758FAD884F96BE234FBB1BBE295E97 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 766C78D100B581A2A469B47A02A0E6D9 /* AppDelegate.swift in Sources */, + FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */, + 0A774DBC62F3C7721971E0C95BB2564A /* MoreUnder.swift in Sources */, + 304090AFAC1ED0D09C95B0CB2BEFEB9E /* Standalone.swift in Sources */, + 55E7240008DD5452802A41DA6FC7A16F /* ViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1C8F955BEA261BDB36838B408C2D7D23 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_37656905478 /* Sources */ = { + 25185271EDE7FEEC99372505A683359C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_855988705556 /* XPC_Service.m in Sources */, - BF_304637845091 /* main.m in Sources */, + 277BE1159CD7855C287566F29F8939BA /* Standalone.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_39975500840 /* Sources */ = { + 35714896F7B0D8F151E1A3B4C04AE0DB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_632297340262 /* StaticLibrary_ObjC.m in Sources */, + AD00993C2491D03BD3A1B6E48D685C29 /* MessagesViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_43717916684 /* Sources */ = { + 6186DB37B6D48F0D14D3C9300D18BE16 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_212221512596 /* StaticLibrary.swift in Sources */, + 1469E5437CDCEAB8B753538C36C6EC91 /* StaticLibrary_ObjC.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_43870453850 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BF_624802436672 /* FrameworkFile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - SBP_47229604241 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BF_456457948943 /* FrameworkFile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - SBP_47926466037 /* Sources */ = { + 634CFCBFE3760F2A0288F1BF42B66FF9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_48098211678 /* Sources */ = { + 8E6FC06C82186DB3FA95E51EFE18711C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_704149935229 /* Standalone.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_50702349225 /* Sources */ = { + 910907240480D0AFBF32A79A4008D866 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_206432481076 /* ExtensionDelegate.swift in Sources */, - BF_138356261076 /* InterfaceController.swift in Sources */, - BF_830383951771 /* NotificationController.swift in Sources */, + D8E194DE99C1389B4335B7112DEA7DC4 /* ExtensionDelegate.swift in Sources */, + A6CCC432869EB6B8A65A89B565B57EA5 /* InterfaceController.swift in Sources */, + 49C46F18756F4E9EE9E1CC328F79A2AD /* NotificationController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_52511912046 /* Sources */ = { + A0301004CBF36C0004B23102202FA9FE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_901390118565 /* FrameworkFile.swift in Sources */, + C4F880A62908F7CD24C87CE5D67B0196 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_61868746249 /* Sources */ = { + A305A9C4673244353334E95DCDFD735D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_703054643820 /* MessagesViewController.swift in Sources */, + A4E000AF88BD17B9A2B08452C17C2EEF /* StaticLibrary.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_66231583718 /* Sources */ = { + AFF1863F9CDDD4DD0B0EB22A6AD9850A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_243071719122 /* FrameworkFile.swift in Sources */, + EBC3AA70BAD516864D119DDEEE2C436D /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_78312289991 /* Sources */ = { + D037068D88E7DAEB3A373602EE996609 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_360196406184 /* TestProjectTests.swift in Sources */, + F7E9F427669FE7710D0A19AA4E1156F4 /* TestProjectUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_82523211050 /* Sources */ = { + E32AAD525623BF5008484D641327F1AD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF_892119987440 /* AppDelegate.swift in Sources */, - BF_670499288392 /* Model.xcdatamodeld in Sources */, - BF_503484983186 /* MoreUnder.swift in Sources */, - BF_561304997165 /* Standalone.swift in Sources */, - BF_331192862207 /* ViewController.swift in Sources */, + 51FCB6F2D56B68E627A35C53729E423A /* XPC_Service.m in Sources */, + 7AF2CCC3F2ECDC1FE82B2C05BEF75B71 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_93515386520 /* Sources */ = { + E74227370CF6081A47B8C2AB02479899 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 68642C69AC9333487FC491E6FA98261E /* TestProjectTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E74DACDAB11D89D5B824405B81E48D89 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F16AD8A4E1A6E1189CE048C03CEA9469 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - TD_109724965966 /* PBXTargetDependency */ = { + 0F0F18C8C8E08CF4C25A4DA89DB09A3A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_472296042419 /* Framework_iOS */; - targetProxy = CIP_10972496596 /* PBXContainerItemProxy */; + target = C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */; + targetProxy = C3EE26A1AAD19418C160843CDB61D97D /* PBXContainerItemProxy */; }; - TD_193291182921 /* PBXTargetDependency */ = { + 10B5BED93CB8C9A5B7BB81E996C7F071 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_507023492251 /* App_watchOS Extension */; - targetProxy = CIP_19329118292 /* PBXContainerItemProxy */; + target = 9F21B9C99E75314E51854589C0A2D40C /* App_watchOS */; + targetProxy = 61EAE260C32C57D1ADCEAA01E33B62F0 /* PBXContainerItemProxy */; }; - TD_208010900457 /* PBXTargetDependency */ = { + 16156D2E07BFBB09D5921589B483FF23 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_825232110500 /* App_iOS */; - targetProxy = CIP_20801090045 /* PBXContainerItemProxy */; + target = 24B389B0959F4A6CB05BB732DABDFE40 /* iMessageApp */; + targetProxy = 0BF678D2C5D11E654050E6FD6AF1321C /* PBXContainerItemProxy */; }; - TD_235580504123 /* PBXTargetDependency */ = { + 3E978D446B3957A557629CD1DF47004B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_525119120469 /* Framework_macOS */; - targetProxy = CIP_23558050412 /* PBXContainerItemProxy */; + target = DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */; + targetProxy = 931421A32656354E62549752A08EDBF8 /* PBXContainerItemProxy */; }; - TD_288560876254 /* PBXTargetDependency */ = { + 3FFD524CC10F62CA07750D1026106CB3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_935153865209 /* iMessageApp */; - targetProxy = CIP_28856087625 /* PBXContainerItemProxy */; + target = FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */; + targetProxy = EEB2D30EB7369BDB638EBEEF136463C2 /* PBXContainerItemProxy */; }; - TD_317921131342 /* PBXTargetDependency */ = { + 5189C5E269DD98A187BF59169A4FC1D1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_618687462494 /* iMessageExtension */; - targetProxy = CIP_31792113134 /* PBXContainerItemProxy */; + target = FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */; + targetProxy = 29DD3982DDC8FB1816F3413908D59361 /* PBXContainerItemProxy */; }; - TD_337103940101 /* PBXTargetDependency */ = { + 586BE274C55FC00DE6BE62A0AAC127F6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_33710394010 /* PBXContainerItemProxy */; + target = CBCC05D0B8E90F960AA198981827667B /* App_watchOS Extension */; + targetProxy = 454E9650A00080FE30274224CC9F46C0 /* PBXContainerItemProxy */; }; - TD_629038784927 /* PBXTargetDependency */ = { + 632C4C9ABCE4E550CC5CC6F87B5C4DBD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_62903878492 /* PBXContainerItemProxy */; + target = F61DEA90F1B7331EE9B26BBA1F66D1F3 /* XPC Service */; + targetProxy = 9B58798122BFEA3C65A8FF0A3351860D /* PBXContainerItemProxy */; }; - TD_667455552356 /* PBXTargetDependency */ = { + 63D97355ECD5B9E4B835338653920BC1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_66745555235 /* PBXContainerItemProxy */; + target = C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */; + targetProxy = FF9930E567A8C8A64F553637C661978F /* PBXContainerItemProxy */; }; - TD_676191581124 /* PBXTargetDependency */ = { + 7E5A83C554576126BB5DB76070940A42 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_825232110500 /* App_iOS */; - targetProxy = CIP_67619158112 /* PBXContainerItemProxy */; + target = C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */; + targetProxy = 91B2DBDD3AE5AF1D532D18340182CF27 /* PBXContainerItemProxy */; }; - TD_721522128177 /* PBXTargetDependency */ = { + 8583B3541D71924D376A891CCAD90C80 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_72152212817 /* PBXContainerItemProxy */; + target = C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */; + targetProxy = 707E4E6909BBD1E09760167B4CFEC227 /* PBXContainerItemProxy */; }; - TD_743784992411 /* PBXTargetDependency */ = { + 85A9116EE91FAB1AA6CA20FD4203A941 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_376569054786 /* XPC Service */; - targetProxy = CIP_74378499241 /* PBXContainerItemProxy */; + target = DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */; + targetProxy = CC516AFC796533BF02DD6B96F8DD7E74 /* PBXContainerItemProxy */; }; - TD_747418473860 /* PBXTargetDependency */ = { + A835D5FBAD20741BCF95975E1CD63A7A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_472296042419 /* Framework_iOS */; - targetProxy = CIP_74741847386 /* PBXContainerItemProxy */; + target = DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */; + targetProxy = 09709070DE34AF9CD99E9E5EB9990FEA /* PBXContainerItemProxy */; }; - TD_784412347908 /* PBXTargetDependency */ = { + B7FA3A9932789DFBE8BEDD648C9424B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_78441234790 /* PBXContainerItemProxy */; + target = C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */; + targetProxy = E09571F16E5252817F36D382C4132D85 /* PBXContainerItemProxy */; }; - TD_824101787753 /* PBXTargetDependency */ = { + BCAEBFE2D144CD4E9F4042CB793B6FFB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_324671077936 /* App_watchOS */; - targetProxy = CIP_82410178775 /* PBXContainerItemProxy */; + target = 6805881B1B6A80ABD523DAF4AFA493E2 /* Framework_macOS */; + targetProxy = 322420B31CCE201E90F298BE48129574 /* PBXContainerItemProxy */; }; - TD_887143865471 /* PBXTargetDependency */ = { + D976477E0195A8FFD5043C8BBD4B67C4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_825232110500 /* App_iOS */; - targetProxy = CIP_88714386547 /* PBXContainerItemProxy */; + target = 8A0FE14A3A3815C1F26B447C6178089C /* iMessageExtension */; + targetProxy = DE00464172E7A41CC51991B9136AA5BD /* PBXContainerItemProxy */; }; - TD_957476409477 /* PBXTargetDependency */ = { + FA8E2412D27AAD48D0F75809A484D599 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_95747640947 /* PBXContainerItemProxy */; + target = C21579FB597F51FACE99F831124CEB70 /* StaticLibrary_ObjC */; + targetProxy = 5A941DAF3EECD0D974E9330E048ABAF1 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - VG_118219888726 /* LocalizedStoryboard.storyboard */ = { + 466B302E661DE3B3972203B31F4AFED4 /* Localizable.stringsdict */ = { isa = PBXVariantGroup; children = ( - FR_118219888726 /* Base */, - FR_500792082643 /* en */, + 6B9588F9AA980468B26837ADE36D0D2E /* Base */, + 2E871C49A75D636E1E87F8904C5BA3D9 /* en */, + ); + name = Localizable.stringsdict; + sourceTree = ""; + }; + 49A30AD670910672DABA8B736EECBAEB /* LocalizedStoryboard.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F56A7C74F4A75492F063A0A5BDBBF65C /* Base */, + DB194C9EF763551CE2D5131407E8CF1C /* en */, ); name = LocalizedStoryboard.storyboard; sourceTree = ""; }; - VG_201160695646 /* MainInterface.storyboard */ = { + 81F7E21FBB8DA98ECF0A51099CDAF2EE /* MainInterface.storyboard */ = { isa = PBXVariantGroup; children = ( - FR_201160695646 /* Base */, + 354650483D8F76CB15A0FB0A99D2657F /* Base */, ); name = MainInterface.storyboard; sourceTree = ""; }; - VG_256263906698 /* LaunchScreen.storyboard */ = { + 8EAFD105FB449C592C944D3003203AB5 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - FR_256263906698 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - VG_264279911176 /* Interface.storyboard */ = { - isa = PBXVariantGroup; - children = ( - FR_264279911176 /* Base */, - ); - name = Interface.storyboard; - sourceTree = ""; - }; - VG_473000061463 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - FR_473000061463 /* Base */, - FR_771029596306 /* en */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - VG_609193904586 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - FR_609193904586 /* Base */, + C8822458902508063262BA655921BA2F /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - VG_746876637628 /* Localizable.stringsdict */ = { + 9835A83F1E5D8E22848E171BA3C2DBA6 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - FR_746876637628 /* Base */, - FR_602633703434 /* en */, + 5FA5EA11F66D659044AB1FB5496EBF25 /* Base */, ); - name = Localizable.stringsdict; + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + C358B60A4C6D98BF3CD9B2C0C75FFC31 /* Interface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A59DAE760F32225493BDC5D378468EA9 /* Base */, + ); + name = Interface.storyboard; + sourceTree = ""; + }; + E005A2734C32783354AAB8546A12718B /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + F435E28C9379AF718A5D502BF3B2FB26 /* Base */, + EC5C7923578F1110EE9EE74505530753 /* en */, + ); + name = Localizable.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - BC_108053643718 /* 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"; - }; - BC_122527152613 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Test Release"; - }; - BC_128103534773 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", - ); - 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"; - }; - BC_128566007109 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Staging Release"; - }; - BC_129177384103 /* 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"; - }; - BC_167564962969 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - BC_210307580165 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Staging Release"; - }; - BC_210338877784 /* 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"; - }; - BC_213267780961 /* 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"; - }; - BC_240587562436 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Test Debug"; - }; - BC_242096321611 /* 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_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - VALIDATE_PRODUCT = YES; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = "Production Release"; - }; - BC_249152711841 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - BC_257261481133 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - BC_264139320591 /* Test Release */ = { + 017D658B4ABE46C5A30A44E1EB610EEC /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -1927,85 +1670,25 @@ SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Test Release"; + name = "Production Release"; }; - BC_264159662496 /* Test Release */ = { + 01DBD7FCC87C5676808C8DC642E5076D /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Test Release"; - }; - BC_265230327262 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + BUNDLE_LOADER = "$(TEST_HOST)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", ); - INFOPLIST_FILE = App_iOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.project.app; + 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"; }; - name = "Staging Release"; + name = "Test Release"; }; - BC_275347760107 /* 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"; - }; - BC_275754663824 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - BC_280651168996 /* Production Debug */ = { + 033BB6B0853606FB2D2FD4F80238B6C0 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -2024,34 +1707,76 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS"; SDKROOT = macosx; }; - name = "Production Debug"; + name = "Staging Release"; }; - BC_282993554784 /* Production Release */ = { + 042BBE336DA13DF962EA6C453B022AF8 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", + ); + 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"; + }; + 043A0C042785957178A6693CFA0E1AD6 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Test Debug"; + }; + 073C2C693117E1D34E1B0F985E54181E /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Staging Debug"; + }; + 07E1360852ED801B9A2C191311650CB6 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 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"; + INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS"; - PRODUCT_NAME = Framework; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS"; SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; }; name = "Production Release"; }; - BC_296138297674 /* Test Release */ = { + 096ECE14561204A143946060635175E2 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; @@ -2066,154 +1791,9 @@ SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; }; - name = "Test Release"; - }; - BC_301490151478 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - BC_309031681908 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; }; - BC_313103118526 /* 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"; - }; - BC_334821934458 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Production Release"; - }; - BC_351179072988 /* 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"; - }; - BC_355674198163 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - BC_368555321779 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Production Release"; - }; - BC_370290618113 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Production Debug"; - }; - BC_380703106572 /* 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"; - }; - BC_381577484690 /* Production Release */ = { + 0A20244EB4E72EC58117F028E72046EC /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -2235,9 +1815,721 @@ TARGETED_DEVICE_FAMILY = 4; VERSIONING_SYSTEM = "apple-generic"; }; + name = "Staging Release"; + }; + 17DD6C54D892A228DC61C020225C9051 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; name = "Production Release"; }; - BC_397339763951 /* Staging Debug */ = { + 17F6FF338B0EDFF7796A8F04E3F3800F /* 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"; + }; + 182E0CC8A3915AEB912F5D1291301A43 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); + INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; + }; + 1A086472EE7B5AD1BCC790833A32EEBD /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Test Debug"; + }; + 1B04852DE1BAC9963EC108C9CF616C68 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", + ); + 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"; + }; + 1D285F94CF59832C2BA027CD569DDAB7 /* 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"; + }; + 1D9EB22E5DBAB4FA60986D9F7D4EB36B /* 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"; + }; + 238AD5E15AEE443741AA30FC7DF9BE4E /* 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"; + }; + 239E8DC605456167C1F5A3E11E89E02E /* 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"; + }; + 2EABDD2A3CB1E85833E8A1555AE92380 /* 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"; + }; + 3B64F4C26A564FBA69A8B5DD22A9CF1E /* 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"; + }; + 3BE57E2A55CD16BC51F289949EC85F76 /* 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"; + }; + 3E086BCE5D760D61BB3D412C9F0B4BDA /* 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"; + }; + 41AE4D3B9E1B4B940169B84E3BA5CCE7 /* 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"; + }; + 42E41490B4F137D48214D74A60E82741 /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Staging Release"; + }; + 48C7C82163507BFDDBBE9640C56C4384 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + 4E69BB19B16E547D43AF93A25BCD9F31 /* 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"; + }; + 53FA2A6BC1E12907C7E04A1686CD2235 /* 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"; + }; + 56663C3D4D239DB7132EFC6F4BD6931F /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + 5720F6E9771684E5729A08D75426C874 /* 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"; + }; + 591C680E52370290108989EB469E5509 /* 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"; + }; + 5A1D3DA3365EDDAF6EC275BEF2A939B0 /* 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"; + }; + 5AA86BB667B6BB6A065CDC7A86358C06 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + 5E2F1BACE5D532159E4E4CDEA7781A53 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", + ); + 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"; + }; + 5F9AF0BD4959D01102D429D68A1AE409 /* 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"; + }; + 600D2124C2A4443FF163E6E3B501E909 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Production Debug"; + }; + 617BB41EB582FD2294AD3F0EF67FF86C /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Production Debug"; + }; + 65444C57D9A364444BA7003179D5061D /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + 676171EF49F08996E70CF35B0210B3EE /* 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"; + }; + 679FF6873FEB353F21917C19BCC838E8 /* 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"; + }; + 6E76891FB5D6528F7679C4029CEA9DDB /* 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"; + }; + 6FFE1C21D2525DBB6DFB640EA7DC613A /* 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"; + }; + 70725C98440FD53BB91443718AC11C49 /* 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"; + }; + 71D8747E9D932CC57F5C7689CDAB915E /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Staging Debug"; + }; + 76B45660690ECDC9D44E1D9957AF5029 /* 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"; + }; + 78064626756CECDA6038E7E6CF655FCD /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + 787DD7CC61878131127305CB1AB42E45 /* 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"; + }; + 7F42FA78F9209A1EA4BE36ECC88B48DA /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); + INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; + }; + 7F6F9A02354EC9131372E38141776CF3 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Production Debug"; + }; + 8605D350B1463319F76600AD82025190 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + 86078CF18D4E8E2A296357BBD43BB418 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -2297,135 +2589,7 @@ }; name = "Staging Debug"; }; - BC_424897564588 /* 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"; - }; - BC_437463937945 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - BC_439666751882 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Staging Debug"; - }; - BC_444705348320 /* 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"; - }; - BC_447998896881 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - BC_456712168038 /* 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"; - }; - BC_464603633927 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = "Test Release"; - }; - BC_467730755629 /* 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"; - }; - BC_470682595853 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Production Release"; - }; - BC_474716674004 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - BC_480688547948 /* Staging Debug */ = { + 860C0A667616D8C33213E17E6B7FC967 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -2446,140 +2610,36 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Staging Debug"; + name = "Staging Release"; }; - BC_488246438798 /* Production Debug */ = { + 88755377456A33C84C2CDA0C44A6A61A /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - BC_493052431451 /* 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"; - }; - BC_499325041919 /* 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"; - }; - BC_504862512837 /* 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"; - }; - BC_507219048168 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - BC_517306343059 /* 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"; + BUNDLE_LOADER = "$(TEST_HOST)"; 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; + 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; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; }; - name = "Staging Release"; + name = "Production Release"; }; - BC_525459892506 /* Production Debug */ = { + 8946521E677C9578763AF0CAA5650B6E /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; + 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"; + name = "Test Release"; }; - BC_530755208334 /* Test Release */ = { + 8A20B26D66C3C3E2B0C19F697723BF52 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -2602,43 +2662,7 @@ }; name = "Test Release"; }; - BC_530814251927 /* 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"; - }; - BC_533481109982 /* 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"; - }; - BC_563308786207 /* Staging Debug */ = { + 8A3DFEC561EA277BC662D7722D957AF7 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -2662,124 +2686,7 @@ }; name = "Staging Debug"; }; - BC_563702409464 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; - }; - BC_568886047790 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Production Debug"; - }; - BC_568928282286 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Test Debug"; - }; - BC_570828727916 /* 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"; - }; - BC_575374366235 /* 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_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - VALIDATE_PRODUCT = YES; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = "Test Release"; - }; - BC_592419322448 /* Production Release */ = { + 8D77D883600ADB89A783275CF554E4A3 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -2788,34 +2695,20 @@ SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Production Release"; + name = "Test Debug"; }; - BC_594849660073 /* Production Release */ = { + 8D88F6B294E0A440C7E8DCFCC8FD89C6 /* 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"; + INFOPLIST_FILE = IMessage/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS"; - PRODUCT_NAME = Framework; + PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp; SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; }; - name = "Production Release"; + name = "Test Release"; }; - BC_609023497374 /* Test Release */ = { + 8EB82130053C36429A3383113E7E4C52 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; @@ -2825,9 +2718,9 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Test Release"; + name = "Staging Release"; }; - BC_609604761299 /* Staging Release */ = { + 8EBAD5F0051E7CC4CB35D6D849C46F80 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; @@ -2836,289 +2729,9 @@ PRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService; SDKROOT = macosx; }; - name = "Staging Release"; - }; - BC_609753632568 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; }; - BC_612244244384 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Test Debug"; - }; - BC_622471558373 /* 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"; - }; - BC_627109222781 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; - }; - BC_629891546665 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = "Production Debug"; - }; - BC_634896623305 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Staging Debug"; - }; - BC_644737893954 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Staging Debug"; - }; - BC_645651856160 /* 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"; - }; - BC_655752097950 /* 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"; - }; - BC_667304541586 /* 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"; - }; - BC_669628489596 /* 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"; - }; - BC_685135820012 /* 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"; - }; - BC_697789525657 /* 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"; - }; - BC_702596407424 /* 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"; - }; - BC_704315531994 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - BC_705279564212 /* 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"; - }; - BC_707904794064 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; - }; - BC_709947688544 /* Production Debug */ = { + 9163A49EEE507A13BD6BB29DE77C5AEB /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -3177,7 +2790,38 @@ }; name = "Production Debug"; }; - BC_724654958001 /* Staging Debug */ = { + 919E11B8D5FA5EE79F9312E6467F574E /* 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"; + }; + 9450C1BF180480F99BCF85B483F6CB9A /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Production Release"; + }; + 94A3AAC4CEA168599D557CA3E04F4BDC /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -3188,7 +2832,170 @@ }; name = "Staging Debug"; }; - BC_730521266150 /* Staging Release */ = { + 953F56182B4014BC2431B0C3BC8C6116 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); + INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; + }; + 9846B0E883E03113D131FFC4E4BA1F08 /* 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"; + }; + 9945D662313B9CDAC19EE8047DF3F96F /* 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"; + }; + 9B26DE732F220BC292EADF89DE60A554 /* Test Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C64021D20FD55B89CE1AFE88AE7C1CDD /* 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 = 4.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = "Test Debug"; + }; + 9D3303E44AE7082447202EA72DDBE833 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); + INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; + }; + A23AD01C12E6042FBB38025556F802B9 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Production Release"; + }; + A245D8EE9B5EE2DC9F08D3E480476D6B /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -3240,11 +3047,65 @@ }; name = "Staging Release"; }; - BC_741359447852 /* Test Release */ = { + A28E48690DF1F007ADE74AF8232F9936 /* 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"; + }; + A3BBDD580918C4146F640B3D5BECDE3A /* 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"; + }; + A6191A82E89AAE95FF0927ADC4CED07C /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + A94D9A8E6B3EC8B43280005AA5CA08C5 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + AB6DE922A459F5FD497E4A88028D774F /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + AC0BADE62931604AA108798EB524D47A /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -3252,20 +3113,154 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", + "$(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-macOS"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS"; PRODUCT_NAME = Framework; - SDKROOT = macosx; + SDKROOT = iphoneos; SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Staging Release"; + }; + AE20EE3DA3CAF7CF656625BC1104E356 /* 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"; + }; + AEC12413C878641363A9F9D8159AFAFD /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Staging Release"; + }; + AF4710F4CCB14CED351633EBACE040EE /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Test Release"; + }; + B1E2C4D4695C5EF681BF34BD6414FFD9 /* 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"; + }; + B524E0A2A955DEAE9EA8A773C63AB9AC /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Test Release"; + }; + B5ED36F7268D18E542F85A14D09E1740 /* 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"; + }; + B6B5C9184CEE823626CCCC86A8CD9AB0 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + B7022F6F63AADF6396ED13F7B439FD4A /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + B84D4575BDB10CC7877B363EE9AB4333 /* 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"; }; - BC_749393271654 /* Test Debug */ = { + BAC461FFB8CD5E0FBEF317CF56AE0847 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Test Debug"; + }; + BEA623C6A5A8AA7DFF3972CFA7FDB1FF /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -3286,9 +3281,82 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; + name = "Production Release"; + }; + C1B80F9BE08D4FB9503CA748D889BCB6 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Staging Debug"; + }; + C715D4C7279C44607E66D74085D7E2C3 /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Test Release"; + }; + C964103E2697EFFCBB8E04FAD89BCB2A /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + CA1133BA3266746EA55DC6CA3BB15C79 /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + CF4A979E679D2D7B6180C42079630DF7 /* 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"; }; - BC_760168680599 /* Staging Release */ = { + D135C764212A868AB1BFA59D08477749 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3311,9 +3379,91 @@ TARGETED_DEVICE_FAMILY = 3; VERSIONING_SYSTEM = "apple-generic"; }; + name = "Production Release"; + }; + D30FF0A51CA7720140967225CEB93621 /* 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"; + }; + D517F3468BE1A7136FA1FCBBEF7555F1 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + D9FDA7C09DC2A6CD9C4249D09843E029 /* 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"; + }; + DC7B7968E87668181B3ECAB77307359B /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Production Debug"; + }; + E22E8833641D3779586C0B16FA32A016 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + E288B83C7EAA142895818E3148453206 /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; name = "Staging Release"; }; - BC_765441740976 /* Staging Release */ = { + E3CDCDB9EED4CB38950534D8D9E521B2 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3336,21 +3486,25 @@ SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Staging Release"; + name = "Staging Debug"; }; - BC_766399414659 /* Staging Debug */ = { + E6B9E89A82F37BBE7118A108CDD2FA96 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension; + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; }; - name = "Staging Debug"; + name = "Staging Release"; }; - BC_769258280401 /* Staging Debug */ = { + E86C0E6E6FD6A5052CFD159F134F7C0C /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -3365,156 +3519,10 @@ TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = App_iOS; }; - name = "Staging Debug"; - }; - BC_776042221288 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = "Staging Release"; - }; - BC_790711614758 /* 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"; - }; - BC_793714544511 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; name = "Test Release"; }; - BC_799591451484 /* Test Debug */ = { + EC28E440C15EE7F1FB7DB5DCE6730C35 /* 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 Debug"; - }; - BC_799916603316 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", - ); - 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"; - }; - BC_805283956103 /* 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"; - }; - BC_823301630526 /* 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"; - }; - BC_823840129404 /* 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"; - }; - BC_825545455794 /* 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"; - }; - BC_831819337335 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - BC_832100796021 /* Test Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FR_660690926982 /* config.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_ID_SUFFIX = .test; @@ -3546,34 +3554,37 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; 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_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; + VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; - name = "Test Debug"; + name = "Test Release"; }; - BC_835911551172 /* Test Debug */ = { + EF427E493E485ED823B46796B5706EE0 /* 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"; + }; + F554EE27D3B2F59E7560BC2EA81F0126 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3595,65 +3606,19 @@ TARGETED_DEVICE_FAMILY = 4; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Debug"; + name = "Production Debug"; }; - BC_851086512031 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Staging Release"; - }; - BC_864485046941 /* 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"; - }; - BC_866329197584 /* Test Debug */ = { + FD6B56D66F61D5D15F85BF3A793A4737 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy; SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; name = "Test Debug"; }; - BC_866352849045 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/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"; - }; - BC_879000441352 /* Staging Debug */ = { + FF1FD074D08FB642C47833A35CF9A077 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3676,273 +3641,292 @@ SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Staging Debug"; - }; - BC_906683798476 /* 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"; }; - BC_914036878229 /* Staging Release */ = { + FF20BE3E1E930A3CDD0440B465F82FD9 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS"; - SDKROOT = macosx; + 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_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; - name = "Staging Release"; + name = "Production Release"; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - CL_123503999387 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */ = { + 0AA719054B034D653457F3861CE722A9 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - BC_355674198163 /* Production Debug */, - BC_437463937945 /* Production Release */, - BC_769258280401 /* Staging Debug */, - BC_257261481133 /* Staging Release */, - BC_447998896881 /* Test Debug */, - BC_474716674004 /* Test Release */, + 53FA2A6BC1E12907C7E04A1686CD2235 /* Production Debug */, + D135C764212A868AB1BFA59D08477749 /* Production Release */, + 679FF6873FEB353F21917C19BCC838E8 /* Staging Debug */, + 676171EF49F08996E70CF35B0210B3EE /* Staging Release */, + 3E086BCE5D760D61BB3D412C9F0B4BDA /* Test Debug */, + 1D9EB22E5DBAB4FA60986D9F7D4EB36B /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - CL_324671077936 /* Build configuration list for PBXNativeTarget "App_watchOS" */ = { + 0D5965C1A1D5123D687DA32AC9B957F8 /* Build configuration list for PBXProject "Project" */ = { isa = XCConfigurationList; buildConfigurations = ( - BC_525459892506 /* Production Debug */, - BC_470682595853 /* Production Release */, - BC_634896623305 /* Staging Debug */, - BC_128566007109 /* Staging Release */, - BC_568928282286 /* Test Debug */, - BC_264159662496 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_376569054786 /* Build configuration list for PBXNativeTarget "XPC Service" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_213267780961 /* Production Debug */, - BC_906683798476 /* Production Release */, - BC_825545455794 /* Staging Debug */, - BC_609604761299 /* Staging Release */, - BC_667304541586 /* Test Debug */, - BC_823301630526 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_399755008402 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_629891546665 /* Production Debug */, - BC_592419322448 /* Production Release */, - BC_724654958001 /* Staging Debug */, - BC_776042221288 /* Staging Release */, - BC_866329197584 /* Test Debug */, - BC_464603633927 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_437179166843 /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_456712168038 /* Production Debug */, - BC_570828727916 /* Production Release */, - BC_424897564588 /* Staging Debug */, - BC_669628489596 /* Staging Release */, - BC_530814251927 /* Test Debug */, - BC_264139320591 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_438704538506 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_499325041919 /* Production Debug */, - BC_381577484690 /* Production Release */, - BC_563308786207 /* Staging Debug */, - BC_790711614758 /* Staging Release */, - BC_835911551172 /* Test Debug */, - BC_685135820012 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_445731917037 /* Build configuration list for PBXAggregateTarget "SuperTarget" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_370290618113 /* Production Debug */, - BC_334821934458 /* Production Release */, - BC_439666751882 /* Staging Debug */, - BC_851086512031 /* Staging Release */, - BC_612244244384 /* Test Debug */, - BC_122527152613 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_472296042419 /* Build configuration list for PBXNativeTarget "Framework_iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_622471558373 /* Production Debug */, - BC_594849660073 /* Production Release */, - BC_313103118526 /* Staging Debug */, - BC_517306343059 /* Staging Release */, - BC_351179072988 /* Test Debug */, - BC_210338877784 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_479264660374 /* Build configuration list for PBXLegacyTarget "Legacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_805283956103 /* Production Debug */, - BC_467730755629 /* Production Release */, - BC_444705348320 /* Staging Debug */, - BC_645651856160 /* Staging Release */, - BC_799591451484 /* Test Debug */, - BC_129177384103 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_480982116789 /* Build configuration list for PBXNativeTarget "App_macOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_280651168996 /* Production Debug */, - BC_627109222781 /* Production Release */, - BC_563702409464 /* Staging Debug */, - BC_914036878229 /* Staging Release */, - BC_866352849045 /* Test Debug */, - BC_707904794064 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_507023492251 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_504862512837 /* Production Debug */, - BC_702596407424 /* Production Release */, - BC_864485046941 /* Staging Debug */, - BC_697789525657 /* Staging Release */, - BC_823840129404 /* Test Debug */, - BC_296138297674 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_525119120469 /* Build configuration list for PBXNativeTarget "Framework_macOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_705279564212 /* Production Debug */, - BC_282993554784 /* Production Release */, - BC_879000441352 /* Staging Debug */, - BC_765441740976 /* Staging Release */, - BC_108053643718 /* Test Debug */, - BC_741359447852 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_618687462494 /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_488246438798 /* Production Debug */, - BC_831819337335 /* Production Release */, - BC_766399414659 /* Staging Debug */, - BC_167564962969 /* Staging Release */, - BC_309031681908 /* Test Debug */, - BC_609023497374 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_662315837182 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_275347760107 /* Production Debug */, - BC_493052431451 /* Production Release */, - BC_533481109982 /* Staging Debug */, - BC_760168680599 /* Staging Release */, - BC_655752097950 /* Test Debug */, - BC_380703106572 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_783122899910 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_568886047790 /* Production Debug */, - BC_368555321779 /* Production Release */, - BC_644737893954 /* Staging Debug */, - BC_210307580165 /* Staging Release */, - BC_240587562436 /* Test Debug */, - BC_793714544511 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_825232110500 /* Build configuration list for PBXNativeTarget "App_iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_799916603316 /* Production Debug */, - BC_128103534773 /* Production Release */, - BC_480688547948 /* Staging Debug */, - BC_265230327262 /* Staging Release */, - BC_749393271654 /* Test Debug */, - BC_530755208334 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CL_844877120535 /* Build configuration list for PBXProject "Project" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_709947688544 /* Production Debug */, - BC_242096321611 /* Production Release */, - BC_397339763951 /* Staging Debug */, - BC_730521266150 /* Staging Release */, - BC_832100796021 /* Test Debug */, - BC_575374366235 /* Test Release */, + 9163A49EEE507A13BD6BB29DE77C5AEB /* Production Debug */, + FF20BE3E1E930A3CDD0440B465F82FD9 /* Production Release */, + 86078CF18D4E8E2A296357BBD43BB418 /* Staging Debug */, + A245D8EE9B5EE2DC9F08D3E480476D6B /* Staging Release */, + 9B26DE732F220BC292EADF89DE60A554 /* Test Debug */, + EC28E440C15EE7F1FB7DB5DCE6730C35 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Production Debug"; }; - CL_935153865209 /* Build configuration list for PBXNativeTarget "iMessageApp" */ = { + 13FC8BD638A49F585CF46B85EF6E6E4E /* Build configuration list for PBXNativeTarget "App_watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - BC_507219048168 /* Production Debug */, - BC_609753632568 /* Production Release */, - BC_301490151478 /* Staging Debug */, - BC_275754663824 /* Staging Release */, - BC_704315531994 /* Test Debug */, - BC_249152711841 /* Test Release */, + 617BB41EB582FD2294AD3F0EF67FF86C /* Production Debug */, + 17DD6C54D892A228DC61C020225C9051 /* Production Release */, + C1B80F9BE08D4FB9503CA748D889BCB6 /* Staging Debug */, + AEC12413C878641363A9F9D8159AFAFD /* Staging Release */, + BAC461FFB8CD5E0FBEF317CF56AE0847 /* Test Debug */, + C715D4C7279C44607E66D74085D7E2C3 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 330B76D4702856DD55067456FD7A4F4A /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B6B5C9184CEE823626CCCC86A8CD9AB0 /* Production Debug */, + B7022F6F63AADF6396ED13F7B439FD4A /* Production Release */, + E22E8833641D3779586C0B16FA32A016 /* Staging Debug */, + 8EB82130053C36429A3383113E7E4C52 /* Staging Release */, + A94D9A8E6B3EC8B43280005AA5CA08C5 /* Test Debug */, + 78064626756CECDA6038E7E6CF655FCD /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 4DF366239AC6F6E9EE59EEA525319ABA /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 600D2124C2A4443FF163E6E3B501E909 /* Production Debug */, + 88755377456A33C84C2CDA0C44A6A61A /* Production Release */, + 71D8747E9D932CC57F5C7689CDAB915E /* Staging Debug */, + E6B9E89A82F37BBE7118A108CDD2FA96 /* Staging Release */, + 043A0C042785957178A6693CFA0E1AD6 /* Test Debug */, + 01DBD7FCC87C5676808C8DC642E5076D /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 526C1EB2E50CDBABCB448EE2FDF2E5D8 /* Build configuration list for PBXNativeTarget "XPC Service" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 76B45660690ECDC9D44E1D9957AF5029 /* Production Debug */, + 8EBAD5F0051E7CC4CB35D6D849C46F80 /* Production Release */, + 41AE4D3B9E1B4B940169B84E3BA5CCE7 /* Staging Debug */, + 3B64F4C26A564FBA69A8B5DD22A9CF1E /* Staging Release */, + CF4A979E679D2D7B6180C42079630DF7 /* Test Debug */, + 8946521E677C9578763AF0CAA5650B6E /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 59C3AA3AEA5802DA17DF9B42615D9B6B /* Build configuration list for PBXNativeTarget "iMessageApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A6191A82E89AAE95FF0927ADC4CED07C /* Production Debug */, + 48C7C82163507BFDDBBE9640C56C4384 /* Production Release */, + D517F3468BE1A7136FA1FCBBEF7555F1 /* Staging Debug */, + CA1133BA3266746EA55DC6CA3BB15C79 /* Staging Release */, + AB6DE922A459F5FD497E4A88028D774F /* Test Debug */, + 8D88F6B294E0A440C7E8DCFCC8FD89C6 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 5B1322FEBB7A746BD1BF9227D37A7421 /* Build configuration list for PBXNativeTarget "App_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1B04852DE1BAC9963EC108C9CF616C68 /* Production Debug */, + BEA623C6A5A8AA7DFF3972CFA7FDB1FF /* Production Release */, + 5E2F1BACE5D532159E4E4CDEA7781A53 /* Staging Debug */, + 860C0A667616D8C33213E17E6B7FC967 /* Staging Release */, + 042BBE336DA13DF962EA6C453B022AF8 /* Test Debug */, + 8A20B26D66C3C3E2B0C19F697723BF52 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 7066464807EABA4728B984B10A24E931 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7F6F9A02354EC9131372E38141776CF3 /* Production Debug */, + A23AD01C12E6042FBB38025556F802B9 /* Production Release */, + 94A3AAC4CEA168599D557CA3E04F4BDC /* Staging Debug */, + E288B83C7EAA142895818E3148453206 /* Staging Release */, + 8D77D883600ADB89A783275CF554E4A3 /* Test Debug */, + AF4710F4CCB14CED351633EBACE040EE /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 7523052A5C96494802A0431E05947F67 /* Build configuration list for PBXLegacyTarget "Legacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2EABDD2A3CB1E85833E8A1555AE92380 /* Production Debug */, + A28E48690DF1F007ADE74AF8232F9936 /* Production Release */, + 6FFE1C21D2525DBB6DFB640EA7DC613A /* Staging Debug */, + 6E76891FB5D6528F7679C4029CEA9DDB /* Staging Release */, + FD6B56D66F61D5D15F85BF3A793A4737 /* Test Debug */, + B1E2C4D4695C5EF681BF34BD6414FFD9 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 837376727FE2CF4AE46785F0E9561ED1 /* Build configuration list for PBXNativeTarget "App_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 182E0CC8A3915AEB912F5D1291301A43 /* Production Debug */, + 07E1360852ED801B9A2C191311650CB6 /* Production Release */, + 9D3303E44AE7082447202EA72DDBE833 /* Staging Debug */, + 033BB6B0853606FB2D2FD4F80238B6C0 /* Staging Release */, + 953F56182B4014BC2431B0C3BC8C6116 /* Test Debug */, + 7F42FA78F9209A1EA4BE36ECC88B48DA /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 933D4300D58AA7B25E208357C65F2AD3 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 56663C3D4D239DB7132EFC6F4BD6931F /* Production Debug */, + 8605D350B1463319F76600AD82025190 /* Production Release */, + C964103E2697EFFCBB8E04FAD89BCB2A /* Staging Debug */, + 65444C57D9A364444BA7003179D5061D /* Staging Release */, + 5AA86BB667B6BB6A065CDC7A86358C06 /* Test Debug */, + E86C0E6E6FD6A5052CFD159F134F7C0C /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + 9BA95DBD7B862EE1F43DC68338281D0E /* Build configuration list for PBXNativeTarget "Framework_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 591C680E52370290108989EB469E5509 /* Production Debug */, + FF1FD074D08FB642C47833A35CF9A077 /* Production Release */, + E3CDCDB9EED4CB38950534D8D9E521B2 /* Staging Debug */, + 5A1D3DA3365EDDAF6EC275BEF2A939B0 /* Staging Release */, + 17F6FF338B0EDFF7796A8F04E3F3800F /* Test Debug */, + 239E8DC605456167C1F5A3E11E89E02E /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + ABBCABD06AD7666C13DD9BAF0C16276E /* Build configuration list for PBXNativeTarget "Framework_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9945D662313B9CDAC19EE8047DF3F96F /* Production Debug */, + 5F9AF0BD4959D01102D429D68A1AE409 /* Production Release */, + 5720F6E9771684E5729A08D75426C874 /* Staging Debug */, + AC0BADE62931604AA108798EB524D47A /* Staging Release */, + 787DD7CC61878131127305CB1AB42E45 /* Test Debug */, + B84D4575BDB10CC7877B363EE9AB4333 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CCF68725DCD5EF7FD03872D0B98C32F0 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F554EE27D3B2F59E7560BC2EA81F0126 /* Production Debug */, + 919E11B8D5FA5EE79F9312E6467F574E /* Production Release */, + 8A3DFEC561EA277BC662D7722D957AF7 /* Staging Debug */, + 0A20244EB4E72EC58117F028E72046EC /* Staging Release */, + 9846B0E883E03113D131FFC4E4BA1F08 /* Test Debug */, + D9FDA7C09DC2A6CD9C4249D09843E029 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + DF19D3419A77EDFF6F8498EFC3E36048 /* Build configuration list for PBXAggregateTarget "SuperTarget" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DC7B7968E87668181B3ECAB77307359B /* Production Debug */, + 9450C1BF180480F99BCF85B483F6CB9A /* Production Release */, + 073C2C693117E1D34E1B0F985E54181E /* Staging Debug */, + 42E41490B4F137D48214D74A60E82741 /* Staging Release */, + 1A086472EE7B5AD1BCC790833A32EEBD /* Test Debug */, + B524E0A2A955DEAE9EA8A773C63AB9AC /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + F40A414D7A0A13368AC9FB64BA5C73AC /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE20EE3DA3CAF7CF656625BC1104E356 /* Production Debug */, + 017D658B4ABE46C5A30A44E1EB610EEC /* Production Release */, + B5ED36F7268D18E542F85A14D09E1740 /* Staging Debug */, + A3BBDD580918C4146F640B3D5BECDE3A /* Staging Release */, + 238AD5E15AEE443741AA30FC7DF9BE4E /* Test Debug */, + EF427E493E485ED823B46796B5706EE0 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + FC084246C395F08CB12677620BAF2399 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 70725C98440FD53BB91443718AC11C49 /* Production Debug */, + D30FF0A51CA7720140967225CEB93621 /* Production Release */, + 1D285F94CF59832C2BA027CD569DDAB7 /* Staging Debug */, + 3BE57E2A55CD16BC51F289949EC85F76 /* Staging Release */, + 096ECE14561204A143946060635175E2 /* Test Debug */, + 4E69BB19B16E547D43AF93A25BCD9F31 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; @@ -3950,19 +3934,19 @@ /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ - VG_229021855709 /* Model.xcdatamodeld */ = { + 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - FR_796781152159 /* Model 2.xcdatamodel */, - FR_263408310401 /* Model 3.xcdatamodel */, - FR_570918052822 /* Model.xcdatamodel */, + FBF4C9FD09B493401414CA2F3086041F /* Model 2.xcdatamodel */, + F04030C0892CAC78F4B4376F938018E3 /* Model 3.xcdatamodel */, + D99F14029800E2D9F2434C4B6D718A5E /* Model.xcdatamodel */, ); - currentVersion = FR_796781152159 /* Model 2.xcdatamodel */; + currentVersion = FBF4C9FD09B493401414CA2F3086041F /* Model 2.xcdatamodel */; path = Model.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; }; /* End XCVersionGroup section */ }; - rootObject = P_8448771205358 /* Project object */; + rootObject = 48BA824E9883B72747F77581255D9C94 /* Project object */; } diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme index 7ab45029..3859a09f 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -33,7 +33,7 @@ skipped = "NO"> @@ -43,7 +43,7 @@ skipped = "NO"> @@ -53,7 +53,7 @@ @@ -86,7 +86,7 @@ runnableDebuggingMode = "0"> @@ -115,7 +115,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme index e90239d7..d5d61020 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme index 7cd199b6..fa3f0ee7 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme @@ -14,7 +14,7 @@ @@ -32,7 +32,7 @@ buildForAnalyzing = "YES"> @@ -50,7 +50,7 @@ @@ -72,7 +72,7 @@ @@ -101,7 +101,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme index 5715467e..1e73621f 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/XcodeGenKitTests/GeneratorHelpers.swift b/Tests/XcodeGenKitTests/GeneratorHelpers.swift index 11157fca..f6a46761 100644 --- a/Tests/XcodeGenKitTests/GeneratorHelpers.swift +++ b/Tests/XcodeGenKitTests/GeneratorHelpers.swift @@ -2,7 +2,7 @@ import PathKit import ProjectSpec import Spectre import XcodeGenKit -import xcproj +import xcodeproj import XCTest import Yams @@ -32,11 +32,11 @@ extension PBXProj { let mainGroup = try getMainGroup() func validateGroup(_ group: PBXGroup) throws { - let hasDuplicatedChildren = group.children.count != Set(group.children).count + let hasDuplicatedChildren = group.childrenReferences.count != Set(group.childrenReferences).count if hasDuplicatedChildren { - throw failure("Group \"\(group.nameOrPath)\" has duplicated children:\n - \(group.children.sorted().joined(separator: "\n - "))") + throw failure("Group \"\(group.nameOrPath)\" has duplicated children:\n - \(group.childrenReferences.map { String(describing: $0) }.joined(separator: "\n - "))") } - for child in group.children { + for child in group.childrenReferences { if let group = objects.groups.getReference(child) { try validateGroup(group) } diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index b66e50b3..81df62d2 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -2,8 +2,9 @@ import PathKit import ProjectSpec import Spectre import XcodeGenKit -import xcproj +import xcodeproj import XCTest +import Basic class ProjectFixtureTests: XCTestCase { @@ -18,12 +19,12 @@ class ProjectFixtureTests: XCTestCase { $0.it("generates variant group") { guard let xcodeProject = xcodeProject else { return } - func getFileReferences(_ path: String) -> [ObjectReference] { - return xcodeProject.pbxproj.objects.fileReferences.objectReferences.filter { $0.object.path == path } + func getFileReferences(_ path: String) -> [PBXFileReference] { + return xcodeProject.pbxproj.objects.fileReferences.values.filter { $0.path == path } } func getVariableGroups(_ name: String?) -> [PBXVariantGroup] { - return xcodeProject.pbxproj.objects.variantGroups.referenceValues.filter { $0.name == name } + return xcodeProject.pbxproj.objects.variantGroups.values.filter { $0.name == name } } let resourceName = "LocalizedStoryboard.storyboard" @@ -35,13 +36,13 @@ class ProjectFixtureTests: XCTestCase { do { let refs = getFileReferences(baseResource) try expect(refs.count) == 1 - try expect(variableGroup.children.filter { $0 == refs.first?.reference }.count) == 1 + try expect(variableGroup.childrenReferences.filter { $0 == refs.first?.reference }.count) == 1 } do { let refs = getFileReferences(localizedResource) try expect(refs.count) == 1 - try expect(variableGroup.children.filter { $0 == refs.first?.reference }.count) == 1 + try expect(variableGroup.childrenReferences.filter { $0 == refs.first?.reference }.count) == 1 } } @@ -59,11 +60,12 @@ class ProjectFixtureTests: XCTestCase { } fileprivate func generateXcodeProject(specPath: Path, projectPath: Path, file: String = #file, line: Int = #line) throws -> XcodeProj { + let projectPath = AbsolutePath(projectPath.absolute().string) let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() let oldProject = try XcodeProj(path: projectPath) - let pbxProjPath = projectPath + XcodeProj.pbxprojPath(projectPath) + let pbxProjPath = Path(XcodeProj.pbxprojPath(projectPath).asString) let oldProjectString: String = try pbxProjPath.read() try xcodeProject.write(path: projectPath, override: true) let newProjectString: String = try pbxProjPath.read() @@ -71,7 +73,7 @@ fileprivate func generateXcodeProject(specPath: Path, projectPath: Path, file: S let newProject = try XcodeProj(path: projectPath) let stringDiff = newProjectString != oldProjectString if newProject != oldProject || stringDiff { - var message = "\(projectPath.string) has changed. If change is legitimate commit the change and run test again" + var message = "\(projectPath.asString) has changed. If change is legitimate commit the change and run test again" if stringDiff { message += ":\n\n\(pbxProjPath):\n\(prettyFirstDifferenceBetweenStrings(oldProjectString, newProjectString))" } diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 7e5e624d..ce7fb762 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -2,7 +2,7 @@ import PathKit import ProjectSpec import Spectre import XcodeGenKit -import xcproj +import xcodeproj import XCTest import Yams @@ -42,9 +42,9 @@ class ProjectGeneratorTests: XCTestCase { let project = Project(basePath: "", name: "test", targets: [framework], options: options) let pbxProj = try project.generatePbxProj() guard let target = pbxProj.objects.nativeTargets.first?.value, - let buildConfigList = target.buildConfigurationList, + let buildConfigList = target.buildConfigurationListReference, let buildConfigs = pbxProj.objects.configurationLists.getReference(buildConfigList), - let buildConfigReference = buildConfigs.buildConfigurations.first, + let buildConfigReference = buildConfigs.buildConfigurationsReferences.first, let buildConfig = pbxProj.objects.buildConfigurations.getReference(buildConfigReference) else { throw failure("Build Config not found") } @@ -55,7 +55,7 @@ class ProjectGeneratorTests: XCTestCase { let options = SpecOptions(settingPresets: .none) let project = Project(basePath: "", name: "test", targets: [framework], options: options) let pbxProj = try project.generatePbxProj() - let allSettings = pbxProj.objects.buildConfigurations.referenceValues.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted() + let allSettings = pbxProj.objects.buildConfigurations.values.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted() try expect(allSettings) == ["SETTING_2"] } @@ -92,7 +92,7 @@ class ProjectGeneratorTests: XCTestCase { let project = Project(basePath: "", name: "test", configs: [Config(name: "Aconfig"), Config(name: "Bconfig")], targets: [framework], options: options) let pbxProject = try project.generatePbxProj() - guard let projectConfigListReference = pbxProject.objects.projects.values.first?.buildConfigurationList, + guard let projectConfigListReference = pbxProject.objects.projects.values.first?.buildConfigurationListReference, let defaultConfigurationName = pbxProject.objects.configurationLists[projectConfigListReference]?.defaultConfigurationName else { throw failure("Default configuration name not found") @@ -109,7 +109,7 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates config defaults") { let project = Project(basePath: "", name: "test") let pbxProj = try project.generatePbxProj() - let configs = pbxProj.objects.buildConfigurations.referenceValues + let configs = pbxProj.objects.buildConfigurations.valueArray try expect(configs.count) == 2 try expect(configs).contains(name: "Debug") try expect(configs).contains(name: "Release") @@ -122,7 +122,7 @@ class ProjectGeneratorTests: XCTestCase { configs: [Config(name: "config1"), Config(name: "config2")] ) let pbxProj = try project.generatePbxProj() - let configs = pbxProj.objects.buildConfigurations.referenceValues + let configs = pbxProj.objects.buildConfigurations.valueArray try expect(configs.count) == 2 try expect(configs).contains(name: "config1") try expect(configs).contains(name: "config2") @@ -198,8 +198,8 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates aggregate targets") { let pbxProject = try project.generatePbxProj() - let nativeTargets = pbxProject.objects.nativeTargets.referenceValues - let aggregateTargets = pbxProject.objects.aggregateTargets.referenceValues + let nativeTargets = pbxProject.objects.nativeTargets.valueArray.sorted { $0.name < $1.name } + let aggregateTargets = pbxProject.objects.aggregateTargets.valueArray.sorted { $0.name < $1.name } try expect(nativeTargets.count) == 4 try expect(aggregateTargets.count) == 2 @@ -216,8 +216,7 @@ class ProjectGeneratorTests: XCTestCase { let target2 = nativeTargets.first { $0.name == "Other2" } try expect(target2?.dependencies.count) == 2 - let targetDependencies = pbxProject.objects.targetDependencies.referenceValues - try expect(targetDependencies.count) == 7 + try expect(pbxProject.objects.targetDependencies.count) == 7 } } } @@ -229,7 +228,7 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates targets") { let pbxProject = try project.generatePbxProj() - let nativeTargets = pbxProject.objects.nativeTargets.referenceValues + let nativeTargets = pbxProject.objects.nativeTargets.values try expect(nativeTargets.count) == 3 try expect(nativeTargets.contains { $0.name == app.name }).beTrue() try expect(nativeTargets.contains { $0.name == framework.name }).beTrue() @@ -246,7 +245,7 @@ class ProjectGeneratorTests: XCTestCase { let project = Project(basePath: "", name: "test", targets: [appTargetWithAttributes, framework, testTargetWithAttributes]) let pbxProject = try project.generatePbxProj() - guard let targetAttributes = pbxProject.objects.projects.referenceValues.first?.attributes["TargetAttributes"] as? [String: [String: Any]] else { + guard let targetAttributes = pbxProject.objects.projects.values.first?.attributes["TargetAttributes"] as? [PBXObjectReference: [String: Any]] else { throw failure("Couldn't find Project TargetAttributes") } @@ -258,7 +257,7 @@ class ProjectGeneratorTests: XCTestCase { throw failure("Couldn't find UITest Target") } - try expect(targetAttributes[uiTestTarget.reference]?["TestTargetID"] as? String) == appTarget.reference + //try expect(targetAttributes[uiTestTarget.reference]?["TestTargetID"] as? String) == appTarget.reference.value try expect(targetAttributes[uiTestTarget.reference]?["ProvisioningStyle"] as? String) == "Manual" try expect(targetAttributes[appTarget.reference]?["ProvisioningStyle"] as? String) == "Automatic" try expect(targetAttributes[appTarget.reference]?["DevelopmentTeam"] as? String) == "123" @@ -270,15 +269,15 @@ class ProjectGeneratorTests: XCTestCase { let pbxProject = try project.generatePbxProj() - guard let projectConfigListReference = pbxProject.objects.projects.values.first?.buildConfigurationList, - let projectConfigReference = pbxProject.objects.configurationLists[projectConfigListReference]?.buildConfigurations.first, + guard let projectConfigListReference = pbxProject.objects.projects.values.first?.buildConfigurationListReference, + let projectConfigReference = pbxProject.objects.configurationLists[projectConfigListReference]?.buildConfigurationsReferences.first, let projectConfig = pbxProject.objects.buildConfigurations[projectConfigReference] else { throw failure("Couldn't find Project config") } - guard let targetConfigListReference = pbxProject.objects.nativeTargets.referenceValues.first?.buildConfigurationList, - let targetConfigReference = pbxProject.objects.configurationLists[targetConfigListReference]?.buildConfigurations.first, + guard let targetConfigListReference = pbxProject.objects.nativeTargets.values.first?.buildConfigurationListReference, + let targetConfigReference = pbxProject.objects.configurationLists[targetConfigListReference]?.buildConfigurationsReferences.first, let targetConfig = pbxProject.objects.buildConfigurations[targetConfigReference] else { throw failure("Couldn't find Target config") @@ -296,8 +295,8 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates dependencies") { let pbxProject = try project.generatePbxProj() - let nativeTargets = pbxProject.objects.nativeTargets.objectReferences - let dependencies = pbxProject.objects.targetDependencies.objectReferences + let nativeTargets = pbxProject.objects.nativeTargets.values + let dependencies = pbxProject.objects.targetDependencies.valueArray.sorted { (try? $0.target())??.name ?? "" < (try? $1.target())??.name ?? "" } try expect(dependencies.count) == 2 let appTarget = nativeTargets.first { $0.object.name == app.name } let frameworkTarget = nativeTargets.first { $0.object.name == framework.name } @@ -543,20 +542,20 @@ class ProjectGeneratorTests: XCTestCase { let pbxProject = try project.generatePbxProj() for target in targets { - guard let nativeTarget = pbxProject.objects.nativeTargets.referenceValues.first(where: { $0.name == target.name }) else { + guard let nativeTarget = pbxProject.objects.nativeTargets.values.first(where: { $0.name == target.name }) else { throw failure("PBXNativeTarget for \(target) not found") } - let buildPhases = nativeTarget.buildPhases - let resourcesPhases = pbxProject.objects.resourcesBuildPhases.objectReferences.filter { buildPhases.contains($0.reference) } - let frameworkPhases = pbxProject.objects.frameworksBuildPhases.objectReferences.filter { buildPhases.contains($0.reference) } - let copyFilesPhases = pbxProject.objects.copyFilesBuildPhases.objectReferences.filter { buildPhases.contains($0.reference) } + let buildPhases = nativeTarget.buildPhasesReferences + let resourcesPhases = pbxProject.objects.resourcesBuildPhases.values.filter { buildPhases.contains($0.reference) } + let frameworkPhases = pbxProject.objects.frameworksBuildPhases.values.filter { buildPhases.contains($0.reference) } + let copyFilesPhases = pbxProject.objects.copyFilesBuildPhases.values.filter { buildPhases.contains($0.reference) } // ensure only the right resources are copies, no more, no less let expectedResourceFiles = expectedResourceFiles[target.name]! try expect(resourcesPhases.count) == (expectedResourceFiles.isEmpty ? 0 : 1) if !expectedResourceFiles.isEmpty { - let resourceFiles = resourcesPhases[0].object.files - .compactMap { pbxProject.objects.buildFiles[$0]?.fileRef.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } + let resourceFiles = resourcesPhases[0].fileReferences + .compactMap { pbxProject.objects.buildFiles[$0]?.fileReference.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } try expect(Set(resourceFiles)) == expectedResourceFiles } @@ -564,8 +563,8 @@ class ProjectGeneratorTests: XCTestCase { let expectedLinkedFiles = expectedLinkedFiles[target.name]! try expect(frameworkPhases.count) == (expectedLinkedFiles.isEmpty ? 0 : 1) if !expectedLinkedFiles.isEmpty { - let linkFrameworks = frameworkPhases[0].object.files - .compactMap { pbxProject.objects.buildFiles[$0]?.fileRef.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } + let linkFrameworks = frameworkPhases[0].fileReferences + .compactMap { pbxProject.objects.buildFiles[$0]?.fileReference.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } try expect(Set(linkFrameworks)) == expectedLinkedFiles } @@ -573,8 +572,8 @@ class ProjectGeneratorTests: XCTestCase { let expectedEmbeddedFrameworks = expectedEmbeddedFrameworks[target.name]! try expect(copyFilesPhases.count) == (expectedEmbeddedFrameworks.isEmpty ? 0 : 1) if !expectedEmbeddedFrameworks.isEmpty { - let copyFiles = copyFilesPhases[0].object.files - .compactMap { pbxProject.objects.buildFiles[$0]?.fileRef.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } + let copyFiles = copyFilesPhases[0].fileReferences + .compactMap { pbxProject.objects.buildFiles[$0]?.fileReference.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } try expect(Set(copyFiles)) == expectedEmbeddedFrameworks } } @@ -641,10 +640,10 @@ class ProjectGeneratorTests: XCTestCase { let pbxProj = try project.generatePbxProj() func buildSettings(for target: Target) throws -> BuildSettings { - guard let nativeTarget = pbxProj.objects.targets(named: target.name).first?.object, - let buildConfigList = nativeTarget.buildConfigurationList, + guard let nativeTarget = pbxProj.objects.targets(named: target.name).first, + let buildConfigList = nativeTarget.buildConfigurationListReference, let buildConfigs = pbxProj.objects.configurationLists.getReference(buildConfigList), - let buildConfigReference = buildConfigs.buildConfigurations.first, + let buildConfigReference = buildConfigs.buildConfigurationsReferences.first, let buildConfig = pbxProj.objects.buildConfigurations.getReference(buildConfigReference) else { throw failure("XCBuildConfiguration not found for Target \(target.name.quoted)") } @@ -699,16 +698,16 @@ class ProjectGeneratorTests: XCTestCase { let pbxProject = try project.generatePbxProj() func scriptBuildPhases(target: Target) throws -> [PBXShellScriptBuildPhase] { - guard let nativeTarget = pbxProject.objects.nativeTargets.referenceValues.first(where: { $0.name == target.name }) else { + guard let nativeTarget = pbxProject.objects.nativeTargets.values.first(where: { $0.name == target.name }) else { throw failure("PBXNativeTarget for \(target) not found") } - let buildPhases = nativeTarget.buildPhases - let scriptPhases = pbxProject.objects.shellScriptBuildPhases.objectReferences.filter({ buildPhases.contains($0.reference) }).map { $0.object } + let buildPhases = nativeTarget.buildPhasesReferences + let scriptPhases = pbxProject.objects.shellScriptBuildPhases.values.filter { buildPhases.contains($0.reference) } return scriptPhases } let expectedScriptPhase = PBXShellScriptBuildPhase( - files: [], + fileReferences: [], name: "Copy Swift Objective-C Interface Header", inputPaths: ["$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)"], outputPaths: ["$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)"], @@ -727,21 +726,18 @@ class ProjectGeneratorTests: XCTestCase { scriptSpec.targets[0].postbuildScripts = [BuildScript(script: .script("script2"))] let pbxProject = try scriptSpec.generatePbxProj() - guard let nativeTarget = pbxProject.objects.nativeTargets.referenceValues - .first(where: { $0.buildPhases.count >= 2 }) else { + guard let nativeTarget = pbxProject.objects.nativeTargets.values + .first(where: { $0.buildPhasesReferences.count >= 2 }) else { throw failure("Target with build phases not found") } - let buildPhases = nativeTarget.buildPhases + let buildPhases = nativeTarget.buildPhasesReferences - let scripts = pbxProject.objects.shellScriptBuildPhases.objectReferences - let script1 = scripts[0] - let script2 = scripts[1] + let scripts = pbxProject.objects.shellScriptBuildPhases.valueArray + let script1 = scripts.first { $0.shellScript == "script1" } + let script2 = scripts.first { $0.shellScript == "script2" } try expect(scripts.count) == 2 - try expect(buildPhases.first) == script1.reference - try expect(buildPhases.last) == script2.reference - - try expect(script1.object.shellScript) == "script1" - try expect(script2.object.shellScript) == "script2" + try expect(buildPhases.first) == script1?.reference + try expect(buildPhases.last) == script2?.reference } $0.it("generates targets with cylical dependencies") { @@ -783,7 +779,7 @@ class ProjectGeneratorTests: XCTestCase { ] let pbxProject = try scriptSpec.generatePbxProj() - let buildRules = pbxProject.objects.buildRules.referenceValues + let buildRules = pbxProject.objects.buildRules.values try expect(buildRules.count) == 2 let first = buildRules.first { $0.name == "My Rule" }! let second = buildRules.first { $0.name != "My Rule" }! @@ -825,8 +821,8 @@ class ProjectGeneratorTests: XCTestCase { schemes: [scheme] ) let xcodeProject = try project.generateXcodeProject() - guard let target = xcodeProject.pbxproj.objects.nativeTargets.objectReferences - .first(where: { $0.object.name == app.name }) else { + guard let target = xcodeProject.pbxproj.objects.nativeTargets.values + .first(where: { $0.name == app.name }) else { throw failure("Target not found") } guard let xcscheme = xcodeProject.sharedData?.schemes.first else { @@ -853,8 +849,8 @@ class ProjectGeneratorTests: XCTestCase { for buildableReference in buildableReferences { try expect(buildableReference.blueprintIdentifier) == target.reference - try expect(buildableReference.blueprintName) == target.object.name - try expect(buildableReference.buildableName) == "\(target.object.name).\(target.object.productType!.fileExtension!)" + try expect(buildableReference.blueprintName) == target.name + try expect(buildableReference.buildableName) == "\(target.name).\(target.productType!.fileExtension!)" } try expect(xcscheme.launchAction?.buildConfiguration) == "Debug" @@ -890,8 +886,8 @@ class ProjectGeneratorTests: XCTestCase { } try expect( - xcodeProject.pbxproj.objects.nativeTargets.objectReferences - .contains(where: { $0.object.name == app.name }) + xcodeProject.pbxproj.objects.nativeTargets.values + .contains(where: { $0.name == app.name }) ).beTrue() try expect(xcscheme.launchAction?.environmentVariables) == runVariables try expect(xcscheme.testAction?.environmentVariables).to.beNil() @@ -914,8 +910,8 @@ class ProjectGeneratorTests: XCTestCase { try expect(xcodeProject.sharedData?.schemes.count) == 2 - guard let nativeTarget = xcodeProject.pbxproj.objects.nativeTargets.objectReferences - .first(where: { $0.object.name == app.name }) else { + guard let nativeTarget = xcodeProject.pbxproj.objects.nativeTargets.values + .first(where: { $0.name == app.name }) else { throw failure("Target not found") } guard let xcscheme = xcodeProject.sharedData?.schemes @@ -925,6 +921,7 @@ class ProjectGeneratorTests: XCTestCase { guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { throw failure("Build Action entry not found") } + try expect(buildActionEntry.buildableReference.blueprintIdentifier) == nativeTarget.reference try expect(xcscheme.launchAction?.buildConfiguration) == "Test Debug" diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index b3994ca2..d2ff0cba 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -2,7 +2,7 @@ import PathKit import ProjectSpec import Spectre import XcodeGenKit -import xcproj +import xcodeproj import XCTest class ProjectSpecTests: XCTestCase { diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift index b382ab9c..83dc5554 100644 --- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift @@ -2,7 +2,7 @@ import PathKit import ProjectSpec import Spectre import XcodeGenKit -import xcproj +import xcodeproj import XCTest import Yams @@ -85,16 +85,18 @@ class SourceGeneratorTests: XCTestCase { let project = Project(basePath: directoryPath, name: "Test", targets: [target]) let pbxProj = try project.generatePbxProj() try pbxProj.expectFile(paths: ["Sources", "Bar.swift"], buildPhase: .sources) - let buildPhase = pbxProj.objects.copyFilesBuildPhases.referenceValues.first + let buildPhase = pbxProj.objects.copyFilesBuildPhases.values.first try expect(buildPhase?.dstSubfolderSpec) == .frameworks let fileReference = pbxProj.getFileReference( paths: ["Sources", "Foo.framework"], names: ["Sources", "Foo.framework"] - )?.reference ?? "" - let buildFile = pbxProj.objects.buildFiles.objectReferences - .first(where: { $0.object.fileRef == fileReference })?.reference ?? "" - try expect(buildPhase?.files.count) == 1 - try expect(buildPhase?.files.contains(buildFile)) == true + )?.reference + guard let buildFile = pbxProj.objects.buildFiles.valueArray + .first(where: { $0.fileReference == fileReference })?.reference else { + throw failure("Cant find build file") + } + try expect(buildPhase?.fileReferences.count) == 1 + try expect(buildPhase?.fileReferences.contains(buildFile)) == true } $0.it("generates core data models") { @@ -119,7 +121,7 @@ class SourceGeneratorTests: XCTestCase { throw failure("Couldn't find version group") } try expect(versionGroup.currentVersion) == fileReference.key - try expect(versionGroup.children.count) == 3 + try expect(versionGroup.childrenReferences.count) == 3 try expect(versionGroup.path) == "model.xcdatamodeld" try expect(fileReference.value.path) == "model2.xcdatamodel" } @@ -462,7 +464,7 @@ class SourceGeneratorTests: XCTestCase { .first(where: { $0.1.buildPhase == BuildPhase.sources })! .value - try expect(sourcesBuildPhase.files.count) == 1 + try expect(sourcesBuildPhase.fileReferences.count) == 1 } $0.it("derived directories are sorted last") { @@ -480,7 +482,7 @@ class SourceGeneratorTests: XCTestCase { let project = Project(basePath: directoryPath, name: "Test", targets: [target]) let pbxProj = try project.generatePbxProj() - let groups = try pbxProj.getMainGroup().children.compactMap { pbxProj.objects.getFileElement(reference: $0)?.nameOrPath } + let groups = try pbxProj.getMainGroup().childrenReferences.compactMap { pbxProj.objects.getFileElement(reference: $0)?.nameOrPath } try expect(groups) == ["A", "P", "S", "Frameworks", "Products"] } @@ -503,8 +505,9 @@ class SourceGeneratorTests: XCTestCase { let project = Project(basePath: directoryPath, name: "Test", targets: [target]) let pbxProj = try project.generatePbxProj() - let group = pbxProj.objects.group(named: "Sources", inGroup: try pbxProj.getMainGroup())!.object - let names = group.children.compactMap { pbxProj.objects.getFileElement(reference: $0)?.nameOrPath } + let mainGroup = try pbxProj.getMainGroup() + let group = mainGroup.childrenReferences.compactMap { pbxProj.objects.groups[$0]}.first { $0.nameOrPath == "Sources" }! + let names = group.childrenReferences.compactMap { pbxProj.objects.getFileElement(reference: $0)?.nameOrPath } try expect(names) == [ "1file.a", "10file.a", @@ -532,10 +535,10 @@ extension PBXProj { } if let buildPhase = buildPhase { - let buildFile = objects.buildFiles.objectReferences - .first(where: { $0.object.fileRef == fileReference.reference }) + let buildFile = objects.buildFiles.values + .first(where: { $0.fileReference == fileReference.reference }) let actualBuildPhase = buildFile - .flatMap { buildFile in objects.buildPhases.referenceValues.first { $0.files.contains(buildFile.reference) } }?.buildPhase + .flatMap { buildFile in objects.buildPhases.values.first { $0.fileReferences.contains(buildFile.reference) } }?.buildPhase var error: String? if let buildPhase = buildPhase.buildPhase { @@ -563,9 +566,9 @@ extension PBXProj { } } - func getFileReference(paths: [String], names: [String], file: String = #file, line: Int = #line) -> ObjectReference? { + func getFileReference(paths: [String], names: [String], file: String = #file, line: Int = #line) -> PBXFileReference? { guard let project = objects.projects.first?.value else { return nil } - guard let mainGroup = objects.groups.getReference(project.mainGroup) else { return nil } + guard let mainGroup = objects.groups.getReference(project.mainGroupReference) else { return nil } return getFileReference(group: mainGroup, paths: paths, names: names) } @@ -574,13 +577,13 @@ extension PBXProj { guard let project = objects.projects.first?.value else { throw failure("Couldn't find project", file: file, line: line) } - guard let mainGroup = objects.groups.getReference(project.mainGroup) else { + guard let mainGroup = objects.groups.getReference(project.mainGroupReference) else { throw failure("Couldn't find main group", file: file, line: line) } return mainGroup } - private func getFileReference(group: PBXGroup, paths: [String], names: [String]) -> ObjectReference? { + private func getFileReference(group: PBXGroup, paths: [String], names: [String]) -> PBXFileReference? { guard !paths.isEmpty else { return nil } let path = paths.first! @@ -588,16 +591,10 @@ extension PBXProj { let restOfPath = Array(paths.dropFirst()) let restOfName = Array(names.dropFirst()) if restOfPath.isEmpty { - let fileReferences: [ObjectReference] = group.children.compactMap { reference in - if let fileReference = self.objects.fileReferences.getReference(reference) { - return ObjectReference(reference: reference, object: fileReference) - } else { - return nil - } - } - return fileReferences.first { $0.object.path == path && $0.object.nameOrPath == name } + let fileReferences: [PBXFileReference] = group.childrenReferences.compactMap { self.objects.fileReferences.getReference($0) } + return fileReferences.first { $0.path == path && $0.nameOrPath == name } } else { - let groups = group.children.compactMap { self.objects.groups.getReference($0) } + let groups = group.childrenReferences.compactMap { self.objects.groups.getReference($0) } guard let group = groups.first(where: { $0.path == path && $0.nameOrPath == name }) else { return nil } return getFileReference(group: group, paths: restOfPath, names: restOfName) } diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index a6d47476..8fc9e702 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -3,7 +3,7 @@ import PathKit import ProjectSpec import Spectre import XcodeGenKit -import xcproj +import xcodeproj import XCTest class SpecLoadingTests: XCTestCase { diff --git a/Tests/XcodeGenKitTests/TestHelpers.swift b/Tests/XcodeGenKitTests/TestHelpers.swift index 49b07818..54a7b700 100644 --- a/Tests/XcodeGenKitTests/TestHelpers.swift +++ b/Tests/XcodeGenKitTests/TestHelpers.swift @@ -2,7 +2,7 @@ import Foundation import PathKit import ProjectSpec import Spectre -import xcproj +import xcodeproj import XCTest let fixturePath = Path(#file).parent().parent() + "Fixtures" From 84f1c656323ed3cf3830ff46a1eee66fdffa7552 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 25 Sep 2018 21:11:04 +1000 Subject: [PATCH 03/77] update to xcodeproj 6 --- Package.resolved | 6 +- Package.swift | 2 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 279 +++++++++--------- Sources/XcodeGenKit/ProjectGenerator.swift | 6 +- Sources/XcodeGenKit/SourceGenerator.swift | 76 ++--- Sources/XcodeGenKit/XCProjExtensions.swift | 31 +- .../Project.xcodeproj/project.pbxproj | 39 ++- .../xcshareddata/xcschemes/App_iOS.xcscheme | 36 +-- .../xcschemes/App_watchOS.xcscheme | 8 +- .../xcshareddata/xcschemes/Framework.xcscheme | 10 +- .../xcschemes/iMessageApp.xcscheme | 8 +- Tests/XcodeGenKitTests/GeneratorHelpers.swift | 8 +- .../ProjectFixtureTests.swift | 8 +- .../ProjectGeneratorTests.swift | 126 ++++---- .../SourceGeneratorTests.swift | 52 ++-- 15 files changed, 326 insertions(+), 369 deletions(-) diff --git a/Package.resolved b/Package.resolved index eed901f3..0eb910a2 100644 --- a/Package.resolved +++ b/Package.resolved @@ -68,9 +68,9 @@ "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": "master", - "revision": "f7f497b00e41dae704815ecebfd030b85f82c240", - "version": null + "branch": null, + "revision": "1314329687682864119ecc03c73a413dfc24ade0", + "version": "6.0.1" } }, { diff --git a/Package.swift b/Package.swift index 93e4c9d5..5ff3c502 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", .branchItem("master")), + .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.0.0"), ], targets: [ .target(name: "XcodeGen", dependencies: [ diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 962bc445..5ec2ff6e 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -13,11 +13,10 @@ public class PBXProjGenerator { var targetObjects: [String: PBXTarget] = [:] var targetAggregateObjects: [String: PBXAggregateTarget] = [:] - var targetBuildFiles: [String: PBXBuildFile] = [:] - var targetFileReferences: [String: PBXObjectReference] = [:] + var targetFileReferences: [String: PBXFileReference] = [:] - var carthageFrameworksByPlatform: [String: Set] = [:] - var frameworkFiles: [PBXObjectReference] = [] + var carthageFrameworksByPlatform: [String: Set] = [:] + var frameworkFiles: [PBXFileElement] = [] var generated = false @@ -27,20 +26,20 @@ public class PBXProjGenerator { public init(project: Project) { self.project = project - pbxProj = PBXProj(objectVersion: 46) + pbxProj = PBXProj(rootObject: nil, objectVersion: 46) sourceGenerator = SourceGenerator(project: project) { [unowned self] id, object in _ = self.addObject(id: id, object) } } func addObject(id: String, _ object: T) -> T { -// let reference = pbxProj.objects.generateReference(object, id) - pbxProj.objects.addObject(object) +// let reference = pbxProj.generateReference(object, id) + pbxProj.add(object: object) return object } func createObject(id: String, _ object: T) -> T { - pbxProj.objects.addObject(object) + pbxProj.add(object: object) return object } @@ -56,25 +55,27 @@ public class PBXProjGenerator { let buildConfigs: [XCBuildConfiguration] = project.configs.map { config in let buildSettings = project.getProjectBuildSettings(config: config) - var baseConfigurationReference: PBXObjectReference? - if let configPath = project.configFiles[config.name] { - baseConfigurationReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) + var baseConfiguration: PBXFileReference? + if let configPath = project.configFiles[config.name], + let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference { + baseConfiguration = fileReference } - return createObject( + let buildConfig = createObject( id: config.name, XCBuildConfiguration( name: config.name, - baseConfigurationReference: baseConfigurationReference, buildSettings: buildSettings ) ) + buildConfig.baseConfiguration = baseConfiguration + return buildConfig } let configName = project.options.defaultConfig ?? buildConfigs.first?.name ?? "" let buildConfigList = createObject( id: project.name, XCConfigurationList( - buildConfigurationsReferences: buildConfigs.map { $0.reference }, + buildConfigurations: buildConfigs, defaultConfigurationName: configName ) ) @@ -84,7 +85,7 @@ public class PBXProjGenerator { let mainGroup = createObject( id: "Project", PBXGroup( - childrenReferences: [], + children: [], sourceTree: .group, usesTabs: project.options.usesTabs, indentWidth: project.options.indentWidth, @@ -96,14 +97,14 @@ public class PBXProjGenerator { id: project.name, PBXProject( name: project.name, - buildConfigurationListReference: buildConfigList.reference, + buildConfigurationList: buildConfigList, compatibilityVersion: "Xcode 3.2", - mainGroupReference: mainGroup.reference, + mainGroup: mainGroup, developmentRegion: project.options.developmentLanguage ?? "en" ) ) - pbxProj.rootObjectReference = pbxProject.reference + pbxProj.rootObject = pbxProject for target in project.targets { let targetObject: PBXTarget @@ -114,10 +115,11 @@ public class PBXProjGenerator { buildToolPath: target.legacy?.toolPath, buildArgumentsString: target.legacy?.arguments, passBuildSettingsInEnvironment: target.legacy?.passSettings ?? false, - buildWorkingDirectory: target.legacy?.workingDirectory + buildWorkingDirectory: target.legacy?.workingDirectory, + buildPhases: [] ) } else { - targetObject = PBXNativeTarget(name: target.name) + targetObject = PBXNativeTarget(name: target.name, buildPhases: []) } targetObjects[target.name] = createObject(id: target.name, targetObject) @@ -143,11 +145,7 @@ public class PBXProjGenerator { ) ) - targetFileReferences[target.name] = fileReference.reference - targetBuildFiles[target.name] = createObject( - id: "legacy target build file" + target.name, - PBXBuildFile(fileReference: fileReference.reference) - ) + targetFileReferences[target.name] = fileReference } } @@ -169,7 +167,7 @@ public class PBXProjGenerator { let productGroup = createObject( id: "Products", PBXGroup( - childrenReferences: Array(targetFileReferences.values), + children: targetFileReferences.valueArray, sourceTree: .group, name: "Products" ) @@ -178,36 +176,34 @@ public class PBXProjGenerator { if !carthageFrameworksByPlatform.isEmpty { var platforms: [PBXGroup] = [] - var platformReferences: [PBXObjectReference] = [] - for (platform, fileReferences) in carthageFrameworksByPlatform { + for (platform, files) in carthageFrameworksByPlatform { let platformGroup: PBXGroup = createObject( id: "Carthage" + platform, PBXGroup( - childrenReferences: fileReferences.sorted(), + children: files.sorted { $0.nameOrPath < $1.nameOrPath }, sourceTree: .group, path: platform ) ) - platformReferences.append(platformGroup.reference) platforms.append(platformGroup) } let carthageGroup = createObject( id: "Carthage", PBXGroup( - childrenReferences: platformReferences.sorted(), + children: platforms, sourceTree: .group, name: "Carthage", path: carthageBuildPath ) ) - frameworkFiles.append(carthageGroup.reference) + frameworkFiles.append(carthageGroup) } if !frameworkFiles.isEmpty { let group = createObject( id: "Frameworks", PBXGroup( - childrenReferences: frameworkFiles, + children: frameworkFiles, sourceTree: .group, name: "Frameworks" ) @@ -215,27 +211,25 @@ public class PBXProjGenerator { derivedGroups.append(group) } - mainGroup.childrenReferences = Array(sourceGenerator.rootGroups) + mainGroup.children = Array(sourceGenerator.rootGroups) sortGroups(group: mainGroup) // add derived groups at the end derivedGroups.forEach(sortGroups) - mainGroup.childrenReferences += derivedGroups + mainGroup.children += derivedGroups .sorted { $0.nameOrPath.localizedStandardCompare($1.nameOrPath) == .orderedAscending } - .map { $0.reference } + .map { $0 } let projectAttributes: [String: Any] = ["LastUpgradeCheck": project.xcodeVersion] .merged(project.attributes) - .merged(generateTargetAttributes() ?? [:]) let knownRegions = sourceGenerator.knownRegions.sorted() - pbxProject.object.knownRegions = knownRegions.isEmpty ? ["en"] : knownRegions + pbxProject.knownRegions = knownRegions.isEmpty ? ["en"] : knownRegions let allTargets: [PBXTarget] = Array(targetObjects.values) + Array(targetAggregateObjects.values) - pbxProject.object.targets = allTargets + pbxProject.targets = allTargets .sorted { $0.name < $1.name } - .map { $0.reference } pbxProject.attributes = projectAttributes - + pbxProject.targetAttributes = generateTargetAttributes() return pbxProj } @@ -247,42 +241,42 @@ public class PBXProjGenerator { let buildSettings = project.getBuildSettings(settings: target.settings, config: config) - var baseConfigurationReference: PBXObjectReference? + var baseConfiguration: PBXFileReference? if let configPath = target.configFiles[config.name] { - baseConfigurationReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) + baseConfiguration = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference } let buildConfig = XCBuildConfiguration( name: config.name, - baseConfigurationReference: baseConfigurationReference, + baseConfiguration: baseConfiguration, buildSettings: buildSettings ) return createObject(id: config.name + target.name, buildConfig) } - let dependencies: [PBXObjectReference] = target.targets.map { generateTargetDependency(from: target.name, to: $0).reference } + let dependencies = target.targets.map { generateTargetDependency(from: target.name, to: $0) } let buildConfigList = createObject(id: target.name, XCConfigurationList( - buildConfigurationsReferences: configs.map { $0.reference }, + buildConfigurations: configs, defaultConfigurationName: "" )) - var buildPhases: [PBXObjectReference] = [] + var buildPhases: [PBXBuildPhase] = [] buildPhases += try target.buildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) } - aggregateTarget.buildPhasesReferences = buildPhases - aggregateTarget.buildConfigurationListReference = buildConfigList.reference - aggregateTarget.dependenciesReferences = dependencies + aggregateTarget.buildPhases = buildPhases + aggregateTarget.buildConfigurationList = buildConfigList + aggregateTarget.dependencies = dependencies } func generateTargetDependency(from: String, to target: String) -> PBXTargetDependency { - guard let targetReference = targetObjects[target]?.reference ?? targetAggregateObjects[target]?.reference else { + guard let targetObject = targetObjects[target] ?? targetAggregateObjects[target] else { fatalError("target not found") } let targetProxy = createObject( id: "\(from)-\(target)", PBXContainerItemProxy( - containerPortalReference: pbxProj.rootObjectReference!, - remoteGlobalIDReference: targetReference, + containerPortal: pbxProj.rootObject!, + remoteGlobalID: targetObject, proxyType: .nativeTarget, remoteInfo: target ) @@ -291,14 +285,14 @@ public class PBXProjGenerator { let targetDependency = createObject( id: "\(from)-\(target)", PBXTargetDependency( - targetReference: targetReference, - targetProxyReference: targetProxy.reference + target: targetObject, + targetProxy: targetProxy ) ) return targetDependency } - func generateBuildScript(targetName: String, buildScript: BuildScript) throws -> PBXObjectReference { + func generateBuildScript(targetName: String, buildScript: BuildScript) throws -> PBXShellScriptBuildPhase { let shellScript: String switch buildScript.script { @@ -309,47 +303,43 @@ public class PBXProjGenerator { } let shellScriptPhase = PBXShellScriptBuildPhase( - fileReferences: [], name: buildScript.name ?? "Run Script", inputPaths: buildScript.inputFiles, outputPaths: buildScript.outputFiles, shellPath: buildScript.shell ?? "/bin/sh", - shellScript: shellScript + shellScript: shellScript, + runOnlyForDeploymentPostprocessing: buildScript.runOnlyWhenInstalling, + showEnvVarsInLog: buildScript.showEnvVars ) - shellScriptPhase.runOnlyForDeploymentPostprocessing = buildScript.runOnlyWhenInstalling - shellScriptPhase.showEnvVarsInLog = buildScript.showEnvVars - return createObject(id: String(describing: buildScript.name) + shellScript + targetName, shellScriptPhase).reference + return createObject(id: String(describing: buildScript.name) + shellScript + targetName, shellScriptPhase) } - func generateTargetAttributes() -> [String: Any]? { + func generateTargetAttributes() -> [PBXTarget: [String: Any]] { - var targetAttributes: [PBXObjectReference: [String: Any]] = [:] + var targetAttributes: [PBXTarget: [String: Any]] = [:] - let uiTestTargets = pbxProj.objects.nativeTargets.values.filter { $0.productType == .uiTestBundle } + let uiTestTargets = pbxProj.nativeTargets.filter { $0.productType == .uiTestBundle } for uiTestTarget in uiTestTargets { // look up TEST_TARGET_NAME build setting func testTargetName(_ target: PBXTarget) -> String? { - guard let configurationList = target.buildConfigurationListReference else { return nil } - guard let buildConfigurationReferences = self.pbxProj.objects.configurationLists[configurationList]?.buildConfigurationsReferences else { return nil } + guard let buildConfigurations = target.buildConfigurationList?.buildConfigurations else { return nil } - let configs = buildConfigurationReferences - .compactMap { ref in self.pbxProj.objects.buildConfigurations[ref] } - - return configs + return buildConfigurations .compactMap { $0.buildSettings["TEST_TARGET_NAME"] as? String } .first } guard let name = testTargetName(uiTestTarget) else { continue } - guard let target = self.pbxProj.objects.targets(named: name).first else { continue } + guard let target = self.pbxProj.targets(named: name).first else { continue } - targetAttributes[uiTestTarget.reference, default: [:]].merge(["TestTargetID": target.reference]) + // FIX: Can't set in xcproj 5.0+ + //targetAttributes[uiTestTarget, default: [:]].merge(["TestTargetID": target.reference]) } - func generateTargetAttributes(_ target: ProjectTarget, targetReference: PBXObjectReference) { + func generateTargetAttributes(_ target: ProjectTarget, pbxTarget: PBXTarget) { if !target.attributes.isEmpty { - targetAttributes[targetReference, default: [:]].merge(target.attributes) + targetAttributes[pbxTarget, default: [:]].merge(target.attributes) } func getSingleBuildSetting(_ setting: String) -> String? { @@ -366,7 +356,7 @@ public class PBXProjGenerator { func setTargetAttribute(attribute: String, buildSetting: String) { if let setting = getSingleBuildSetting(buildSetting) { - targetAttributes[targetReference, default: [:]].merge([attribute: setting]) + targetAttributes[pbxTarget, default: [:]].merge([attribute: setting]) } } @@ -375,26 +365,25 @@ public class PBXProjGenerator { } for target in project.aggregateTargets { - guard let targetReference = targetAggregateObjects[target.name]?.reference else { + guard let pbxTarget = targetAggregateObjects[target.name] else { continue } - generateTargetAttributes(target, targetReference: targetReference) + generateTargetAttributes(target, pbxTarget: pbxTarget) } for target in project.targets { - guard let targetReference = targetObjects[target.name]?.reference else { + guard let pbxTarget = targetObjects[target.name] else { continue } - generateTargetAttributes(target, targetReference: targetReference) + generateTargetAttributes(target, pbxTarget: pbxTarget) } - return targetAttributes.isEmpty ? nil : ["TargetAttributes": targetAttributes] + return targetAttributes } func sortGroups(group: PBXGroup) { // sort children - let children = group.childrenReferences - .compactMap { pbxProj.objects.getFileElement(reference: $0) } + let children = group.children .sorted { child1, child2 in let sortOrder1 = child1.getSortOrder(groupSortPosition: project.options.groupSortPosition) let sortOrder2 = child2.getSortOrder(groupSortPosition: project.options.groupSortPosition) @@ -405,10 +394,10 @@ public class PBXProjGenerator { return sortOrder1 < sortOrder2 } } - group.childrenReferences = children.map { $0.reference }.filter { $0 != group.reference } + group.children = children.filter { $0 != group } // sort sub groups - let childGroups = group.childrenReferences.compactMap { pbxProj.objects.groups[$0] } + let childGroups = group.children.compactMap { $0 as? PBXGroup } childGroups.forEach(sortGroups) } @@ -423,14 +412,14 @@ public class PBXProjGenerator { var searchForPlist = true var anyDependencyRequiresObjCLinking = false - var dependencies: [PBXObjectReference] = [] - var targetFrameworkBuildFiles: [PBXObjectReference] = [] + var dependencies: [PBXTargetDependency] = [] + var targetFrameworkBuildFiles: [PBXBuildFile] = [] var frameworkBuildPaths = Set() - var copyFilesBuildPhasesFiles: [TargetSource.BuildPhase.CopyFilesSettings: [PBXObjectReference]] = [:] - var copyFrameworksReferences: [PBXObjectReference] = [] - var copyResourcesReferences: [PBXObjectReference] = [] - var copyWatchReferences: [PBXObjectReference] = [] - var extensions: [PBXObjectReference] = [] + var copyFilesBuildPhasesFiles: [TargetSource.BuildPhase.CopyFilesSettings: [PBXBuildFile]] = [:] + var copyFrameworksReferences: [PBXBuildFile] = [] + var copyResourcesReferences: [PBXBuildFile] = [] + var copyWatchReferences: [PBXBuildFile] = [] + var extensions: [PBXBuildFile] = [] var carthageFrameworksToEmbed: [String] = [] let targetDependencies = (target.transitivelyLinkDependencies ?? project.options.transitivelyLinkDependencies) ? @@ -457,7 +446,7 @@ public class PBXProjGenerator { case .target: let dependencyTargetName = dependency.reference let targetDependency = generateTargetDependency(from: target.name, to: dependencyTargetName) - dependencies.append(targetDependency.reference) + dependencies.append(targetDependency) guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue } @@ -469,12 +458,12 @@ public class PBXProjGenerator { || (dependecyLinkage == .static && target.type.isExecutable) ) if link { - let dependencyBuildFileReference = targetBuildFiles[dependencyTargetName]!.fileReference! + let dependencyFile = targetFileReferences[dependencyTargetName]! let buildFile = createObject( id: "target dependency build file" + target.name, - PBXBuildFile(fileReference: dependencyBuildFileReference) + PBXBuildFile(file: dependencyFile) ) - targetFrameworkBuildFiles.append(buildFile.reference) + targetFrameworkBuildFiles.append(buildFile) if !anyDependencyRequiresObjCLinking && dependencyTarget.requiresObjCLinking ?? (dependencyTarget.type == .staticLibrary) { @@ -490,29 +479,29 @@ public class PBXProjGenerator { let embedFile = createObject( id: "target dependency embed build file" + target.name, PBXBuildFile( - fileReference: dependencyFileReference, + file: dependencyFileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable) ) ) if dependencyTarget.type.isExtension { // embed app extension - extensions.append(embedFile.reference) + extensions.append(embedFile) } else if dependencyTarget.type.isFramework { - copyFrameworksReferences.append(embedFile.reference) + copyFrameworksReferences.append(embedFile) } else if dependencyTarget.type.isApp && dependencyTarget.platform == .watchOS { - copyWatchReferences.append(embedFile.reference) + copyWatchReferences.append(embedFile) } else if dependencyTarget.type == .xpcService { - copyFilesBuildPhasesFiles[.xpcServices, default: []].append(embedFile.reference) + copyFilesBuildPhasesFiles[.xpcServices, default: []].append(embedFile) } else { - copyResourcesReferences.append(embedFile.reference) + copyResourcesReferences.append(embedFile) } } case .framework: guard target.type != .staticLibrary else { break } - let fileReference: PBXObjectReference + let fileReference: PBXFileElement if dependency.implicit { fileReference = sourceGenerator.getFileReference( path: Path(dependency.reference), @@ -528,10 +517,10 @@ public class PBXProjGenerator { let buildFile = createObject( id: "framework file reference" + target.name, - PBXBuildFile(fileReference: fileReference) + PBXBuildFile(file: fileReference) ) - targetFrameworkBuildFiles.append(buildFile.reference) + targetFrameworkBuildFiles.append(buildFile) if !frameworkFiles.contains(fileReference) { frameworkFiles.append(fileReference) } @@ -539,9 +528,9 @@ public class PBXProjGenerator { if embed { let embedFile = createObject( id: "framework embed file" + target.name, - PBXBuildFile(fileReference: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) + PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) ) - copyFrameworksReferences.append(embedFile.reference) + copyFrameworksReferences.append(embedFile) } let buildPath = Path(dependency.reference).parent().string.quoted @@ -559,12 +548,12 @@ public class PBXProjGenerator { let buildFile = createObject( id: "carthage dependency build file" + target.name, - PBXBuildFile(fileReference: fileReference) + PBXBuildFile(file: fileReference) ) carthageFrameworksByPlatform[target.platform.carthageDirectoryName, default: []].insert(fileReference) - targetFrameworkBuildFiles.append(buildFile.reference) + targetFrameworkBuildFiles.append(buildFile) // Embedding handled by iterating over `carthageDependencies` below } @@ -586,9 +575,9 @@ public class PBXProjGenerator { if directlyEmbedCarthage { let embedFile = createObject( id: "carthage embed" + target.name, - PBXBuildFile(fileReference: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) + PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) ) - copyFrameworksReferences.append(embedFile.reference) + copyFrameworksReferences.append(embedFile) } else { carthageFrameworksToEmbed.append(dependency.reference) } @@ -596,9 +585,9 @@ public class PBXProjGenerator { } let fileReference = targetFileReferences[target.name] - var buildPhases: [PBXObjectReference] = [] + var buildPhases: [PBXBuildPhase] = [] - func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXObjectReference] { + func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXBuildFile] { let files = sourceFiles .reduce(into: [SourceFile]()) { output, sourceFile in if !output.contains(where: { $0.fileReference == sourceFile.fileReference }) { @@ -607,16 +596,15 @@ public class PBXProjGenerator { } .sorted { $0.path.lastComponent < $1.path.lastComponent } return files.map { createObject(id: $0.path.string + target.name, $0.buildFile) } - .map { $0.reference } } - func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [PBXObjectReference] { + func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [PBXBuildFile] { let filteredSourceFiles = sourceFiles .filter { $0.buildPhase?.buildPhase == buildPhase } return getBuildFilesForSourceFiles(filteredSourceFiles) } - func getBuildFilesForCopyFilesPhases() -> [TargetSource.BuildPhase.CopyFilesSettings: [PBXObjectReference]] { + func getBuildFilesForCopyFilesPhases() -> [TargetSource.BuildPhase.CopyFilesSettings: [PBXBuildFile]] { var sourceFilesByCopyFiles: [TargetSource.BuildPhase.CopyFilesSettings: [SourceFile]] = [:] for sourceFile in sourceFiles { guard case let .copyFiles(copyFilesSettings)? = sourceFile.buildPhase else { continue } @@ -629,18 +617,18 @@ public class PBXProjGenerator { let headersBuildPhaseFiles = getBuildFilesForPhase(.headers) if !headersBuildPhaseFiles.isEmpty && (target.type == .framework || target.type == .dynamicLibrary) { - let headersBuildPhase = createObject(id: target.name, PBXHeadersBuildPhase(fileReferences: headersBuildPhaseFiles)) - buildPhases.append(headersBuildPhase.reference) + let headersBuildPhase = createObject(id: target.name, PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) + buildPhases.append(headersBuildPhase) } let sourcesBuildPhaseFiles = getBuildFilesForPhase(.sources) - let sourcesBuildPhase = createObject(id: target.name, PBXSourcesBuildPhase(fileReferences: sourcesBuildPhaseFiles)) - buildPhases.append(sourcesBuildPhase.reference) + let sourcesBuildPhase = createObject(id: target.name, PBXSourcesBuildPhase(files: sourcesBuildPhaseFiles)) + buildPhases.append(sourcesBuildPhase) let resourcesBuildPhaseFiles = getBuildFilesForPhase(.resources) + copyResourcesReferences if !resourcesBuildPhaseFiles.isEmpty { - let resourcesBuildPhase = createObject(id: target.name, PBXResourcesBuildPhase(fileReferences: resourcesBuildPhaseFiles)) - buildPhases.append(resourcesBuildPhase.reference) + let resourcesBuildPhase = createObject(id: target.name, PBXResourcesBuildPhase(files: resourcesBuildPhaseFiles)) + buildPhases.append(resourcesBuildPhase) } let buildSettings = project.getCombinedBuildSettings(basePath: project.basePath, target: target, config: project.configs[0]) @@ -655,7 +643,6 @@ public class PBXProjGenerator { let script = createObject( id: "Swift.h" + target.name, PBXShellScriptBuildPhase( - fileReferences: [], name: "Copy Swift Objective-C Interface Header", inputPaths: inputPaths, outputPaths: outputPaths, @@ -663,7 +650,7 @@ public class PBXProjGenerator { shellScript: "ditto \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n" ) ) - buildPhases.append(script.reference) + buildPhases.append(script) } copyFilesBuildPhasesFiles.merge(getBuildFilesForCopyFilesPhases()) { $0 + $1 } @@ -674,11 +661,11 @@ public class PBXProjGenerator { PBXCopyFilesBuildPhase( dstPath: copyFiles.subpath, dstSubfolderSpec: copyFiles.destination.destination, - fileReferences: buildPhaseFiles + files: buildPhaseFiles ) ) - buildPhases.append(copyFilesBuildPhase.reference) + buildPhases.append(copyFilesBuildPhase) } } @@ -686,9 +673,9 @@ public class PBXProjGenerator { let frameworkBuildPhase = createObject( id: target.name, - PBXFrameworksBuildPhase(fileReferences: targetFrameworkBuildFiles) + PBXFrameworksBuildPhase(files: targetFrameworkBuildFiles) ) - buildPhases.append(frameworkBuildPhase.reference) + buildPhases.append(frameworkBuildPhase) } if !extensions.isEmpty { @@ -699,11 +686,11 @@ public class PBXProjGenerator { dstPath: "", dstSubfolderSpec: .plugins, name: "Embed App Extensions", - fileReferences: extensions + files: extensions ) ) - buildPhases.append(copyFilesPhase.reference) + buildPhases.append(copyFilesPhase) } copyFrameworksReferences += getBuildFilesForPhase(.frameworks) @@ -715,11 +702,11 @@ public class PBXProjGenerator { dstPath: "", dstSubfolderSpec: .frameworks, name: "Embed Frameworks", - fileReferences: copyFrameworksReferences + files: copyFrameworksReferences ) ) - buildPhases.append(copyFilesPhase.reference) + buildPhases.append(copyFilesPhase) } if !copyWatchReferences.isEmpty { @@ -730,11 +717,11 @@ public class PBXProjGenerator { dstPath: "$(CONTENTS_FOLDER_PATH)/Watch", dstSubfolderSpec: .productsDirectory, name: "Embed Watch Content", - fileReferences: copyWatchReferences + files: copyWatchReferences ) ) - buildPhases.append(copyFilesPhase.reference) + buildPhases.append(copyFilesPhase) } if !carthageFrameworksToEmbed.isEmpty { @@ -747,7 +734,6 @@ public class PBXProjGenerator { let carthageScript = createObject( id: "Carthage" + target.name, PBXShellScriptBuildPhase( - fileReferences: [], name: "Carthage", inputPaths: inputPaths, outputPaths: outputPaths, @@ -755,7 +741,7 @@ public class PBXProjGenerator { shellScript: "\(carthageExecutable) copy-frameworks\n" ) ) - buildPhases.append(carthageScript.reference) + buildPhases.append(carthageScript) } let buildRules = target.buildRules.map { buildRule in @@ -771,7 +757,7 @@ public class PBXProjGenerator { outputFilesCompilerFlags: buildRule.outputFilesCompilerFlags, script: buildRule.action.script ) - ).reference + ) } buildPhases += try target.postbuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) } @@ -850,32 +836,33 @@ public class PBXProjGenerator { } } - var baseConfigurationReference: PBXObjectReference? - if let configPath = target.configFiles[config.name] { - baseConfigurationReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) + var baseConfiguration: PBXFileReference? + if let configPath = target.configFiles[config.name], + let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference{ + baseConfiguration = fileReference } let buildConfig = XCBuildConfiguration( name: config.name, - baseConfigurationReference: baseConfigurationReference, buildSettings: buildSettings ) + buildConfig.baseConfiguration = baseConfiguration return createObject(id: config.name + target.name, buildConfig) } let buildConfigList = createObject(id: target.name, XCConfigurationList( - buildConfigurationsReferences: configs.map { $0.reference }, + buildConfigurations: configs, defaultConfigurationName: "" )) let targetObject = targetObjects[target.name]! targetObject.name = target.name - targetObject.buildConfigurationListReference = buildConfigList.reference - targetObject.buildPhasesReferences = buildPhases - targetObject.dependenciesReferences = dependencies + targetObject.buildConfigurationList = buildConfigList + targetObject.buildPhases = buildPhases + targetObject.dependencies = dependencies targetObject.productName = target.name - targetObject.buildRulesReferences = buildRules - targetObject.productReference = fileReference + targetObject.buildRules = buildRules + targetObject.product = fileReference if !target.isLegacy { targetObject.productType = target.type } diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index 9336a249..bf31f60f 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -40,8 +40,8 @@ public class ProjectGenerator { func getBuildEntry(_ buildTarget: Scheme.BuildTarget) -> XCScheme.BuildAction.Entry { - guard let targetReference = pbxProject.objects.targets(named: buildTarget.target).first else { - fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.objects.targets\"") + guard let pbxTarget = pbxProject.targets(named: buildTarget.target).first else { + fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"") } guard let buildableName = @@ -51,7 +51,7 @@ public class ProjectGenerator { } let buildableReference = XCScheme.BuildableReference( referencedContainer: "container:\(project.name).xcodeproj", - blueprintIdentifier: targetReference.reference, + blueprintIdentifier: "", //FIXME: pbxTarget.reference, buildableName: buildableName, blueprintName: buildTarget.target ) diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index 5c443249..3540af25 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -5,15 +5,15 @@ import xcodeproj struct SourceFile { let path: Path - let fileReference: PBXObjectReference + let fileReference: PBXFileElement let buildFile: PBXBuildFile let buildPhase: TargetSource.BuildPhase? } class SourceGenerator { - var rootGroups: Set = [] - private var fileReferencesByPath: [String: PBXObjectReference] = [:] + var rootGroups: Set = [] + private var fileReferencesByPath: [String: PBXFileElement] = [:] private var groupsByPath: [Path: PBXGroup] = [:] private var variantGroupsByPath: [Path: PBXVariantGroup] = [:] @@ -91,7 +91,7 @@ class SourceGenerator { settings["COMPILER_FLAGS"] = targetSource.compilerFlags.joined(separator: " ") } - let buildFile = PBXBuildFile(fileReference: fileReference, settings: settings.isEmpty ? nil : settings) + let buildFile = PBXBuildFile(file: fileReference, settings: settings.isEmpty ? nil : settings) return SourceFile( path: path, fileReference: fileReference, @@ -100,7 +100,7 @@ class SourceGenerator { ) } - func getContainedFileReference(path: Path) -> PBXObjectReference { + func getContainedFileReference(path: Path) -> PBXFileElement { let createIntermediateGroups = project.options.createIntermediateGroups let parentPath = path.parent() @@ -113,12 +113,12 @@ class SourceGenerator { ) if createIntermediateGroups { - createIntermediaGroups(for: parentGroup.reference, at: parentPath) + createIntermediaGroups(for: parentGroup, at: parentPath) } return fileReference } - func getFileReference(path: Path, inPath: Path, name: String? = nil, sourceTree: PBXSourceTree = .group, lastKnownFileType: String? = nil) -> PBXObjectReference { + func getFileReference(path: Path, inPath: Path, name: String? = nil, sourceTree: PBXSourceTree = .group, lastKnownFileType: String? = nil) -> PBXFileElement { let fileReferenceKey = path.string.lowercased() if let fileReference = fileReferencesByPath[fileReferenceKey] { return fileReference @@ -138,7 +138,7 @@ class SourceGenerator { .filter { $0.extension == "xcdatamodel" } .sorted { $0.string.localizedStandardCompare($1.string) == .orderedAscending } - let modelFileReference = + let modelFileReferences = sortedPaths.map { path in createObject( id: path.byRemovingBase(path: project.basePath).string, @@ -154,17 +154,17 @@ class SourceGenerator { let currentVersionPath = findCurrentCoreDataModelVersionPath(using: versionedModels) ?? sortedPaths.last let currentVersion: PBXFileReference? = { guard let indexOf = sortedPaths.index(where: { $0 == currentVersionPath }) else { return nil } - return modelFileReference[indexOf] + return modelFileReferences[indexOf] }() let versionGroup = addObject(id: fileReferencePath.string, XCVersionGroup( - currentVersion: currentVersion?.reference, + currentVersion: currentVersion, path: fileReferencePath.string, sourceTree: sourceTree, versionGroupType: "wrapper.xcdatamodel", - childrenReferences: modelFileReference.map { $0.reference } + children: modelFileReferences )) - fileReferencesByPath[fileReferenceKey] = versionGroup.reference - return versionGroup.reference + fileReferencesByPath[fileReferenceKey] = versionGroup + return versionGroup } else { // For all extensions other than `xcdatamodeld` let fileReference = createObject( @@ -176,8 +176,8 @@ class SourceGenerator { path: fileReferencePath.string ) ) - fileReferencesByPath[fileReferenceKey] = fileReference.reference - return fileReference.reference + fileReferencesByPath[fileReferenceKey] = fileReference + return fileReference } } } @@ -208,12 +208,16 @@ class SourceGenerator { /// Create a group or return an existing one at the path. /// Any merged children are added to a new group or merged into an existing one. - private func getGroup(path: Path, name: String? = nil, mergingChildren children: [PBXObjectReference], createIntermediateGroups: Bool, isBaseGroup: Bool) -> PBXGroup { + private func getGroup(path: Path, name: String? = nil, mergingChildren children: [PBXFileElement], createIntermediateGroups: Bool, isBaseGroup: Bool) -> PBXGroup { let groupReference: PBXGroup if let cachedGroup = groupsByPath[path] { - // only add the children that aren't already in the cachedGroup - cachedGroup.childrenReferences = Array(Set(cachedGroup.childrenReferences + children)) + for child in children { + // only add the children that aren't already in the cachedGroup + if !cachedGroup.children.contains(child) { + cachedGroup.children.append(child) + } + } groupReference = cachedGroup } else { @@ -231,7 +235,7 @@ class SourceGenerator { path.byRemovingBase(path: project.basePath).string : path.lastComponent let group = PBXGroup( - childrenReferences: children, + children: children, sourceTree: .group, name: groupName != groupPath ? groupName : nil, path: groupPath @@ -240,7 +244,7 @@ class SourceGenerator { groupsByPath[path] = groupReference if isTopLevelGroup { - rootGroups.insert(groupReference.reference) + rootGroups.insert(groupReference) } } return groupReference @@ -321,7 +325,7 @@ class SourceGenerator { .filter { $0.extension == "lproj" } .sorted { $0.lastComponent < $1.lastComponent } - var groupChildren: [PBXObjectReference] = filePaths.map { getFileReference(path: $0, inPath: path) } + var groupChildren: [PBXFileElement] = filePaths.map { getFileReference(path: $0, inPath: path) } var allSourceFiles: [SourceFile] = filePaths.map { generateSourceFile(targetType: targetType, targetSource: targetSource, path: $0) } @@ -336,11 +340,11 @@ class SourceGenerator { allSourceFiles += subGroups.sourceFiles - guard let first = subGroups.groups.first else { + guard let firstGroup = subGroups.groups.first else { continue } - groupChildren.append(first.reference) + groupChildren.append(firstGroup) groups += subGroups.groups } @@ -363,13 +367,13 @@ class SourceGenerator { .filter(isIncludedPath) .sorted() { let variantGroup = getVariantGroup(path: filePath, inPath: path) - groupChildren.append(variantGroup.reference) + groupChildren.append(variantGroup) baseLocalisationVariantGroups.append(variantGroup) let sourceFile = SourceFile( path: filePath, - fileReference: variantGroup.reference, - buildFile: PBXBuildFile(fileReference: variantGroup.reference), + fileReference: variantGroup, + buildFile: PBXBuildFile(file: variantGroup), buildPhase: .resources ) allSourceFiles.append(sourceFile) @@ -399,15 +403,15 @@ class SourceGenerator { ) if let variantGroup = variantGroup { - if !variantGroup.childrenReferences.contains(fileReference) { - variantGroup.childrenReferences.append(fileReference) + if !variantGroup.children.contains(fileReference) { + variantGroup.children.append(fileReference) } } else { // add SourceFile to group if there is no Base.lproj directory let sourceFile = SourceFile( path: filePath, fileReference: fileReference, - buildFile: PBXBuildFile(fileReference: fileReference), + buildFile: PBXBuildFile(file: fileReference), buildPhase: .resources ) allSourceFiles.append(sourceFile) @@ -423,7 +427,7 @@ class SourceGenerator { isBaseGroup: isBaseGroup ) if project.options.createIntermediateGroups { - createIntermediaGroups(for: group.reference, at: path) + createIntermediaGroups(for: group, at: path) } groups.insert(group, at: 0) @@ -440,7 +444,7 @@ class SourceGenerator { let createIntermediateGroups = project.options.createIntermediateGroups var sourceFiles: [SourceFile] = [] - let sourceReference: PBXObjectReference + let sourceReference: PBXFileElement var sourcePath = path switch type { case .folder: @@ -481,7 +485,7 @@ class SourceGenerator { } else { let parentGroup = getGroup(path: parentPath, mergingChildren: [fileReference], createIntermediateGroups: createIntermediateGroups, isBaseGroup: true) sourcePath = parentPath - sourceReference = parentGroup.reference + sourceReference = parentGroup } sourceFiles.append(sourceFile) @@ -493,7 +497,7 @@ class SourceGenerator { } sourceFiles += groupSourceFiles - sourceReference = group.reference + sourceReference = group } if createIntermediateGroups { @@ -504,7 +508,7 @@ class SourceGenerator { } // Add groups for all parents recursively - private func createIntermediaGroups(for groupReference: PBXObjectReference, at path: Path) { + private func createIntermediaGroups(for fileElement: PBXFileElement, at path: Path) { let parentPath = path.parent() guard parentPath != project.basePath && path.string.contains(project.basePath.string) else { @@ -513,10 +517,10 @@ class SourceGenerator { } let hasParentGroup = groupsByPath[parentPath] != nil - let parentGroup = getGroup(path: parentPath, mergingChildren: [groupReference], createIntermediateGroups: true, isBaseGroup: false) + let parentGroup = getGroup(path: parentPath, mergingChildren: [fileElement], createIntermediateGroups: true, isBaseGroup: false) if !hasParentGroup { - createIntermediaGroups(for: parentGroup.reference, at: parentPath) + createIntermediaGroups(for: parentGroup, at: parentPath) } } diff --git a/Sources/XcodeGenKit/XCProjExtensions.swift b/Sources/XcodeGenKit/XCProjExtensions.swift index 539ded37..df439084 100644 --- a/Sources/XcodeGenKit/XCProjExtensions.swift +++ b/Sources/XcodeGenKit/XCProjExtensions.swift @@ -12,8 +12,8 @@ extension PBXFileElement { extension PBXProj { public func printGroups() -> String { - guard let project = objects.projects.first?.value, - let mainGroup = objects.groups.getReference(project.mainGroupReference) else { + guard let project = projects.first, + let mainGroup = project.mainGroup else { return "" } return printGroup(group: mainGroup) @@ -21,14 +21,14 @@ extension PBXProj { public func printGroup(group: PBXGroup) -> String { var string = group.nameOrPath - for reference in group.childrenReferences { - if let group = objects.groups.getReference(reference) { + for child in group.children { + if let group = child as? PBXGroup { string += "\n 📁 " + printGroup(group: group).replacingOccurrences(of: "\n ", with: "\n ") - } else if let fileReference = objects.fileReferences.getReference(reference) { + } else if let fileReference = child as? PBXFileReference { string += "\n 📄 " + fileReference.nameOrPath - } else if let variantGroup = objects.variantGroups.getReference(reference) { + } else if let variantGroup = child as? PBXVariantGroup { string += "\n 🌎 " + variantGroup.nameOrPath - } else if let versionGroup = objects.versionGroups.getReference(reference) { + } else if let versionGroup = child as? XCVersionGroup { string += "\n 🔢 " + versionGroup.nameOrPath } } @@ -36,16 +36,6 @@ extension PBXProj { } } -extension PBXObjects { - - public func getFileElement(reference: PBXObjectReference) -> PBXFileElement? { - return groups[reference] ?? - fileReferences[reference] ?? - versionGroups[reference] ?? - variantGroups[reference] - } -} - extension Dictionary { public var valueArray: Array { @@ -53,13 +43,6 @@ extension Dictionary { } } -extension Dictionary where Key == PBXObjectReference { - - public func getReference(_ reference: PBXObjectReference) -> Value? { - return self[reference] - } -} - extension Xcode { public static func fileType(path: Path) -> String? { diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 1a7e1f9f..416f4dfb 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -76,23 +76,6 @@ A6CCC432869EB6B8A65A89B565B57EA5 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */; }; AA5AF277386012CD6CC015073239E50F /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */; }; AD00993C2491D03BD3A1B6E48D685C29 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */; }; - AUTO_5VZIHqJ600tEPf73suYa = {isa = PBXBuildFile; fileRef = 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */; }; - AUTO_7MKZu584cIQuU5pdvEAL = {isa = PBXBuildFile; fileRef = EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */; }; - AUTO_9aaVkTyiyQWj9chRFSXC = {isa = PBXBuildFile; fileRef = C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */; }; - AUTO_CX9m7izxITPbe6k7gIMS = {isa = PBXBuildFile; fileRef = D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */; }; - AUTO_FHqmKTu8R9eQcDSHtBl2 = {isa = PBXBuildFile; fileRef = 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AUTO_FI4P0L7mD3dfGGVPVNvx = {isa = PBXBuildFile; fileRef = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; }; - AUTO_GN80IEuWvCvUcPwoAVnt = {isa = PBXBuildFile; fileRef = DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */; }; - AUTO_LFQ2NgxpvrhYJSYshySZ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; - AUTO_Ni16m8Y84i5PMkMaGKaR = {isa = PBXBuildFile; fileRef = 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */; }; - AUTO_OkqadiIPIeuHfZsWVaT8 = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; - AUTO_cBeRILf3hWlctfWZW9JQ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; - AUTO_eO1L3NPJcUbCdbs0LA8S = {isa = PBXBuildFile; fileRef = F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AUTO_elwIMiarYGjkKHoLYkNz = {isa = PBXBuildFile; fileRef = 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */; }; - AUTO_iHu2o18WOxDYzCUar5IX = {isa = PBXBuildFile; fileRef = AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */; }; - AUTO_m5qNHcIsAuTywjDdFCMx = {isa = PBXBuildFile; fileRef = 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */; }; - AUTO_sv3hFquUhPl9qfllDvyL = {isa = PBXBuildFile; fileRef = CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */; }; - AUTO_vusM5sNOIMe1bxFDS6ZY = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; BD4C8B77EF89CF7F4ED0D1C4713397E4 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; BD8FA9115EB29C8438DE82A4C33C249A /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BE38983978B6D70795D2924F52F3081D /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */; }; @@ -111,6 +94,8 @@ FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + irhgJ7FX3id0PscP9V19 = {isa = PBXBuildFile; fileRef = F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + wRIMwRUI5z90K7MaV9ga = {isa = PBXBuildFile; fileRef = 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -876,8 +861,8 @@ isa = PBXNativeTarget; buildConfigurationList = 0AA719054B034D653457F3861CE722A9 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */; buildPhases = ( - E74DACDAB11D89D5B824405B81E48D89 /* Sources */, B6AA01763EF8349E60D1FA4E652778F3 /* Headers */, + E74DACDAB11D89D5B824405B81E48D89 /* Sources */, C79A51DBA8AF7631AEF22BA83E104A04 /* Frameworks */, ADF413AF548A97CB33898BB4F6211314 /* MyScript */, ); @@ -895,8 +880,8 @@ isa = PBXNativeTarget; buildConfigurationList = CCF68725DCD5EF7FD03872D0B98C32F0 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */; buildPhases = ( - A0301004CBF36C0004B23102202FA9FE /* Sources */, 9C424B9F3AFC563C6A6CE8FA124F8801 /* Headers */, + A0301004CBF36C0004B23102202FA9FE /* Sources */, F6C2490C6497837A21966090C77C3602 /* Frameworks */, DABB7DFD3C5DB4EAC8C5D24C79EA4E35 /* MyScript */, ); @@ -914,8 +899,8 @@ isa = PBXNativeTarget; buildConfigurationList = 9BA95DBD7B862EE1F43DC68338281D0E /* Build configuration list for PBXNativeTarget "Framework_macOS" */; buildPhases = ( - 1411E21883A09388E140C6D123029288 /* Sources */, A08871F94C4ADE4FF10D349F4ECC06C9 /* Headers */, + 1411E21883A09388E140C6D123029288 /* Sources */, 266AF93F95F8ECC5F62E443DD79D4263 /* Frameworks */, 78EF33E6A08B3BB88D8805DC3588843C /* MyScript */, ); @@ -1115,8 +1100,8 @@ isa = PBXNativeTarget; buildConfigurationList = ABBCABD06AD7666C13DD9BAF0C16276E /* Build configuration list for PBXNativeTarget "Framework_iOS" */; buildPhases = ( - AFF1863F9CDDD4DD0B0EB22A6AD9850A /* Sources */, 440F7F1F9382CEDD92D75B89E25552D5 /* Headers */, + AFF1863F9CDDD4DD0B0EB22A6AD9850A /* Sources */, 6F3C985C6701880E8731C4AAFBDC9FEF /* Frameworks */, 2983C9312429A22DF5437C4020B9937E /* MyScript */, ); @@ -1137,7 +1122,17 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 0930; - TargetAttributes = "[xcodeproj.PBXObjectReference: [\"TestTargetID\": xcodeproj.PBXObjectReference], xcodeproj.PBXObjectReference: [\"CUSTOM\": \"value\"], xcodeproj.PBXObjectReference: [\"ProvisioningStyle\": \"Automatic\"], xcodeproj.PBXObjectReference: [\"ProvisioningStyle\": \"Automatic\"]]"; + TargetAttributes = { + AB59C0690172FF119F045336C1F1CA0D = { + CUSTOM = value; + }; + DB85CB6A2C15660854D634EF1B0C1FAD = { + ProvisioningStyle = Automatic; + }; + E165F00BB866D2A7087C93650EDB1138 = { + ProvisioningStyle = Automatic; + }; + }; }; buildConfigurationList = 0D5965C1A1D5123D687DA32AC9B957F8 /* Build configuration list for PBXProject "Project" */; compatibilityVersion = "Xcode 3.2"; diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme index 3859a09f..ff5b9d32 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -33,7 +33,7 @@ skipped = "NO"> @@ -43,7 +43,7 @@ skipped = "NO"> @@ -53,21 +53,21 @@ - - + + @@ -86,21 +86,21 @@ runnableDebuggingMode = "0"> - - + + @@ -115,21 +115,21 @@ runnableDebuggingMode = "0"> - - + + @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme index fa3f0ee7..2b15a4ca 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme @@ -14,7 +14,7 @@ @@ -32,7 +32,7 @@ buildForAnalyzing = "YES"> @@ -50,7 +50,7 @@ @@ -72,7 +72,7 @@ @@ -101,7 +101,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme index 1e73621f..b3e4fcaa 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/XcodeGenKitTests/GeneratorHelpers.swift b/Tests/XcodeGenKitTests/GeneratorHelpers.swift index f6a46761..24a077eb 100644 --- a/Tests/XcodeGenKitTests/GeneratorHelpers.swift +++ b/Tests/XcodeGenKitTests/GeneratorHelpers.swift @@ -32,12 +32,12 @@ extension PBXProj { let mainGroup = try getMainGroup() func validateGroup(_ group: PBXGroup) throws { - let hasDuplicatedChildren = group.childrenReferences.count != Set(group.childrenReferences).count + let hasDuplicatedChildren = group.children.count != Set(group.children).count if hasDuplicatedChildren { - throw failure("Group \"\(group.nameOrPath)\" has duplicated children:\n - \(group.childrenReferences.map { String(describing: $0) }.joined(separator: "\n - "))") + throw failure("Group \"\(group.nameOrPath)\" has duplicated children:\n - \(group.children.map { String(describing: $0) }.joined(separator: "\n - "))") } - for child in group.childrenReferences { - if let group = objects.groups.getReference(child) { + for child in group.children { + if let group = child as? PBXGroup { try validateGroup(group) } } diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index 81df62d2..cec8c162 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -20,11 +20,11 @@ class ProjectFixtureTests: XCTestCase { guard let xcodeProject = xcodeProject else { return } func getFileReferences(_ path: String) -> [PBXFileReference] { - return xcodeProject.pbxproj.objects.fileReferences.values.filter { $0.path == path } + return xcodeProject.pbxproj.fileReferences.filter { $0.path == path } } func getVariableGroups(_ name: String?) -> [PBXVariantGroup] { - return xcodeProject.pbxproj.objects.variantGroups.values.filter { $0.name == name } + return xcodeProject.pbxproj.variantGroups.filter { $0.name == name } } let resourceName = "LocalizedStoryboard.storyboard" @@ -36,13 +36,13 @@ class ProjectFixtureTests: XCTestCase { do { let refs = getFileReferences(baseResource) try expect(refs.count) == 1 - try expect(variableGroup.childrenReferences.filter { $0 == refs.first?.reference }.count) == 1 + try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1 } do { let refs = getFileReferences(localizedResource) try expect(refs.count) == 1 - try expect(variableGroup.childrenReferences.filter { $0 == refs.first?.reference }.count) == 1 + try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1 } } diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index ce7fb762..8799d2c2 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -41,11 +41,9 @@ class ProjectGeneratorTests: XCTestCase { let options = SpecOptions(bundleIdPrefix: "com.test") let project = Project(basePath: "", name: "test", targets: [framework], options: options) let pbxProj = try project.generatePbxProj() - guard let target = pbxProj.objects.nativeTargets.first?.value, - let buildConfigList = target.buildConfigurationListReference, - let buildConfigs = pbxProj.objects.configurationLists.getReference(buildConfigList), - let buildConfigReference = buildConfigs.buildConfigurationsReferences.first, - let buildConfig = pbxProj.objects.buildConfigurations.getReference(buildConfigReference) else { + guard let target = pbxProj.nativeTargets.first, + let buildConfigList = target.buildConfigurationList, + let buildConfig = buildConfigList.buildConfigurations.first else { throw failure("Build Config not found") } try expect(buildConfig.buildSettings["PRODUCT_BUNDLE_IDENTIFIER"] as? String) == "com.test.MyFramework" @@ -55,7 +53,7 @@ class ProjectGeneratorTests: XCTestCase { let options = SpecOptions(settingPresets: .none) let project = Project(basePath: "", name: "test", targets: [framework], options: options) let pbxProj = try project.generatePbxProj() - let allSettings = pbxProj.objects.buildConfigurations.values.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted() + let allSettings = pbxProj.buildConfigurations.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted() try expect(allSettings) == ["SETTING_2"] } @@ -63,7 +61,7 @@ class ProjectGeneratorTests: XCTestCase { let options = SpecOptions(developmentLanguage: "de") let project = Project(basePath: "", name: "test", options: options) let pbxProj = try project.generatePbxProj() - guard let pbxProject = pbxProj.objects.projects.first?.value else { + guard let pbxProject = pbxProj.projects.first else { throw failure("Could't find PBXProject") } try expect(pbxProject.developmentRegion) == "de" @@ -92,8 +90,8 @@ class ProjectGeneratorTests: XCTestCase { let project = Project(basePath: "", name: "test", configs: [Config(name: "Aconfig"), Config(name: "Bconfig")], targets: [framework], options: options) let pbxProject = try project.generatePbxProj() - guard let projectConfigListReference = pbxProject.objects.projects.values.first?.buildConfigurationListReference, - let defaultConfigurationName = pbxProject.objects.configurationLists[projectConfigListReference]?.defaultConfigurationName + guard let projectConfigList = pbxProject.projects.first?.buildConfigurationList, + let defaultConfigurationName = projectConfigList.defaultConfigurationName else { throw failure("Default configuration name not found") } @@ -109,7 +107,7 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates config defaults") { let project = Project(basePath: "", name: "test") let pbxProj = try project.generatePbxProj() - let configs = pbxProj.objects.buildConfigurations.valueArray + let configs = pbxProj.buildConfigurations try expect(configs.count) == 2 try expect(configs).contains(name: "Debug") try expect(configs).contains(name: "Release") @@ -122,7 +120,7 @@ class ProjectGeneratorTests: XCTestCase { configs: [Config(name: "config1"), Config(name: "config2")] ) let pbxProj = try project.generatePbxProj() - let configs = pbxProj.objects.buildConfigurations.valueArray + let configs = pbxProj.buildConfigurations try expect(configs.count) == 2 try expect(configs).contains(name: "config1") try expect(configs).contains(name: "config2") @@ -135,7 +133,7 @@ class ProjectGeneratorTests: XCTestCase { configs: [Config(name: "config")] ) let pbxProj = try project.generatePbxProj() - guard let config = pbxProj.objects.buildConfigurations.first?.value else { + guard let config = pbxProj.buildConfigurations.first else { throw failure("configuration not found") } try expect(config.buildSettings.isEmpty).to.beTrue() @@ -198,8 +196,8 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates aggregate targets") { let pbxProject = try project.generatePbxProj() - let nativeTargets = pbxProject.objects.nativeTargets.valueArray.sorted { $0.name < $1.name } - let aggregateTargets = pbxProject.objects.aggregateTargets.valueArray.sorted { $0.name < $1.name } + let nativeTargets = pbxProject.nativeTargets.sorted { $0.name < $1.name } + let aggregateTargets = pbxProject.aggregateTargets.sorted { $0.name < $1.name } try expect(nativeTargets.count) == 4 try expect(aggregateTargets.count) == 2 @@ -216,7 +214,7 @@ class ProjectGeneratorTests: XCTestCase { let target2 = nativeTargets.first { $0.name == "Other2" } try expect(target2?.dependencies.count) == 2 - try expect(pbxProject.objects.targetDependencies.count) == 7 + try expect(pbxProject.targetDependencies.count) == 7 } } } @@ -228,7 +226,7 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates targets") { let pbxProject = try project.generatePbxProj() - let nativeTargets = pbxProject.objects.nativeTargets.values + let nativeTargets = pbxProject.nativeTargets try expect(nativeTargets.count) == 3 try expect(nativeTargets.contains { $0.name == app.name }).beTrue() try expect(nativeTargets.contains { $0.name == framework.name }).beTrue() @@ -245,22 +243,22 @@ class ProjectGeneratorTests: XCTestCase { let project = Project(basePath: "", name: "test", targets: [appTargetWithAttributes, framework, testTargetWithAttributes]) let pbxProject = try project.generatePbxProj() - guard let targetAttributes = pbxProject.objects.projects.values.first?.attributes["TargetAttributes"] as? [PBXObjectReference: [String: Any]] else { + guard let targetAttributes = pbxProject.projects.first?.targetAttributes else { throw failure("Couldn't find Project TargetAttributes") } - guard let appTarget = pbxProject.objects.targets(named: app.name).first else { + guard let appTarget = pbxProject.targets(named: app.name).first else { throw failure("Couldn't find App Target") } - guard let uiTestTarget = pbxProject.objects.targets(named: uiTest.name).first else { + guard let uiTestTarget = pbxProject.targets(named: uiTest.name).first else { throw failure("Couldn't find UITest Target") } //try expect(targetAttributes[uiTestTarget.reference]?["TestTargetID"] as? String) == appTarget.reference.value - try expect(targetAttributes[uiTestTarget.reference]?["ProvisioningStyle"] as? String) == "Manual" - try expect(targetAttributes[appTarget.reference]?["ProvisioningStyle"] as? String) == "Automatic" - try expect(targetAttributes[appTarget.reference]?["DevelopmentTeam"] as? String) == "123" + try expect(targetAttributes[uiTestTarget]?["ProvisioningStyle"] as? String) == "Manual" + try expect(targetAttributes[appTarget]?["ProvisioningStyle"] as? String) == "Automatic" + try expect(targetAttributes[appTarget]?["DevelopmentTeam"] as? String) == "123" } $0.it("generates platform version") { @@ -269,16 +267,14 @@ class ProjectGeneratorTests: XCTestCase { let pbxProject = try project.generatePbxProj() - guard let projectConfigListReference = pbxProject.objects.projects.values.first?.buildConfigurationListReference, - let projectConfigReference = pbxProject.objects.configurationLists[projectConfigListReference]?.buildConfigurationsReferences.first, - let projectConfig = pbxProject.objects.buildConfigurations[projectConfigReference] + guard let projectConfigList = pbxProject.projects.first?.buildConfigurationList, + let projectConfig = projectConfigList.buildConfigurations.first else { throw failure("Couldn't find Project config") } - guard let targetConfigListReference = pbxProject.objects.nativeTargets.values.first?.buildConfigurationListReference, - let targetConfigReference = pbxProject.objects.configurationLists[targetConfigListReference]?.buildConfigurationsReferences.first, - let targetConfig = pbxProject.objects.buildConfigurations[targetConfigReference] + guard let targetConfigList = pbxProject.nativeTargets.first?.buildConfigurationList, + let targetConfig = targetConfigList.buildConfigurations.first else { throw failure("Couldn't find Target config") } @@ -295,14 +291,14 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates dependencies") { let pbxProject = try project.generatePbxProj() - let nativeTargets = pbxProject.objects.nativeTargets.values - let dependencies = pbxProject.objects.targetDependencies.valueArray.sorted { (try? $0.target())??.name ?? "" < (try? $1.target())??.name ?? "" } + let nativeTargets = pbxProject.nativeTargets + let dependencies = pbxProject.targetDependencies.sorted { $0.target?.name ?? "" < $1.target?.name ?? "" } try expect(dependencies.count) == 2 - let appTarget = nativeTargets.first { $0.object.name == app.name } - let frameworkTarget = nativeTargets.first { $0.object.name == framework.name } + let appTarget = nativeTargets.first { $0.name == app.name } + let frameworkTarget = nativeTargets.first { $0.name == framework.name } - try expect(dependencies).contains { $0.object.target == appTarget?.reference } - try expect(dependencies).contains { $0.object.target == frameworkTarget?.reference } + try expect(dependencies).contains { $0.target == appTarget } + try expect(dependencies).contains { $0.target == frameworkTarget } } $0.it("generates targets with correct transitive embeds") { @@ -542,20 +538,21 @@ class ProjectGeneratorTests: XCTestCase { let pbxProject = try project.generatePbxProj() for target in targets { - guard let nativeTarget = pbxProject.objects.nativeTargets.values.first(where: { $0.name == target.name }) else { + guard let nativeTarget = pbxProject.nativeTargets.first(where: { $0.name == target.name }) else { throw failure("PBXNativeTarget for \(target) not found") } - let buildPhases = nativeTarget.buildPhasesReferences - let resourcesPhases = pbxProject.objects.resourcesBuildPhases.values.filter { buildPhases.contains($0.reference) } - let frameworkPhases = pbxProject.objects.frameworksBuildPhases.values.filter { buildPhases.contains($0.reference) } - let copyFilesPhases = pbxProject.objects.copyFilesBuildPhases.values.filter { buildPhases.contains($0.reference) } + let buildPhases = nativeTarget.buildPhases + let resourcesPhases = pbxProject.resourcesBuildPhases.filter { buildPhases.contains($0) } + let frameworkPhases = pbxProject.frameworksBuildPhases.filter { buildPhases.contains($0) } + let copyFilesPhases = pbxProject.copyFilesBuildPhases.filter { buildPhases.contains($0) } // ensure only the right resources are copies, no more, no less let expectedResourceFiles = expectedResourceFiles[target.name]! try expect(resourcesPhases.count) == (expectedResourceFiles.isEmpty ? 0 : 1) if !expectedResourceFiles.isEmpty { - let resourceFiles = resourcesPhases[0].fileReferences - .compactMap { pbxProject.objects.buildFiles[$0]?.fileReference.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } + let resourceFiles = resourcesPhases[0].files + .compactMap { $0.file } + .map { $0.nameOrPath } try expect(Set(resourceFiles)) == expectedResourceFiles } @@ -563,8 +560,8 @@ class ProjectGeneratorTests: XCTestCase { let expectedLinkedFiles = expectedLinkedFiles[target.name]! try expect(frameworkPhases.count) == (expectedLinkedFiles.isEmpty ? 0 : 1) if !expectedLinkedFiles.isEmpty { - let linkFrameworks = frameworkPhases[0].fileReferences - .compactMap { pbxProject.objects.buildFiles[$0]?.fileReference.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } + let linkFrameworks = frameworkPhases[0].files + .compactMap { $0.file?.nameOrPath } try expect(Set(linkFrameworks)) == expectedLinkedFiles } @@ -572,8 +569,8 @@ class ProjectGeneratorTests: XCTestCase { let expectedEmbeddedFrameworks = expectedEmbeddedFrameworks[target.name]! try expect(copyFilesPhases.count) == (expectedEmbeddedFrameworks.isEmpty ? 0 : 1) if !expectedEmbeddedFrameworks.isEmpty { - let copyFiles = copyFilesPhases[0].fileReferences - .compactMap { pbxProject.objects.buildFiles[$0]?.fileReference.flatMap { pbxProject.objects.fileReferences[$0]?.nameOrPath } } + let copyFiles = copyFilesPhases[0].files + .compactMap { $0.file?.nameOrPath } try expect(Set(copyFiles)) == expectedEmbeddedFrameworks } } @@ -640,11 +637,9 @@ class ProjectGeneratorTests: XCTestCase { let pbxProj = try project.generatePbxProj() func buildSettings(for target: Target) throws -> BuildSettings { - guard let nativeTarget = pbxProj.objects.targets(named: target.name).first, - let buildConfigList = nativeTarget.buildConfigurationListReference, - let buildConfigs = pbxProj.objects.configurationLists.getReference(buildConfigList), - let buildConfigReference = buildConfigs.buildConfigurationsReferences.first, - let buildConfig = pbxProj.objects.buildConfigurations.getReference(buildConfigReference) else { + guard let nativeTarget = pbxProj.targets(named: target.name).first, + let buildConfigList = nativeTarget.buildConfigurationList, + let buildConfig = buildConfigList.buildConfigurations.first else { throw failure("XCBuildConfiguration not found for Target \(target.name.quoted)") } @@ -698,16 +693,15 @@ class ProjectGeneratorTests: XCTestCase { let pbxProject = try project.generatePbxProj() func scriptBuildPhases(target: Target) throws -> [PBXShellScriptBuildPhase] { - guard let nativeTarget = pbxProject.objects.nativeTargets.values.first(where: { $0.name == target.name }) else { + guard let nativeTarget = pbxProject.nativeTargets.first(where: { $0.name == target.name }) else { throw failure("PBXNativeTarget for \(target) not found") } - let buildPhases = nativeTarget.buildPhasesReferences - let scriptPhases = pbxProject.objects.shellScriptBuildPhases.values.filter { buildPhases.contains($0.reference) } + let buildPhases = nativeTarget.buildPhases + let scriptPhases = buildPhases.compactMap { $0 as? PBXShellScriptBuildPhase } return scriptPhases } let expectedScriptPhase = PBXShellScriptBuildPhase( - fileReferences: [], name: "Copy Swift Objective-C Interface Header", inputPaths: ["$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)"], outputPaths: ["$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)"], @@ -726,18 +720,18 @@ class ProjectGeneratorTests: XCTestCase { scriptSpec.targets[0].postbuildScripts = [BuildScript(script: .script("script2"))] let pbxProject = try scriptSpec.generatePbxProj() - guard let nativeTarget = pbxProject.objects.nativeTargets.values - .first(where: { $0.buildPhasesReferences.count >= 2 }) else { + guard let nativeTarget = pbxProject.nativeTargets + .first(where: { $0.buildPhases.count >= 2 }) else { throw failure("Target with build phases not found") } - let buildPhases = nativeTarget.buildPhasesReferences + let buildPhases = nativeTarget.buildPhases - let scripts = pbxProject.objects.shellScriptBuildPhases.valueArray + let scripts = pbxProject.shellScriptBuildPhases let script1 = scripts.first { $0.shellScript == "script1" } let script2 = scripts.first { $0.shellScript == "script2" } try expect(scripts.count) == 2 - try expect(buildPhases.first) == script1?.reference - try expect(buildPhases.last) == script2?.reference + try expect(buildPhases.first) == script1 + try expect(buildPhases.last) == script2 } $0.it("generates targets with cylical dependencies") { @@ -779,7 +773,7 @@ class ProjectGeneratorTests: XCTestCase { ] let pbxProject = try scriptSpec.generatePbxProj() - let buildRules = pbxProject.objects.buildRules.values + let buildRules = pbxProject.buildRules try expect(buildRules.count) == 2 let first = buildRules.first { $0.name == "My Rule" }! let second = buildRules.first { $0.name != "My Rule" }! @@ -821,7 +815,7 @@ class ProjectGeneratorTests: XCTestCase { schemes: [scheme] ) let xcodeProject = try project.generateXcodeProject() - guard let target = xcodeProject.pbxproj.objects.nativeTargets.values + guard let target = xcodeProject.pbxproj.nativeTargets .first(where: { $0.name == app.name }) else { throw failure("Target not found") } @@ -848,7 +842,7 @@ class ProjectGeneratorTests: XCTestCase { ].compactMap { $0 } for buildableReference in buildableReferences { - try expect(buildableReference.blueprintIdentifier) == target.reference + //FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference try expect(buildableReference.blueprintName) == target.name try expect(buildableReference.buildableName) == "\(target.name).\(target.productType!.fileExtension!)" } @@ -886,7 +880,7 @@ class ProjectGeneratorTests: XCTestCase { } try expect( - xcodeProject.pbxproj.objects.nativeTargets.values + xcodeProject.pbxproj.nativeTargets .contains(where: { $0.name == app.name }) ).beTrue() try expect(xcscheme.launchAction?.environmentVariables) == runVariables @@ -910,7 +904,7 @@ class ProjectGeneratorTests: XCTestCase { try expect(xcodeProject.sharedData?.schemes.count) == 2 - guard let nativeTarget = xcodeProject.pbxproj.objects.nativeTargets.values + guard let nativeTarget = xcodeProject.pbxproj.nativeTargets .first(where: { $0.name == app.name }) else { throw failure("Target not found") } @@ -922,7 +916,7 @@ class ProjectGeneratorTests: XCTestCase { throw failure("Build Action entry not found") } - try expect(buildActionEntry.buildableReference.blueprintIdentifier) == nativeTarget.reference + //FIXME: try expect(buildActionEntry.buildableReference.blueprintIdentifier) == nativeTarget try expect(xcscheme.launchAction?.buildConfiguration) == "Test Debug" try expect(xcscheme.testAction?.buildConfiguration) == "Test Debug" diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift index 83dc5554..21dd0ead 100644 --- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift @@ -85,18 +85,18 @@ class SourceGeneratorTests: XCTestCase { let project = Project(basePath: directoryPath, name: "Test", targets: [target]) let pbxProj = try project.generatePbxProj() try pbxProj.expectFile(paths: ["Sources", "Bar.swift"], buildPhase: .sources) - let buildPhase = pbxProj.objects.copyFilesBuildPhases.values.first + let buildPhase = pbxProj.copyFilesBuildPhases.first try expect(buildPhase?.dstSubfolderSpec) == .frameworks let fileReference = pbxProj.getFileReference( paths: ["Sources", "Foo.framework"], names: ["Sources", "Foo.framework"] - )?.reference - guard let buildFile = pbxProj.objects.buildFiles.valueArray - .first(where: { $0.fileReference == fileReference })?.reference else { + ) + guard let buildFile = pbxProj.buildFiles + .first(where: { $0.file == fileReference }) else { throw failure("Cant find build file") } - try expect(buildPhase?.fileReferences.count) == 1 - try expect(buildPhase?.fileReferences.contains(buildFile)) == true + try expect(buildPhase?.files.count) == 1 + try expect(buildPhase?.files.contains(buildFile)) == true } $0.it("generates core data models") { @@ -114,16 +114,16 @@ class SourceGeneratorTests: XCTestCase { let project = Project(basePath: directoryPath, name: "Test", targets: [target]) let pbxProj = try project.generatePbxProj() - guard let fileReference = pbxProj.objects.fileReferences.first(where: { $0.value.nameOrPath == "model2.xcdatamodel" }) else { + guard let fileReference = pbxProj.fileReferences.first(where: { $0.nameOrPath == "model2.xcdatamodel" }) else { throw failure("Couldn't find model file reference") } - guard let versionGroup = pbxProj.objects.versionGroups.values.first else { + guard let versionGroup = pbxProj.versionGroups.first else { throw failure("Couldn't find version group") } - try expect(versionGroup.currentVersion) == fileReference.key - try expect(versionGroup.childrenReferences.count) == 3 + try expect(versionGroup.currentVersion) == fileReference + try expect(versionGroup.children.count) == 3 try expect(versionGroup.path) == "model.xcdatamodeld" - try expect(fileReference.value.path) == "model2.xcdatamodel" + try expect(fileReference.path) == "model2.xcdatamodel" } $0.it("handles duplicate names") { @@ -460,11 +460,9 @@ class SourceGeneratorTests: XCTestCase { let pbxProj = try project.generatePbxProj() try pbxProj.expectFile(paths: ["Sources/A", "a.swift"], names: ["A", "a.swift"], buildPhase: .sources) - let sourcesBuildPhase = pbxProj.objects.buildPhases - .first(where: { $0.1.buildPhase == BuildPhase.sources })! - .value + let sourcesBuildPhase = pbxProj.buildPhases.first(where: { $0.buildPhase == BuildPhase.sources })! - try expect(sourcesBuildPhase.fileReferences.count) == 1 + try expect(sourcesBuildPhase.files.count) == 1 } $0.it("derived directories are sorted last") { @@ -482,7 +480,7 @@ class SourceGeneratorTests: XCTestCase { let project = Project(basePath: directoryPath, name: "Test", targets: [target]) let pbxProj = try project.generatePbxProj() - let groups = try pbxProj.getMainGroup().childrenReferences.compactMap { pbxProj.objects.getFileElement(reference: $0)?.nameOrPath } + let groups = try pbxProj.getMainGroup().children.map { $0.nameOrPath } try expect(groups) == ["A", "P", "S", "Frameworks", "Products"] } @@ -506,8 +504,8 @@ class SourceGeneratorTests: XCTestCase { let pbxProj = try project.generatePbxProj() let mainGroup = try pbxProj.getMainGroup() - let group = mainGroup.childrenReferences.compactMap { pbxProj.objects.groups[$0]}.first { $0.nameOrPath == "Sources" }! - let names = group.childrenReferences.compactMap { pbxProj.objects.getFileElement(reference: $0)?.nameOrPath } + let group = mainGroup.children.compactMap { $0 as? PBXGroup }.first { $0.nameOrPath == "Sources" }! + let names = group.children.compactMap { $0.nameOrPath } try expect(names) == [ "1file.a", "10file.a", @@ -535,10 +533,10 @@ extension PBXProj { } if let buildPhase = buildPhase { - let buildFile = objects.buildFiles.values - .first(where: { $0.fileReference == fileReference.reference }) + let buildFile = buildFiles + .first(where: { $0.file == fileReference }) let actualBuildPhase = buildFile - .flatMap { buildFile in objects.buildPhases.values.first { $0.fileReferences.contains(buildFile.reference) } }?.buildPhase + .flatMap { buildFile in buildPhases.first { $0.files.contains(buildFile) } }?.buildPhase var error: String? if let buildPhase = buildPhase.buildPhase { @@ -567,17 +565,13 @@ extension PBXProj { } func getFileReference(paths: [String], names: [String], file: String = #file, line: Int = #line) -> PBXFileReference? { - guard let project = objects.projects.first?.value else { return nil } - guard let mainGroup = objects.groups.getReference(project.mainGroupReference) else { return nil } + guard let mainGroup = projects.first?.mainGroup else { return nil } return getFileReference(group: mainGroup, paths: paths, names: names) } func getMainGroup(function: String = #function, file: String = #file, line: Int = #line) throws -> PBXGroup { - guard let project = objects.projects.first?.value else { - throw failure("Couldn't find project", file: file, line: line) - } - guard let mainGroup = objects.groups.getReference(project.mainGroupReference) else { + guard let mainGroup = projects.first?.mainGroup else { throw failure("Couldn't find main group", file: file, line: line) } return mainGroup @@ -591,10 +585,10 @@ extension PBXProj { let restOfPath = Array(paths.dropFirst()) let restOfName = Array(names.dropFirst()) if restOfPath.isEmpty { - let fileReferences: [PBXFileReference] = group.childrenReferences.compactMap { self.objects.fileReferences.getReference($0) } + let fileReferences: [PBXFileReference] = group.children.compactMap { $0 as? PBXFileReference } return fileReferences.first { $0.path == path && $0.nameOrPath == name } } else { - let groups = group.childrenReferences.compactMap { self.objects.groups.getReference($0) } + let groups = group.children.compactMap { $0 as? PBXGroup } guard let group = groups.first(where: { $0.path == path && $0.nameOrPath == name }) else { return nil } return getFileReference(group: group, paths: restOfPath, names: restOfName) } From 243b26a4b0d677c5b4be4c09f41fe4a22acebfb5 Mon Sep 17 00:00:00 2001 From: Jerry Marino Date: Wed, 26 Sep 2018 10:51:53 -0700 Subject: [PATCH 04/77] Make validation of Xcode projects optional Validation requires several things of the Xcode project, one being that files are already on disk. In some cases, it's useful to generate projects containing files that don't exist on disk yet. Additionally, this is useful for testing purposes, and generating projects on a machine where the files don't exist. --- Sources/XcodeGenKit/ProjectGenerator.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index c1c70f58..5206880f 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -21,8 +21,10 @@ public class ProjectGenerator { return project.configs.first { $0.type == .release }! } - public func generateXcodeProject() throws -> XcodeProj { - try project.validate() + public func generateXcodeProject(validate: Bool = true) throws -> XcodeProj { + if validate { + try project.validate() + } let pbxProjGenerator = PBXProjGenerator(project: project) let pbxProject = try pbxProjGenerator.generate() let workspace = try generateWorkspace() From 4d77bbd2c72b9bc4d6ca6d423aebf5bbe6a0bdbb Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 17:31:43 +1000 Subject: [PATCH 05/77] upgrade circleci format --- .circleci/config.yml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ec28cdfb..6cc7aac6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,16 +5,29 @@ jobs: xcode: "9.3.0" steps: - checkout - - run: swift build - - run: swift test - - run: make build + - run: + name: Build + command: swift build + - run: + name: Test + command: swift test + - run: + name: Build release + command: make build macOS_swift_4.2: macos: xcode: "10.0.0" steps: - checkout - - run: swift build - - run: make build + - run: + name: Build + command: swift build + - run: + name: Test + command: swift test + #- run: + #name: Build release + #command: make build workflows: version: 2 workflow: From baafa7cffd71cf73de805273c238425d5506068d Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 18:03:35 +1000 Subject: [PATCH 06/77] add scheme variants --- ...S.xcscheme => App_iOS Production.xcscheme} | 0 .../xcschemes/App_iOS Staging.xcscheme | 142 ++++++++++++++++++ .../xcschemes/App_iOS Test.xcscheme | 142 ++++++++++++++++++ Tests/Fixtures/TestProject/project.yml | 4 + 4 files changed, 288 insertions(+) rename Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/{App_iOS.xcscheme => App_iOS Production.xcscheme} (100%) create mode 100644 Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme create mode 100644 Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme similarity index 100% rename from Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme rename to Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme new file mode 100644 index 00000000..6b9c262b --- /dev/null +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme new file mode 100644 index 00000000..ae3a97c6 --- /dev/null +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index c95cf784..d28e6ae1 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -80,6 +80,10 @@ targets: - App_iOS_Tests - App_iOS_UITests gatherCoverageData: true + configVariants: + - Test + - Staging + - Production commandLineArguments: MyEnabledArgument: true MyDisabledArgument: false From 82755f892059c2fcd0ee0ee595d93634cfd123cc Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 18:05:10 +1000 Subject: [PATCH 07/77] get watchOS app building --- Tests/Fixtures/TestProject/App_watchOS/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Fixtures/TestProject/App_watchOS/Info.plist b/Tests/Fixtures/TestProject/App_watchOS/Info.plist index faa65943..7d614116 100644 --- a/Tests/Fixtures/TestProject/App_watchOS/Info.plist +++ b/Tests/Fixtures/TestProject/App_watchOS/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 1.2 CFBundleVersion 1 UISupportedInterfaceOrientations From 3262fc8562c504a39427f779921f71006c4294c2 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 18:10:11 +1000 Subject: [PATCH 08/77] build test project on circleCI --- .circleci/config.yml | 17 ++++++++++++----- Tests/Fixtures/TestProject/build.sh | 5 +++++ build-fixtures.sh | 5 +++++ 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100755 Tests/Fixtures/TestProject/build.sh create mode 100755 build-fixtures.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 6cc7aac6..611c3cf8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,6 +14,9 @@ jobs: - run: name: Build release command: make build + - run: + name: Build Test Project + command: ./build-fixtures.sh macOS_swift_4.2: macos: xcode: "10.0.0" @@ -22,12 +25,16 @@ jobs: - run: name: Build command: swift build + # disabled till UUID's are stable + # - run: + # name: Test + # command: swift test - run: - name: Test - command: swift test - #- run: - #name: Build release - #command: make build + name: Build release + command: make build + - run: + name: Build Test Project + command: ./build-fixtures.sh workflows: version: 2 workflow: diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh new file mode 100755 index 00000000..03d71220 --- /dev/null +++ b/Tests/Fixtures/TestProject/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +carthage bootstrap --platform ios,watchos --cache-builds +xcodebuild -project Project.xcodeproj -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO diff --git a/build-fixtures.sh b/build-fixtures.sh new file mode 100755 index 00000000..f5ca8ebe --- /dev/null +++ b/build-fixtures.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +cd Tests/Fixtures/TestProject +./build.sh From f5bebf57de73a8f5fb40082fcb83df87bdaea568 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 18:25:39 +1000 Subject: [PATCH 09/77] swap Alamofire dependency for faster building Result --- .../InterfaceController.swift | 4 +- Tests/Fixtures/TestProject/Cartfile | 2 +- Tests/Fixtures/TestProject/Cartfile.resolved | 2 +- .../Project.xcodeproj/project.pbxproj | 68 +++++++++---------- Tests/Fixtures/TestProject/build.sh | 2 +- Tests/Fixtures/TestProject/project.yml | 6 +- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift b/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift index 712d399a..2d82f8a6 100644 --- a/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift +++ b/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift @@ -1,4 +1,4 @@ -import Alamofire +import Result import Foundation import WatchKit @@ -6,7 +6,7 @@ class InterfaceController: WKInterfaceController { override func awake(withContext context: Any?) { super.awake(withContext: context) - let method = HTTPMethod.get + let result: Result = .success("value") // Configure interface objects here. } diff --git a/Tests/Fixtures/TestProject/Cartfile b/Tests/Fixtures/TestProject/Cartfile index 821b0ae3..27636fa1 100644 --- a/Tests/Fixtures/TestProject/Cartfile +++ b/Tests/Fixtures/TestProject/Cartfile @@ -1 +1 @@ -github "Alamofire/Alamofire" +github "antitypical/Result" \ No newline at end of file diff --git a/Tests/Fixtures/TestProject/Cartfile.resolved b/Tests/Fixtures/TestProject/Cartfile.resolved index 9efe68da..23aa9709 100644 --- a/Tests/Fixtures/TestProject/Cartfile.resolved +++ b/Tests/Fixtures/TestProject/Cartfile.resolved @@ -1 +1 @@ -github "Alamofire/Alamofire" "4.7.2" +github "antitypical/Result" "4.0.0" diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index badfd0f1..43a667da 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -24,7 +24,7 @@ /* Begin PBXBuildFile section */ BF_138356261076 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_363921640403 /* InterfaceController.swift */; }; - BF_139519317795 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_452853029807 /* Alamofire.framework */; }; + BF_140777424236 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; BF_167705969896 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_145531354566 /* TestProjectUITests.swift */; }; BF_182635022050 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_830053537293 /* Assets.xcassets */; }; BF_184447863946 = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; }; @@ -34,7 +34,6 @@ BF_211435872001 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG_473000061463 /* Localizable.strings */; }; BF_212221512596 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_470929579339 /* StaticLibrary.swift */; }; BF_215463341392 /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; }; - BF_217053936758 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; }; BF_225293845818 = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; }; BF_237760701422 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_987043315473 /* Assets.xcassets */; }; BF_239684316986 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -55,19 +54,17 @@ BF_334778067417 = {isa = PBXBuildFile; fileRef = FR_783122899910 /* App_iOS_Tests.xctest */; }; BF_337656089700 = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; BF_360196406184 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_722239415598 /* TestProjectTests.swift */; }; - BF_415651546539 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; }; BF_425679397292 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_441538117869 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_455187765496 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_131384036341 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_456457948943 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; - BF_458111705914 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; }; BF_461044234706 /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_474063668246 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; }; BF_496472559782 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_501771188469 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_503484983186 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_196911129660 /* MoreUnder.swift */; }; BF_510053944904 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_518775144316 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_229826849033 /* SomeXPCService.xpc */; }; BF_526105569599 = {isa = PBXBuildFile; fileRef = FR_437179166843 /* StaticLibrary_Swift.a */; }; - BF_535236390262 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; }; BF_538515166673 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_256263906698 /* LaunchScreen.storyboard */; }; BF_552913093094 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_561304997165 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; @@ -76,41 +73,44 @@ BF_607543323797 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; BF_612351978356 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_264279911176 /* Interface.storyboard */; }; BF_624802436672 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; + BF_629554450880 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; }; BF_632297340262 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; BF_647038614509 /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_650026899468 = {isa = PBXBuildFile; fileRef = FR_602719163962 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_670499288392 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = VG_229021855709 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; BF_681504666330 = {isa = PBXBuildFile; fileRef = FR_825232110500 /* App_iOS.app */; }; + BF_695553653993 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; BF_703054643820 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_310979699934 /* MessagesViewController.swift */; }; BF_704149935229 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; BF_721498080533 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = FR_257073931060 /* ResourceFolder */; }; BF_725992639588 = {isa = PBXBuildFile; fileRef = FR_480982116789 /* App_macOS.app */; }; BF_732745079658 = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; }; BF_734036107922 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_742449020987 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; }; BF_747443236192 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_752022362638 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; + BF_752504835660 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_669811003841 /* Result.framework */; }; BF_757906110813 = {isa = PBXBuildFile; fileRef = FR_662315837182 /* Framework.framework */; }; BF_770495922915 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; + BF_780116576846 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_786389356145 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; BF_803757127643 = {isa = PBXBuildFile; fileRef = FR_739513596122 /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_807556340853 /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_837374194182 /* Empty.h */; }; BF_813358525536 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_826731453953 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_131384036341 /* Result.framework */; }; BF_828878846239 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_201160695646 /* MainInterface.storyboard */; }; BF_830383951771 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_304712043717 /* NotificationController.swift */; }; BF_854463933379 = {isa = PBXBuildFile; fileRef = FR_438704538506 /* Framework.framework */; }; - BF_854691035877 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; }; BF_855988705556 /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_602719163945 /* XPC_Service.m */; }; BF_860391087135 /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_408537768279 /* StandaloneAssets.xcassets */; }; - BF_863842036151 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_870702193513 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_618687462494 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_874851989284 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_131384036341 /* Result.framework */; }; BF_892119987440 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_854336462818 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - BF_897881229855 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF_898051828670 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; }; BF_901390118565 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; BF_905038616071 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_905617636654 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_940936137577 = {isa = PBXBuildFile; fileRef = FR_123503999387 /* App_iOS_UITests.xctest */; }; BF_943177036061 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; + BF_997494126001 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -264,7 +264,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - BF_863842036151 /* Alamofire.framework in Embed Frameworks */, + BF_997494126001 /* Result.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -275,7 +275,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - BF_501771188469 /* Alamofire.framework in Embed Frameworks */, + BF_780116576846 /* Result.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -298,7 +298,7 @@ dstSubfolderSpec = 10; files = ( BF_552913093094 /* Framework.framework in Embed Frameworks */, - BF_897881229855 /* Alamofire.framework in Embed Frameworks */, + BF_455187765496 /* Result.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -352,6 +352,7 @@ /* Begin PBXFileReference section */ FR_118219888726 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; FR_123503999387 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_131384036341 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_145531354566 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; FR_151462316179 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; FR_172952167809 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; @@ -364,7 +365,6 @@ FR_247808626608 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_256263906698 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; FR_257073931060 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; - FR_257516580010 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; FR_263408310401 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; FR_264279911176 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; FR_293137352077 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -377,10 +377,8 @@ FR_377082606829 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_399755008402 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_408537768279 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; }; - FR_410645050443 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; FR_437179166843 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_438704538506 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_452853029807 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; FR_461737784133 /* module.modulemap */ = {isa = PBXFileReference; path = module.modulemap; sourceTree = ""; }; FR_470929579339 /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; }; FR_472296042419 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -394,6 +392,7 @@ FR_525119120469 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_530852296303 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_570918052822 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; + FR_584425140013 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_587738154368 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_602633703434 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; FR_602719163945 /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; }; @@ -407,6 +406,7 @@ FR_660690926982 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; FR_662315837182 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_665156855283 /* module.modulemap */ = {isa = PBXFileReference; path = module.modulemap; sourceTree = ""; }; + FR_669811003841 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_675266829517 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; FR_698230898030 /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; "FR_698230898030-1" /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; }; @@ -415,7 +415,7 @@ FR_739513596122 /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; FR_746876637628 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; }; FR_748548478992 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; }; - FR_752394658615 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; }; + FR_763057275314 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_771029596306 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; FR_775316160345 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; }; FR_783122899910 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -437,7 +437,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_415651546539 /* Alamofire.framework in Frameworks */, + BF_786389356145 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -445,7 +445,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_898051828670 /* Alamofire.framework in Frameworks */, + BF_695553653993 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -453,7 +453,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_742449020987 /* Alamofire.framework in Frameworks */, + BF_629554450880 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -461,8 +461,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_535236390262 /* Alamofire.framework in Frameworks */, BF_597639300414 /* Framework.framework in Frameworks */, + BF_874851989284 /* Result.framework in Frameworks */, BF_770495922915 /* StaticLibrary_ObjC.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -471,7 +471,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_217053936758 /* Alamofire.framework in Frameworks */, + BF_140777424236 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -479,7 +479,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_854691035877 /* Alamofire.framework in Frameworks */, + BF_826731453953 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -487,7 +487,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_139519317795 /* Alamofire.framework in Frameworks */, + BF_752504835660 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -495,8 +495,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_458111705914 /* Alamofire.framework in Frameworks */, BF_324363145049 /* Framework.framework in Frameworks */, + BF_474063668246 /* Result.framework in Frameworks */, BF_943177036061 /* StaticLibrary_ObjC.a in Frameworks */, BF_215463341392 /* SomeFramework.framework in Frameworks */, ); @@ -545,7 +545,7 @@ G_2262017438925 /* iOS */ = { isa = PBXGroup; children = ( - FR_410645050443 /* Alamofire.framework */, + FR_763057275314 /* Result.framework */, ); path = iOS; sourceTree = ""; @@ -553,7 +553,7 @@ G_2262017442691 /* Mac */ = { isa = PBXGroup; children = ( - FR_257516580010 /* Alamofire.framework */, + FR_131384036341 /* Result.framework */, ); path = Mac; sourceTree = ""; @@ -694,7 +694,7 @@ G_8244488572839 /* watchOS */ = { isa = PBXGroup; children = ( - FR_752394658615 /* Alamofire.framework */, + FR_584425140013 /* Result.framework */, ); path = watchOS; sourceTree = ""; @@ -794,7 +794,7 @@ G_8628897169668 /* tvOS */ = { isa = PBXGroup; children = ( - FR_452853029807 /* Alamofire.framework */, + FR_669811003841 /* Result.framework */, ); path = tvOS; sourceTree = ""; @@ -1307,11 +1307,11 @@ files = ( ); inputPaths = ( - "$(SRCROOT)/Carthage/Build/watchOS/Alamofire.framework", + "$(SRCROOT)/Carthage/Build/watchOS/Result.framework", ); name = Carthage; outputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework", + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1337,11 +1337,11 @@ files = ( ); inputPaths = ( - "$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework", + "$(SRCROOT)/Carthage/Build/iOS/Result.framework", ); name = Carthage; outputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework", + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh index 03d71220..b34016a0 100755 --- a/Tests/Fixtures/TestProject/build.sh +++ b/Tests/Fixtures/TestProject/build.sh @@ -1,5 +1,5 @@ #!/bin/bash set -e -carthage bootstrap --platform ios,watchos --cache-builds +carthage bootstrap --cache-builds xcodebuild -project Project.xcodeproj -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index d28e6ae1..ab05ac4b 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -71,7 +71,7 @@ targets: dependencies: - target: Framework_iOS - target: StaticLibrary_ObjC - - carthage: Alamofire + - carthage: Result - target: App_watchOS - target: iMessageApp - framework: Vendor/SomeFramework.framework @@ -115,7 +115,7 @@ targets: settings: PRODUCT_BUNDLE_IDENTIFIER: com.project.app.watch.extension dependencies: - - carthage: Alamofire + - carthage: Result iMessageApp: type: application.messages @@ -157,7 +157,7 @@ targets: - name: MyScript path: scripts/script.sh dependencies: - - carthage: Alamofire + - carthage: Result - target: StaticLibrary_ObjC App_iOS_Tests: type: bundle.unit-test From 7f7b3d3d94fe536254a61f068100e13496a4170f Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 20:08:48 +1000 Subject: [PATCH 10/77] add xcpretty to output --- .circleci/config.yml | 4 ++-- Tests/Fixtures/TestProject/build.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 611c3cf8..918d861b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,7 +10,7 @@ jobs: command: swift build - run: name: Test - command: swift test + command: swift test 2>&1 | xcpretty - run: name: Build release command: make build @@ -28,7 +28,7 @@ jobs: # disabled till UUID's are stable # - run: # name: Test - # command: swift test + # command: swift test 2>&1 | xcpretty - run: name: Build release command: make build diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh index b34016a0..884a5a1e 100755 --- a/Tests/Fixtures/TestProject/build.sh +++ b/Tests/Fixtures/TestProject/build.sh @@ -2,4 +2,4 @@ set -e carthage bootstrap --cache-builds -xcodebuild -project Project.xcodeproj -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO +xcodebuild -project Project.xcodeproj -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty From ab8f43f587f9d441eaccbda8143b9adbdcc49293 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 20:29:50 +1000 Subject: [PATCH 11/77] build TestProject macOS app --- .../TestProject/App_macOS/AppDelegate.swift | 25 + .../AppIcon.appiconset/Contents.json | 58 ++ .../App_macOS/Assets.xcassets/Contents.json | 6 + .../App_macOS/Base.lproj/Main.storyboard | 717 +++++++++++++++++ .../Fixtures/TestProject/App_macOS/Info.plist | 30 + .../App_macOS/ViewController.swift | 26 + .../Project.xcodeproj/project.pbxproj | 745 ++++++++++++++---- Tests/Fixtures/TestProject/build.sh | 5 + Tests/Fixtures/TestProject/project.yml | 7 +- 9 files changed, 1455 insertions(+), 164 deletions(-) create mode 100644 Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift create mode 100644 Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/Contents.json create mode 100644 Tests/Fixtures/TestProject/App_macOS/Base.lproj/Main.storyboard create mode 100644 Tests/Fixtures/TestProject/App_macOS/Info.plist create mode 100644 Tests/Fixtures/TestProject/App_macOS/ViewController.swift diff --git a/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift b/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift new file mode 100644 index 00000000..c4068e8a --- /dev/null +++ b/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift @@ -0,0 +1,25 @@ +// +// AppDelegate.swift +// dfg +// +// Created by Yonas Kolb on 29/9/18. +// + +import Cocoa + +@NSApplicationMain +class AppDelegate: NSObject, NSApplicationDelegate { + + + + func applicationDidFinishLaunching(_ aNotification: Notification) { + // Insert code here to initialize your application + } + + func applicationWillTerminate(_ aNotification: Notification) { + // Insert code here to tear down your application + } + + +} + diff --git a/Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..2db2b1c7 --- /dev/null +++ b/Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/Contents.json b/Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Tests/Fixtures/TestProject/App_macOS/Base.lproj/Main.storyboard b/Tests/Fixtures/TestProject/App_macOS/Base.lproj/Main.storyboard new file mode 100644 index 00000000..bf7fd51b --- /dev/null +++ b/Tests/Fixtures/TestProject/App_macOS/Base.lproj/Main.storyboard @@ -0,0 +1,717 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/TestProject/App_macOS/Info.plist b/Tests/Fixtures/TestProject/App_macOS/Info.plist new file mode 100644 index 00000000..e40caef4 --- /dev/null +++ b/Tests/Fixtures/TestProject/App_macOS/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/Tests/Fixtures/TestProject/App_macOS/ViewController.swift b/Tests/Fixtures/TestProject/App_macOS/ViewController.swift new file mode 100644 index 00000000..bb6301bf --- /dev/null +++ b/Tests/Fixtures/TestProject/App_macOS/ViewController.swift @@ -0,0 +1,26 @@ +// +// ViewController.swift +// dfg +// +// Created by Yonas Kolb on 29/9/18. +// + +import Cocoa + +class ViewController: NSViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + override var representedObject: Any? { + didSet { + // Update the view, if already loaded. + } + } + + +} + diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 43a667da..fbd3b463 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -23,13 +23,18 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + BF_119005558336 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; BF_138356261076 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_363921640403 /* InterfaceController.swift */; }; BF_140777424236 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; + BF_143559378694 = {isa = PBXBuildFile; fileRef = FR_919543414727 /* StaticLibrary_ObjC.a */; }; + BF_150525852574 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; + BF_159058095963 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_167705969896 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_145531354566 /* TestProjectUITests.swift */; }; BF_182635022050 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_830053537293 /* Assets.xcassets */; }; BF_184447863946 = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; }; BF_186245454304 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_118219888726 /* LocalizedStoryboard.storyboard */; }; BF_190684453680 = {isa = PBXBuildFile; fileRef = FR_376569054786 /* XPC Service.xpc */; }; + BF_190695186098 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; BF_206432481076 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_340586388409 /* ExtensionDelegate.swift */; }; BF_211435872001 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG_473000061463 /* Localizable.strings */; }; BF_212221512596 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_470929579339 /* StaticLibrary.swift */; }; @@ -44,21 +49,25 @@ BF_280535243540 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_609193904586 /* Main.storyboard */; }; BF_284620660317 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FR_238161558082 /* MyBundle.bundle */; }; BF_292474606791 = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; }; + BF_294676705190 = {isa = PBXBuildFile; fileRef = FR_530818555464 /* StaticLibrary_ObjC.a */; }; BF_303822704662 = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; }; BF_304637845091 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_151462316179 /* main.m */; }; BF_308631758818 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_376569054786 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_309594709686 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_511515916115 /* Assets.xcassets */; }; BF_314868376788 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = VG_746876637628 /* Localizable.stringsdict */; }; BF_324363145049 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; }; BF_331192862207 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_481575785861 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; BF_334321520545 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_377082606829 /* Assets.xcassets */; }; BF_334778067417 = {isa = PBXBuildFile; fileRef = FR_783122899910 /* App_iOS_Tests.xctest */; }; - BF_337656089700 = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; BF_360196406184 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_722239415598 /* TestProjectTests.swift */; }; + BF_387462025786 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_202279841299 /* Main.storyboard */; }; BF_425679397292 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_434838320682 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; BF_441538117869 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_455187765496 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_131384036341 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_456457948943 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; BF_461044234706 /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_463608041925 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; BF_474063668246 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; }; BF_496472559782 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_503484983186 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_196911129660 /* MoreUnder.swift */; }; @@ -69,17 +78,20 @@ BF_552913093094 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_561304997165 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; BF_563614389392 = {isa = PBXBuildFile; fileRef = FR_618687462494 /* iMessageExtension.appex */; }; + BF_575042573791 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_597639300414 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; }; - BF_607543323797 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; + BF_606517090398 = {isa = PBXBuildFile; fileRef = FR_281269793733 /* StaticLibrary_ObjC.a */; }; BF_612351978356 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_264279911176 /* Interface.storyboard */; }; BF_624802436672 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; + BF_628591712051 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_629554450880 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; }; - BF_632297340262 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; BF_647038614509 /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_650026899468 = {isa = PBXBuildFile; fileRef = FR_602719163962 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_664393732795 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_281269793733 /* StaticLibrary_ObjC.a */; }; BF_670499288392 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = VG_229021855709 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; BF_681504666330 = {isa = PBXBuildFile; fileRef = FR_825232110500 /* App_iOS.app */; }; BF_695553653993 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; + BF_698752059275 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_285483315484 /* AppDelegate.swift */; }; BF_703054643820 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_310979699934 /* MessagesViewController.swift */; }; BF_704149935229 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; BF_721498080533 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = FR_257073931060 /* ResourceFolder */; }; @@ -87,29 +99,33 @@ BF_732745079658 = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; }; BF_734036107922 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_747443236192 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - BF_752022362638 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_752504835660 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_669811003841 /* Result.framework */; }; BF_757906110813 = {isa = PBXBuildFile; fileRef = FR_662315837182 /* Framework.framework */; }; - BF_770495922915 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; + BF_767750315119 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; BF_780116576846 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_781565567230 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_786389356145 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; BF_803757127643 = {isa = PBXBuildFile; fileRef = FR_739513596122 /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_804650723499 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; BF_807556340853 /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_837374194182 /* Empty.h */; }; BF_813358525536 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_826731453953 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_131384036341 /* Result.framework */; }; BF_828878846239 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_201160695646 /* MainInterface.storyboard */; }; BF_830383951771 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_304712043717 /* NotificationController.swift */; }; + BF_849675970921 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_919543414727 /* StaticLibrary_ObjC.a */; }; BF_854463933379 = {isa = PBXBuildFile; fileRef = FR_438704538506 /* Framework.framework */; }; BF_855988705556 /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_602719163945 /* XPC_Service.m */; }; BF_860391087135 /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_408537768279 /* StandaloneAssets.xcassets */; }; BF_870702193513 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_618687462494 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_874851989284 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_131384036341 /* Result.framework */; }; BF_892119987440 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_854336462818 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_895856588273 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; BF_901390118565 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; + BF_901508574566 = {isa = PBXBuildFile; fileRef = FR_704531614016 /* StaticLibrary_ObjC.a */; }; + BF_903574875171 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_777446672298 /* ViewController.swift */; }; BF_905038616071 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_472296042419 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_905617636654 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_940936137577 = {isa = PBXBuildFile; fileRef = FR_123503999387 /* App_iOS_UITests.xctest */; }; - BF_943177036061 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; }; BF_997494126001 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ @@ -121,6 +137,20 @@ remoteGlobalIDString = NT_472296042419; remoteInfo = Framework_iOS; }; + CIP_14121946807 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_8448771205358 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_281269793733; + remoteInfo = StaticLibrary_ObjC_macOS; + }; + CIP_15961934258 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_8448771205358 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_281269793733; + remoteInfo = StaticLibrary_ObjC_macOS; + }; CIP_19329118292 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; @@ -135,6 +165,13 @@ remoteGlobalIDString = NT_825232110500; remoteInfo = App_iOS; }; + CIP_23215045448 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_8448771205358 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_919543414727; + remoteInfo = StaticLibrary_ObjC_iOS; + }; CIP_23558050412 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; @@ -156,26 +193,19 @@ remoteGlobalIDString = NT_618687462494; remoteInfo = iMessageExtension; }; - CIP_33710394010 /* PBXContainerItemProxy */ = { + CIP_58718468645 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; + remoteGlobalIDString = NT_704531614016; + remoteInfo = StaticLibrary_ObjC_tvOS; }; - CIP_62903878492 /* PBXContainerItemProxy */ = { + CIP_66582851615 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; - CIP_66745555235 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; + remoteGlobalIDString = NT_919543414727; + remoteInfo = StaticLibrary_ObjC_iOS; }; CIP_67619158112 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -184,13 +214,6 @@ remoteGlobalIDString = NT_825232110500; remoteInfo = App_iOS; }; - CIP_72152212817 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; CIP_74378499241 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; @@ -205,13 +228,6 @@ remoteGlobalIDString = NT_472296042419; remoteInfo = Framework_iOS; }; - CIP_78441234790 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = P_8448771205358 /* Project object */; - proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; - }; CIP_82410178775 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; @@ -226,16 +242,27 @@ remoteGlobalIDString = NT_825232110500; remoteInfo = App_iOS; }; - CIP_95747640947 /* PBXContainerItemProxy */ = { + CIP_90821786544 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; proxyType = 1; - remoteGlobalIDString = NT_399755008402; - remoteInfo = StaticLibrary_ObjC; + remoteGlobalIDString = NT_530818555464; + remoteInfo = StaticLibrary_ObjC_watchOS; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + CFBP_1101127867 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + BF_190695186098 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_159058095963 /* module.modulemap in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CFBP_2836118931 /* Embed Watch Content */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -247,14 +274,25 @@ name = "Embed Watch Content"; runOnlyForDeploymentPostprocessing = 0; }; - CFBP_3265670993 /* CopyFiles */ = { + CFBP_3044397014 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - BF_607543323797 /* StaticLibrary_ObjC.h in CopyFiles */, - BF_752022362638 /* module.modulemap in CopyFiles */, + BF_463608041925 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_781565567230 /* module.modulemap in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CFBP_3864293855 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + BF_119005558336 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_628591712051 /* module.modulemap in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -336,6 +374,17 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + CFBP_7637809077 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + BF_767750315119 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_575042573791 /* module.modulemap in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CFBP_8368933518 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -355,10 +404,12 @@ FR_131384036341 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_145531354566 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; FR_151462316179 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + FR_160440456271 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_172952167809 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; FR_183521624014 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; }; FR_196911129660 /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; }; FR_201160695646 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + FR_202279841299 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; FR_229826849033 /* SomeXPCService.xpc */ = {isa = PBXFileReference; path = SomeXPCService.xpc; sourceTree = ""; }; FR_232605427418 /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; }; FR_238161558082 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; }; @@ -367,6 +418,8 @@ FR_257073931060 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; FR_263408310401 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; FR_264279911176 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; + FR_281269793733 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_285483315484 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; FR_293137352077 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_304712043717 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; }; FR_310979699934 /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; @@ -375,7 +428,6 @@ FR_363921640403 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; FR_376569054786 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; FR_377082606829 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FR_399755008402 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_408537768279 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; }; FR_437179166843 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_438704538506 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -389,7 +441,9 @@ FR_500792082643 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; }; FR_505327409380 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_507023492251 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_511515916115 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_525119120469 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_530818555464 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_530852296303 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_570918052822 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; FR_584425140013 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; @@ -410,6 +464,7 @@ FR_675266829517 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; FR_698230898030 /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; "FR_698230898030-1" /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; }; + FR_704531614016 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_722239415598 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; }; FR_725187762757 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_739513596122 /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; @@ -418,6 +473,7 @@ FR_763057275314 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_771029596306 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; FR_775316160345 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; }; + FR_777446672298 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; FR_783122899910 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FR_796781152159 /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; }; FR_803921963291 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -427,6 +483,7 @@ FR_837374194182 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; FR_854336462818 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; FR_868653349092 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_919543414727 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_935153865209 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; FR_948931241088 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_987043315473 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -463,7 +520,7 @@ files = ( BF_597639300414 /* Framework.framework in Frameworks */, BF_874851989284 /* Result.framework in Frameworks */, - BF_770495922915 /* StaticLibrary_ObjC.a in Frameworks */, + BF_664393732795 /* StaticLibrary_ObjC.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -497,7 +554,7 @@ files = ( BF_324363145049 /* Framework.framework in Frameworks */, BF_474063668246 /* Result.framework in Frameworks */, - BF_943177036061 /* StaticLibrary_ObjC.a in Frameworks */, + BF_849675970921 /* StaticLibrary_ObjC.a in Frameworks */, BF_215463341392 /* SomeFramework.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -636,6 +693,18 @@ path = Vendor; sourceTree = ""; }; + G_4809821167898 /* App_macOS */ = { + isa = PBXGroup; + children = ( + FR_285483315484 /* AppDelegate.swift */, + FR_511515916115 /* Assets.xcassets */, + FR_160440456271 /* Info.plist */, + VG_202279841299 /* Main.storyboard */, + FR_777446672298 /* ViewController.swift */, + ); + path = App_macOS; + sourceTree = ""; + }; G_5070234922517 /* App_watchOS Extension */ = { isa = PBXGroup; children = ( @@ -742,6 +811,7 @@ G_8252321105004 /* App */, G_7831228999101 /* App_iOS_Tests */, G_1235039993875 /* App_iOS_UITests */, + G_4809821167898 /* App_macOS */, G_3246710779368 /* App_watchOS */, G_5070234922517 /* App_watchOS Extension */, G_8340618952527 /* Configs */, @@ -784,7 +854,10 @@ FR_472296042419 /* Framework.framework */, FR_935153865209 /* iMessageApp.app */, FR_618687462494 /* iMessageExtension.appex */, - FR_399755008402 /* StaticLibrary_ObjC.a */, + FR_530818555464 /* StaticLibrary_ObjC.a */, + FR_704531614016 /* StaticLibrary_ObjC.a */, + FR_919543414727 /* StaticLibrary_ObjC.a */, + FR_281269793733 /* StaticLibrary_ObjC.a */, FR_437179166843 /* StaticLibrary_Swift.a */, FR_376569054786 /* XPC Service.xpc */, ); @@ -874,6 +947,22 @@ productReference = FR_123503999387 /* App_iOS_UITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; + NT_281269793733 /* StaticLibrary_ObjC_macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_281269793733 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */; + buildPhases = ( + SBP_28126979373 /* Sources */, + CFBP_3044397014 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_macOS; + productName = StaticLibrary_ObjC_macOS; + productReference = FR_281269793733 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; NT_324671077936 /* App_watchOS */ = { isa = PBXNativeTarget; buildConfigurationList = CL_324671077936 /* Build configuration list for PBXNativeTarget "App_watchOS" */; @@ -909,22 +998,6 @@ productReference = FR_376569054786 /* XPC Service.xpc */; productType = "com.apple.product-type.xpc-service"; }; - NT_399755008402 /* StaticLibrary_ObjC */ = { - isa = PBXNativeTarget; - buildConfigurationList = CL_399755008402 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC" */; - buildPhases = ( - SBP_39975500840 /* Sources */, - CFBP_3265670993 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_ObjC; - productName = StaticLibrary_ObjC; - productReference = FR_399755008402 /* StaticLibrary_ObjC.a */; - productType = "com.apple.product-type.library.static"; - }; NT_437179166843 /* StaticLibrary_Swift */ = { isa = PBXNativeTarget; buildConfigurationList = CL_437179166843 /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */; @@ -953,7 +1026,7 @@ buildRules = ( ); dependencies = ( - TD_784412347908 /* PBXTargetDependency */, + TD_908217865445 /* PBXTargetDependency */, ); name = Framework_watchOS; productName = Framework_watchOS; @@ -972,7 +1045,7 @@ buildRules = ( ); dependencies = ( - TD_667455552356 /* PBXTargetDependency */, + TD_665828516151 /* PBXTargetDependency */, ); name = Framework_iOS; productName = Framework_iOS; @@ -984,6 +1057,7 @@ buildConfigurationList = CL_480982116789 /* Build configuration list for PBXNativeTarget "App_macOS" */; buildPhases = ( SBP_48098211678 /* Sources */, + RBP_48098211678 /* Resources */, CFBP_8368933518 /* CopyFiles */, FBP_48098211678 /* Frameworks */, CFBP_4930089528 /* Embed Frameworks */, @@ -992,7 +1066,7 @@ ); dependencies = ( TD_235580504123 /* PBXTargetDependency */, - TD_629038784927 /* PBXTargetDependency */, + TD_159619342582 /* PBXTargetDependency */, TD_743784992411 /* PBXTargetDependency */, ); name = App_macOS; @@ -1029,13 +1103,29 @@ buildRules = ( ); dependencies = ( - TD_337103940101 /* PBXTargetDependency */, + TD_141219468074 /* PBXTargetDependency */, ); name = Framework_macOS; productName = Framework_macOS; productReference = FR_525119120469 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; + NT_530818555464 /* StaticLibrary_ObjC_watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_530818555464 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */; + buildPhases = ( + SBP_53081855546 /* Sources */, + CFBP_3864293855 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_watchOS; + productName = StaticLibrary_ObjC_watchOS; + productReference = FR_530818555464 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; NT_618687462494 /* iMessageExtension */ = { isa = PBXNativeTarget; buildConfigurationList = CL_618687462494 /* Build configuration list for PBXNativeTarget "iMessageExtension" */; @@ -1064,13 +1154,29 @@ buildRules = ( ); dependencies = ( - TD_957476409477 /* PBXTargetDependency */, + TD_587184686458 /* PBXTargetDependency */, ); name = Framework_tvOS; productName = Framework_tvOS; productReference = FR_662315837182 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; + NT_704531614016 /* StaticLibrary_ObjC_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_704531614016 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */; + buildPhases = ( + SBP_70453161401 /* Sources */, + CFBP_7637809077 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_tvOS; + productName = StaticLibrary_ObjC_tvOS; + productReference = FR_704531614016 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; NT_783122899910 /* App_iOS_Tests */ = { isa = PBXNativeTarget; buildConfigurationList = CL_783122899910 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */; @@ -1107,7 +1213,7 @@ dependencies = ( TD_824101787753 /* PBXTargetDependency */, TD_109724965966 /* PBXTargetDependency */, - TD_721522128177 /* PBXTargetDependency */, + TD_232150454486 /* PBXTargetDependency */, TD_288560876254 /* PBXTargetDependency */, ); name = App_iOS; @@ -1115,6 +1221,22 @@ productReference = FR_825232110500 /* App_iOS.app */; productType = "com.apple.product-type.application"; }; + NT_919543414727 /* StaticLibrary_ObjC_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_919543414727 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */; + buildPhases = ( + SBP_91954341472 /* Sources */, + CFBP_1101127867 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_iOS; + productName = StaticLibrary_ObjC_iOS; + productReference = FR_919543414727 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; NT_935153865209 /* iMessageApp */ = { isa = PBXNativeTarget; buildConfigurationList = CL_935153865209 /* Build configuration list for PBXNativeTarget "iMessageApp" */; @@ -1178,7 +1300,10 @@ NT_662315837182 /* Framework_tvOS */, NT_438704538506 /* Framework_watchOS */, LT_479264660374 /* Legacy */, - NT_399755008402 /* StaticLibrary_ObjC */, + NT_919543414727 /* StaticLibrary_ObjC_iOS */, + NT_281269793733 /* StaticLibrary_ObjC_macOS */, + NT_704531614016 /* StaticLibrary_ObjC_tvOS */, + NT_530818555464 /* StaticLibrary_ObjC_watchOS */, NT_437179166843 /* StaticLibrary_Swift */, AT_445731917037 /* SuperTarget */, NT_376569054786 /* XPC Service */, @@ -1198,6 +1323,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + RBP_48098211678 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_309594709686 /* Assets.xcassets in Resources */, + BF_387462025786 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; RBP_50702349225 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1400,6 +1534,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_28126979373 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_804650723499 /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_32467107793 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1416,14 +1558,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - SBP_39975500840 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BF_632297340262 /* StaticLibrary_ObjC.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; SBP_43717916684 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1459,7 +1593,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + BF_698752059275 /* AppDelegate.swift in Sources */, BF_704149935229 /* Standalone.swift in Sources */, + BF_903574875171 /* ViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1481,6 +1617,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_53081855546 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_150525852574 /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_61868746249 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1497,6 +1641,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_70453161401 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_895856588273 /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_78312289991 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1517,6 +1669,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_91954341472 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_434838320682 /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_93515386520 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1532,6 +1692,16 @@ target = NT_472296042419 /* Framework_iOS */; targetProxy = CIP_10972496596 /* PBXContainerItemProxy */; }; + TD_141219468074 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = NT_281269793733 /* StaticLibrary_ObjC_macOS */; + targetProxy = CIP_14121946807 /* PBXContainerItemProxy */; + }; + TD_159619342582 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = NT_281269793733 /* StaticLibrary_ObjC_macOS */; + targetProxy = CIP_15961934258 /* PBXContainerItemProxy */; + }; TD_193291182921 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = NT_507023492251 /* App_watchOS Extension */; @@ -1542,6 +1712,11 @@ target = NT_825232110500 /* App_iOS */; targetProxy = CIP_20801090045 /* PBXContainerItemProxy */; }; + TD_232150454486 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = NT_919543414727 /* StaticLibrary_ObjC_iOS */; + targetProxy = CIP_23215045448 /* PBXContainerItemProxy */; + }; TD_235580504123 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = NT_525119120469 /* Framework_macOS */; @@ -1557,31 +1732,21 @@ target = NT_618687462494 /* iMessageExtension */; targetProxy = CIP_31792113134 /* PBXContainerItemProxy */; }; - TD_337103940101 /* PBXTargetDependency */ = { + TD_587184686458 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_33710394010 /* PBXContainerItemProxy */; + target = NT_704531614016 /* StaticLibrary_ObjC_tvOS */; + targetProxy = CIP_58718468645 /* PBXContainerItemProxy */; }; - TD_629038784927 /* PBXTargetDependency */ = { + TD_665828516151 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_62903878492 /* PBXContainerItemProxy */; - }; - TD_667455552356 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_66745555235 /* PBXContainerItemProxy */; + target = NT_919543414727 /* StaticLibrary_ObjC_iOS */; + targetProxy = CIP_66582851615 /* PBXContainerItemProxy */; }; TD_676191581124 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = NT_825232110500 /* App_iOS */; targetProxy = CIP_67619158112 /* PBXContainerItemProxy */; }; - TD_721522128177 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_72152212817 /* PBXContainerItemProxy */; - }; TD_743784992411 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = NT_376569054786 /* XPC Service */; @@ -1592,11 +1757,6 @@ target = NT_472296042419 /* Framework_iOS */; targetProxy = CIP_74741847386 /* PBXContainerItemProxy */; }; - TD_784412347908 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_78441234790 /* PBXContainerItemProxy */; - }; TD_824101787753 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = NT_324671077936 /* App_watchOS */; @@ -1607,10 +1767,10 @@ target = NT_825232110500 /* App_iOS */; targetProxy = CIP_88714386547 /* PBXContainerItemProxy */; }; - TD_957476409477 /* PBXTargetDependency */ = { + TD_908217865445 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = NT_399755008402 /* StaticLibrary_ObjC */; - targetProxy = CIP_95747640947 /* PBXContainerItemProxy */; + target = NT_530818555464 /* StaticLibrary_ObjC_watchOS */; + targetProxy = CIP_90821786544 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1632,6 +1792,14 @@ name = MainInterface.storyboard; sourceTree = ""; }; + VG_202279841299 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + FR_202279841299 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; VG_256263906698 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -1759,6 +1927,18 @@ }; name = "Test Release"; }; + BC_142190149658 /* 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"; + }; BC_167564962969 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1771,6 +1951,42 @@ }; name = "Staging Release"; }; + BC_192293528117 /* 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"; + }; + BC_192679864336 /* 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"; + }; + BC_208278321332 /* 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"; + }; BC_210307580165 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2015,7 +2231,7 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; + INFOPLIST_FILE = App_macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -2123,6 +2339,18 @@ }; name = "Production Release"; }; + BC_338399173120 /* 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"; + }; BC_351179072988 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2370,16 +2598,17 @@ }; name = "Production Debug"; }; - BC_464603633927 /* Test Release */ = { + BC_462061816889 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; + 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; - TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Test Release"; + name = "Staging Release"; }; BC_467730755629 /* Production Release */ = { isa = XCBuildConfiguration; @@ -2425,6 +2654,18 @@ }; name = "Test Release"; }; + BC_479820670317 /* 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"; + }; BC_480688547948 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2485,6 +2726,17 @@ }; name = "Production Release"; }; + BC_495401711721 /* 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"; + }; BC_499325041919 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2579,6 +2831,17 @@ }; name = "Production Debug"; }; + BC_530610845178 /* 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"; + }; BC_530755208334 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2638,6 +2901,18 @@ }; name = "Staging Debug"; }; + BC_556794548954 /* 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"; + }; BC_563308786207 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2672,7 +2947,7 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; + INFOPLIST_FILE = App_macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -2779,16 +3054,16 @@ }; name = "Test Release"; }; - BC_592419322448 /* Production Release */ = { + BC_580113529988 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS"; + PRODUCT_NAME = StaticLibrary_ObjC; + SDKROOT = watchos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 4; }; - name = "Production Release"; + name = "Test Release"; }; BC_594849660073 /* Production Release */ = { isa = XCBuildConfiguration; @@ -2815,6 +3090,30 @@ }; name = "Production Release"; }; + BC_601792226085 /* 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"; + }; + BC_602034372772 /* 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"; + }; BC_609023497374 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2849,6 +3148,17 @@ }; name = "Production Release"; }; + BC_611527832268 /* 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"; + }; BC_612244244384 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2891,7 +3201,7 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; + INFOPLIST_FILE = App_macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -2902,17 +3212,6 @@ }; name = "Production Release"; }; - BC_629891546665 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = "Production Debug"; - }; BC_634896623305 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3003,6 +3302,18 @@ }; name = "Staging Release"; }; + BC_682637821562 /* 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"; + }; BC_685135820012 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3044,6 +3355,18 @@ }; name = "Staging Release"; }; + BC_699627374397 /* 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"; + }; BC_702596407424 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3107,7 +3430,7 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; + INFOPLIST_FILE = App_macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -3177,14 +3500,15 @@ }; name = "Production Debug"; }; - BC_724654958001 /* Staging Debug */ = { + BC_716189724726 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; + 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; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = "Staging Debug"; }; @@ -3288,6 +3612,18 @@ }; name = "Test Debug"; }; + BC_758688409542 /* 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"; + }; BC_760168680599 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3350,6 +3686,18 @@ }; name = "Staging Debug"; }; + BC_767358549642 /* 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"; + }; BC_769258280401 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3367,17 +3715,6 @@ }; name = "Staging Debug"; }; - BC_776042221288 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = "Staging Release"; - }; BC_790711614758 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3418,6 +3755,18 @@ }; name = "Test Release"; }; + BC_796723710441 /* 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"; + }; BC_799591451484 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3461,6 +3810,29 @@ }; name = "Production Debug"; }; + BC_806236101497 /* 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"; + }; + BC_806582710863 /* 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"; + }; BC_823301630526 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3621,16 +3993,17 @@ }; name = "Staging Debug"; }; - BC_866329197584 /* Test Debug */ = { + BC_865955650456 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC"; - SDKROOT = iphoneos; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS"; + PRODUCT_NAME = StaticLibrary_ObjC; + SDKROOT = appletvos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 3; }; - name = "Test Debug"; + name = "Production Release"; }; BC_866352849045 /* Test Debug */ = { isa = XCBuildConfiguration; @@ -3642,7 +4015,7 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; + INFOPLIST_FILE = App_macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -3678,6 +4051,17 @@ }; name = "Staging Debug"; }; + BC_901772102479 /* 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"; + }; BC_906683798476 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3699,7 +4083,7 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", ); - INFOPLIST_FILE = Vendor/SomeXPCService.xpc/Contents/Info.plist; + INFOPLIST_FILE = App_macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -3726,6 +4110,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; + CL_281269793733 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_142190149658 /* Production Debug */, + BC_602034372772 /* Production Release */, + BC_716189724726 /* Staging Debug */, + BC_462061816889 /* Staging Release */, + BC_192679864336 /* Test Debug */, + BC_682637821562 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_324671077936 /* Build configuration list for PBXNativeTarget "App_watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3752,19 +4149,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - CL_399755008402 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC_629891546665 /* Production Debug */, - BC_592419322448 /* Production Release */, - BC_724654958001 /* Staging Debug */, - BC_776042221288 /* Staging Release */, - BC_866329197584 /* Test Debug */, - BC_464603633927 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; CL_437179166843 /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3869,6 +4253,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; + CL_530818555464 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_806582710863 /* Production Debug */, + BC_611527832268 /* Production Release */, + BC_495401711721 /* Staging Debug */, + BC_530610845178 /* Staging Release */, + BC_901772102479 /* Test Debug */, + BC_580113529988 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_618687462494 /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3895,6 +4292,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; + CL_704531614016 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_208278321332 /* Production Debug */, + BC_865955650456 /* Production Release */, + BC_758688409542 /* Staging Debug */, + BC_479820670317 /* Staging Release */, + BC_767358549642 /* Test Debug */, + BC_338399173120 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_783122899910 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3934,6 +4344,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = "Production Debug"; }; + CL_919543414727 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_796723710441 /* Production Debug */, + BC_192293528117 /* Production Release */, + BC_556794548954 /* Staging Debug */, + BC_699627374397 /* Staging Release */, + BC_601792226085 /* Test Debug */, + BC_806236101497 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_935153865209 /* Build configuration list for PBXNativeTarget "iMessageApp" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Tests/Fixtures/TestProject/build.sh b/Tests/Fixtures/TestProject/build.sh index 884a5a1e..ad36f73a 100755 --- a/Tests/Fixtures/TestProject/build.sh +++ b/Tests/Fixtures/TestProject/build.sh @@ -2,4 +2,9 @@ set -e carthage bootstrap --cache-builds +echo " +Building iOS app" xcodebuild -project Project.xcodeproj -scheme "App_iOS Test" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty +echo " +Building macOS app" +xcodebuild -project Project.xcodeproj -scheme "App_macOS" -configuration "Test Debug" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index ab05ac4b..cc98a20c 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -29,6 +29,7 @@ targets: attributes: ProvisioningStyle: Automatic sources: + - path: App_macOS - path: StandaloneFiles/Standalone.swift - path: Vendor/SomeXPCService.xpc dependencies: @@ -70,7 +71,7 @@ targets: PRODUCT_BUNDLE_IDENTIFIER: com.project.app dependencies: - target: Framework_iOS - - target: StaticLibrary_ObjC + - target: StaticLibrary_ObjC_iOS - carthage: Result - target: App_watchOS - target: iMessageApp @@ -134,7 +135,7 @@ targets: StaticLibrary_ObjC: type: library.static - platform: iOS + platform: [iOS, tvOS, watchOS, macOS] sources: StaticLibrary_ObjC StaticLibrary_Swift: @@ -158,7 +159,7 @@ targets: path: scripts/script.sh dependencies: - carthage: Result - - target: StaticLibrary_ObjC + - target: StaticLibrary_ObjC_$platform App_iOS_Tests: type: bundle.unit-test platform: iOS From d5b72bce4f9b361da182f30ff08974efd6380c14 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 20:48:11 +1000 Subject: [PATCH 12/77] check fixtures using git diff --- .circleci/config.yml | 20 ++++++++++++------- .../ProjectFixtureTests.swift | 16 +-------------- .../ProjectGeneratorTests.swift | 15 +++++++------- diff-fixtures.sh | 13 ++++++++++++ 4 files changed, 34 insertions(+), 30 deletions(-) create mode 100755 diff-fixtures.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 918d861b..aa03700f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,11 +12,14 @@ jobs: name: Test command: swift test 2>&1 | xcpretty - run: - name: Build release - command: make build + name: Check Project Diff + command: ./diff-fixtures.sh - run: name: Build Test Project command: ./build-fixtures.sh + - run: + name: Build release + command: make build macOS_swift_4.2: macos: xcode: "10.0.0" @@ -25,16 +28,19 @@ jobs: - run: name: Build command: swift build + - run: + name: Test + command: swift test 2>&1 | xcpretty # disabled till UUID's are stable # - run: - # name: Test - # command: swift test 2>&1 | xcpretty - - run: - name: Build release - command: make build + # name: Check Project Diff + # command: ./diff-fixtures.sh - run: name: Build Test Project command: ./build-fixtures.sh + - run: + name: Build release + command: make build workflows: version: 2 workflow: diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index b66e50b3..028c7173 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -62,21 +62,7 @@ fileprivate func generateXcodeProject(specPath: Path, projectPath: Path, file: S let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() - let oldProject = try XcodeProj(path: projectPath) - let pbxProjPath = projectPath + XcodeProj.pbxprojPath(projectPath) - let oldProjectString: String = try pbxProjPath.read() try xcodeProject.write(path: projectPath, override: true) - let newProjectString: String = try pbxProjPath.read() - let newProject = try XcodeProj(path: projectPath) - let stringDiff = newProjectString != oldProjectString - if newProject != oldProject || stringDiff { - var message = "\(projectPath.string) has changed. If change is legitimate commit the change and run test again" - if stringDiff { - message += ":\n\n\(pbxProjPath):\n\(prettyFirstDifferenceBetweenStrings(oldProjectString, newProjectString))" - } - throw failure(message, file: file, line: line) - } - - return newProject + return xcodeProject } diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 7e5e624d..df246301 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -733,15 +733,14 @@ class ProjectGeneratorTests: XCTestCase { } let buildPhases = nativeTarget.buildPhases - let scripts = pbxProject.objects.shellScriptBuildPhases.objectReferences - let script1 = scripts[0] - let script2 = scripts[1] - try expect(scripts.count) == 2 - try expect(buildPhases.first) == script1.reference - try expect(buildPhases.last) == script2.reference + let scripts = pbxProject.objects.shellScriptBuildPhases + let script1 = scripts.first { $0.value.shellScript == "script1" } + let script2 = scripts.first { $0.value.shellScript == "script2" } - try expect(script1.object.shellScript) == "script1" - try expect(script2.object.shellScript) == "script2" + try expect(scripts.count) == 2 + + try expect(buildPhases.first) == script1?.key + try expect(buildPhases.last) == script2?.key } $0.it("generates targets with cylical dependencies") { diff --git a/diff-fixtures.sh b/diff-fixtures.sh new file mode 100755 index 00000000..183a9bdd --- /dev/null +++ b/diff-fixtures.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +if [[ `git status --porcelain Tests/Fixtures/TestProject` ]]; then + echo "" + echo "⚠️ Generated TestProject has changed." + echo "⚠️ If this is a valid change please run the tests and commit the updated TestProject." + echo "" + git --no-pager diff --color=always Tests/Fixtures/TestProject + exit 1 +else + echo "✅ Generated TestProject has not changed." +fi From aa37eb0538fb35842bfbae02a6062e48281ded84 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 21:57:51 +1000 Subject: [PATCH 13/77] fix warning in TestProject --- .../TestProject/App_watchOS Extension/InterfaceController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift b/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift index 2d82f8a6..73cc697f 100644 --- a/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift +++ b/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift @@ -6,7 +6,7 @@ class InterfaceController: WKInterfaceController { override func awake(withContext context: Any?) { super.awake(withContext: context) - let result: Result = .success("value") + _ = Result.success("value") // Configure interface objects here. } From e921c1090206517e6988ef2ad90c462c807bd7bb Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 29 Sep 2018 22:25:04 +1000 Subject: [PATCH 14/77] remove iOS codesigning sdk restriction --- SettingPresets/Product_Platform/application_iOS.yml | 2 +- .../TestProject/Project.xcodeproj/project.pbxproj | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/SettingPresets/Product_Platform/application_iOS.yml b/SettingPresets/Product_Platform/application_iOS.yml index 31225146..db2ffe0a 100644 --- a/SettingPresets/Product_Platform/application_iOS.yml +++ b/SettingPresets/Product_Platform/application_iOS.yml @@ -1,2 +1,2 @@ -CODE_SIGN_IDENTITY[sdk=iphoneos*]: iPhone Developer +CODE_SIGN_IDENTITY: iPhone Developer ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index fbd3b463..04b21e05 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -1882,7 +1882,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -2167,7 +2167,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -2671,7 +2671,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -2847,7 +2847,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -3594,7 +3594,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -3782,7 +3782,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", From 1911d42d275e11b6ca0de040e45922ef8965e10f Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 1 Oct 2018 12:53:16 +1000 Subject: [PATCH 15/77] remove reference generator ids --- Sources/XcodeGenKit/PBXProjGenerator.swift | 110 ++++++++------------- Sources/XcodeGenKit/ProjectGenerator.swift | 4 - Sources/XcodeGenKit/SourceGenerator.swift | 26 ++--- 3 files changed, 48 insertions(+), 92 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 5ec2ff6e..6cc40bcf 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -27,18 +27,12 @@ public class PBXProjGenerator { public init(project: Project) { self.project = project pbxProj = PBXProj(rootObject: nil, objectVersion: 46) - sourceGenerator = SourceGenerator(project: project) { [unowned self] id, object in - _ = self.addObject(id: id, object) + sourceGenerator = SourceGenerator(project: project) { [unowned self] object in + _ = self.addObject(object) } } - func addObject(id: String, _ object: T) -> T { -// let reference = pbxProj.generateReference(object, id) - pbxProj.add(object: object) - return object - } - - func createObject(id: String, _ object: T) -> T { + func addObject(_ object: T) -> T { pbxProj.add(object: object) return object } @@ -60,8 +54,7 @@ public class PBXProjGenerator { let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference { baseConfiguration = fileReference } - let buildConfig = createObject( - id: config.name, + let buildConfig = addObject( XCBuildConfiguration( name: config.name, buildSettings: buildSettings @@ -72,8 +65,7 @@ public class PBXProjGenerator { } let configName = project.options.defaultConfig ?? buildConfigs.first?.name ?? "" - let buildConfigList = createObject( - id: project.name, + let buildConfigList = addObject( XCConfigurationList( buildConfigurations: buildConfigs, defaultConfigurationName: configName @@ -82,8 +74,7 @@ public class PBXProjGenerator { var derivedGroups: [PBXGroup] = [] - let mainGroup = createObject( - id: "Project", + let mainGroup = addObject( PBXGroup( children: [], sourceTree: .group, @@ -93,8 +84,7 @@ public class PBXProjGenerator { ) ) - let pbxProject = createObject( - id: project.name, + let pbxProject = addObject( PBXProject( name: project.name, buildConfigurationList: buildConfigList, @@ -122,7 +112,7 @@ public class PBXProjGenerator { targetObject = PBXNativeTarget(name: target.name, buildPhases: []) } - targetObjects[target.name] = createObject(id: target.name, targetObject) + targetObjects[target.name] = addObject(targetObject) var explicitFileType: String? var lastKnownFileType: String? @@ -134,8 +124,7 @@ public class PBXProjGenerator { } if !target.isLegacy { - let fileReference = createObject( - id: target.name, + let fileReference = addObject( PBXFileReference( sourceTree: .buildProductsDir, explicitFileType: explicitFileType, @@ -151,8 +140,7 @@ public class PBXProjGenerator { for target in project.aggregateTargets { - let aggregateTarget = createObject( - id: target.name, + let aggregateTarget = addObject( PBXAggregateTarget( name: target.name, productName: target.name @@ -164,8 +152,7 @@ public class PBXProjGenerator { try project.targets.forEach(generateTarget) try project.aggregateTargets.forEach(generateAggregateTarget) - let productGroup = createObject( - id: "Products", + let productGroup = addObject( PBXGroup( children: targetFileReferences.valueArray, sourceTree: .group, @@ -177,8 +164,7 @@ public class PBXProjGenerator { if !carthageFrameworksByPlatform.isEmpty { var platforms: [PBXGroup] = [] for (platform, files) in carthageFrameworksByPlatform { - let platformGroup: PBXGroup = createObject( - id: "Carthage" + platform, + let platformGroup: PBXGroup = addObject( PBXGroup( children: files.sorted { $0.nameOrPath < $1.nameOrPath }, sourceTree: .group, @@ -187,8 +173,7 @@ public class PBXProjGenerator { ) platforms.append(platformGroup) } - let carthageGroup = createObject( - id: "Carthage", + let carthageGroup = addObject( PBXGroup( children: platforms, sourceTree: .group, @@ -200,8 +185,7 @@ public class PBXProjGenerator { } if !frameworkFiles.isEmpty { - let group = createObject( - id: "Frameworks", + let group = addObject( PBXGroup( children: frameworkFiles, sourceTree: .group, @@ -250,12 +234,12 @@ public class PBXProjGenerator { baseConfiguration: baseConfiguration, buildSettings: buildSettings ) - return createObject(id: config.name + target.name, buildConfig) + return addObject(buildConfig) } let dependencies = target.targets.map { generateTargetDependency(from: target.name, to: $0) } - let buildConfigList = createObject(id: target.name, XCConfigurationList( + let buildConfigList = addObject(XCConfigurationList( buildConfigurations: configs, defaultConfigurationName: "" )) @@ -272,8 +256,7 @@ public class PBXProjGenerator { guard let targetObject = targetObjects[target] ?? targetAggregateObjects[target] else { fatalError("target not found") } - let targetProxy = createObject( - id: "\(from)-\(target)", + let targetProxy = addObject( PBXContainerItemProxy( containerPortal: pbxProj.rootObject!, remoteGlobalID: targetObject, @@ -282,8 +265,7 @@ public class PBXProjGenerator { ) ) - let targetDependency = createObject( - id: "\(from)-\(target)", + let targetDependency = addObject( PBXTargetDependency( target: targetObject, targetProxy: targetProxy @@ -311,7 +293,7 @@ public class PBXProjGenerator { runOnlyForDeploymentPostprocessing: buildScript.runOnlyWhenInstalling, showEnvVarsInLog: buildScript.showEnvVars ) - return createObject(id: String(describing: buildScript.name) + shellScript + targetName, shellScriptPhase) + return addObject(shellScriptPhase) } func generateTargetAttributes() -> [PBXTarget: [String: Any]] { @@ -459,8 +441,7 @@ public class PBXProjGenerator { ) if link { let dependencyFile = targetFileReferences[dependencyTargetName]! - let buildFile = createObject( - id: "target dependency build file" + target.name, + let buildFile = addObject( PBXBuildFile(file: dependencyFile) ) targetFrameworkBuildFiles.append(buildFile) @@ -476,8 +457,7 @@ public class PBXProjGenerator { || (target.type.isTest && (dependencyTarget.type.isFramework || dependencyTarget.type == .bundle)) )) if embed { - let embedFile = createObject( - id: "target dependency embed build file" + target.name, + let embedFile = addObject( PBXBuildFile( file: dependencyFileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable) @@ -515,8 +495,7 @@ public class PBXProjGenerator { ) } - let buildFile = createObject( - id: "framework file reference" + target.name, + let buildFile = addObject( PBXBuildFile(file: fileReference) ) @@ -526,8 +505,7 @@ public class PBXProjGenerator { } if embed { - let embedFile = createObject( - id: "framework embed file" + target.name, + let embedFile = addObject( PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) ) copyFrameworksReferences.append(embedFile) @@ -546,8 +524,7 @@ public class PBXProjGenerator { } let fileReference = sourceGenerator.getFileReference(path: frameworkPath, inPath: platformPath) - let buildFile = createObject( - id: "carthage dependency build file" + target.name, + let buildFile = addObject( PBXBuildFile(file: fileReference) ) @@ -573,8 +550,7 @@ public class PBXProjGenerator { if embed { if directlyEmbedCarthage { - let embedFile = createObject( - id: "carthage embed" + target.name, + let embedFile = addObject( PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) ) copyFrameworksReferences.append(embedFile) @@ -595,7 +571,7 @@ public class PBXProjGenerator { } } .sorted { $0.path.lastComponent < $1.path.lastComponent } - return files.map { createObject(id: $0.path.string + target.name, $0.buildFile) } + return files.map { addObject($0.buildFile) } } func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [PBXBuildFile] { @@ -617,17 +593,17 @@ public class PBXProjGenerator { let headersBuildPhaseFiles = getBuildFilesForPhase(.headers) if !headersBuildPhaseFiles.isEmpty && (target.type == .framework || target.type == .dynamicLibrary) { - let headersBuildPhase = createObject(id: target.name, PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) + let headersBuildPhase = addObject(PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) buildPhases.append(headersBuildPhase) } let sourcesBuildPhaseFiles = getBuildFilesForPhase(.sources) - let sourcesBuildPhase = createObject(id: target.name, PBXSourcesBuildPhase(files: sourcesBuildPhaseFiles)) + let sourcesBuildPhase = addObject(PBXSourcesBuildPhase(files: sourcesBuildPhaseFiles)) buildPhases.append(sourcesBuildPhase) let resourcesBuildPhaseFiles = getBuildFilesForPhase(.resources) + copyResourcesReferences if !resourcesBuildPhaseFiles.isEmpty { - let resourcesBuildPhase = createObject(id: target.name, PBXResourcesBuildPhase(files: resourcesBuildPhaseFiles)) + let resourcesBuildPhase = addObject(PBXResourcesBuildPhase(files: resourcesBuildPhaseFiles)) buildPhases.append(resourcesBuildPhase) } @@ -640,8 +616,7 @@ public class PBXProjGenerator { let inputPaths = ["$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)"] let outputPaths = ["$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)"] - let script = createObject( - id: "Swift.h" + target.name, + let script = addObject( PBXShellScriptBuildPhase( name: "Copy Swift Objective-C Interface Header", inputPaths: inputPaths, @@ -656,8 +631,7 @@ public class PBXProjGenerator { copyFilesBuildPhasesFiles.merge(getBuildFilesForCopyFilesPhases()) { $0 + $1 } if !copyFilesBuildPhasesFiles.isEmpty { for (copyFiles, buildPhaseFiles) in copyFilesBuildPhasesFiles { - let copyFilesBuildPhase = createObject( - id: "copy files" + copyFiles.destination.rawValue + copyFiles.subpath + target.name, + let copyFilesBuildPhase = addObject( PBXCopyFilesBuildPhase( dstPath: copyFiles.subpath, dstSubfolderSpec: copyFiles.destination.destination, @@ -671,8 +645,7 @@ public class PBXProjGenerator { if !targetFrameworkBuildFiles.isEmpty { - let frameworkBuildPhase = createObject( - id: target.name, + let frameworkBuildPhase = addObject( PBXFrameworksBuildPhase(files: targetFrameworkBuildFiles) ) buildPhases.append(frameworkBuildPhase) @@ -680,8 +653,7 @@ public class PBXProjGenerator { if !extensions.isEmpty { - let copyFilesPhase = createObject( - id: "embed app extensions" + target.name, + let copyFilesPhase = addObject( PBXCopyFilesBuildPhase( dstPath: "", dstSubfolderSpec: .plugins, @@ -696,8 +668,7 @@ public class PBXProjGenerator { copyFrameworksReferences += getBuildFilesForPhase(.frameworks) if !copyFrameworksReferences.isEmpty { - let copyFilesPhase = createObject( - id: "embed frameworks" + target.name, + let copyFilesPhase = addObject( PBXCopyFilesBuildPhase( dstPath: "", dstSubfolderSpec: .frameworks, @@ -711,8 +682,7 @@ public class PBXProjGenerator { if !copyWatchReferences.isEmpty { - let copyFilesPhase = createObject( - id: "embed watch content" + target.name, + let copyFilesPhase = addObject( PBXCopyFilesBuildPhase( dstPath: "$(CONTENTS_FOLDER_PATH)/Watch", dstSubfolderSpec: .productsDirectory, @@ -731,8 +701,7 @@ public class PBXProjGenerator { let outputPaths = carthageFrameworksToEmbed .map { "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/\($0)\($0.contains(".") ? "" : ".framework")" } let carthageExecutable = project.options.carthageExecutablePath ?? "carthage" - let carthageScript = createObject( - id: "Carthage" + target.name, + let carthageScript = addObject( PBXShellScriptBuildPhase( name: "Carthage", inputPaths: inputPaths, @@ -745,8 +714,7 @@ public class PBXProjGenerator { } let buildRules = target.buildRules.map { buildRule in - createObject( - id: "\(target.name)-\(buildRule.action)-\(buildRule.fileType)", + addObject( PBXBuildRule( compilerSpec: buildRule.action.compilerSpec, fileType: buildRule.fileType.fileType, @@ -846,10 +814,10 @@ public class PBXProjGenerator { buildSettings: buildSettings ) buildConfig.baseConfiguration = baseConfiguration - return createObject(id: config.name + target.name, buildConfig) + return addObject(buildConfig) } - let buildConfigList = createObject(id: target.name, XCConfigurationList( + let buildConfigList = addObject(XCConfigurationList( buildConfigurations: configs, defaultConfigurationName: "" )) diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index bf31f60f..47df1847 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -40,10 +40,6 @@ public class ProjectGenerator { func getBuildEntry(_ buildTarget: Scheme.BuildTarget) -> XCScheme.BuildAction.Entry { - guard let pbxTarget = pbxProject.targets(named: buildTarget.target).first else { - fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"") - } - guard let buildableName = project.getTarget(buildTarget.target)?.filename ?? project.getAggregateTarget(buildTarget.target)?.name else { diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index 3540af25..96f9758a 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -18,7 +18,7 @@ class SourceGenerator { private var variantGroupsByPath: [Path: PBXVariantGroup] = [:] private let project: Project - var addObjectClosure: (String, PBXObject) -> Void + var addObjectClosure: (PBXObject) -> Void var targetSourceExcludePaths: Set = [] var defaultExcludedFiles = [ ".DS_Store", @@ -28,18 +28,13 @@ class SourceGenerator { private(set) var knownRegions: Set = [] - init(project: Project, addObjectClosure: @escaping (String, PBXObject) -> Void) { + init(project: Project, addObjectClosure: @escaping (PBXObject) -> Void) { self.project = project self.addObjectClosure = addObjectClosure } - func createObject(id: String, _ object: T) -> T { - addObjectClosure(id, object) - return object - } - - func addObject(id: String, _ object: T) -> T { - addObjectClosure(id, object) + func addObject(_ object: T) -> T { + addObjectClosure(object) return object } @@ -140,8 +135,7 @@ class SourceGenerator { let modelFileReferences = sortedPaths.map { path in - createObject( - id: path.byRemovingBase(path: project.basePath).string, + addObject( PBXFileReference( sourceTree: .group, lastKnownFileType: "wrapper.xcdatamodel", @@ -156,7 +150,7 @@ class SourceGenerator { guard let indexOf = sortedPaths.index(where: { $0 == currentVersionPath }) else { return nil } return modelFileReferences[indexOf] }() - let versionGroup = addObject(id: fileReferencePath.string, XCVersionGroup( + let versionGroup = addObject(XCVersionGroup( currentVersion: currentVersion, path: fileReferencePath.string, sourceTree: sourceTree, @@ -167,9 +161,7 @@ class SourceGenerator { return versionGroup } else { // For all extensions other than `xcdatamodeld` - let fileReference = createObject( - id: path.byRemovingBase(path: project.basePath).string, - PBXFileReference( + let fileReference = addObject(PBXFileReference( sourceTree: sourceTree, name: fileReferenceName, lastKnownFileType: lastKnownFileType, @@ -240,7 +232,7 @@ class SourceGenerator { name: groupName != groupPath ? groupName : nil, path: groupPath ) - groupReference = createObject(id: path.byRemovingBase(path: project.basePath).string, group) + groupReference = addObject(group) groupsByPath[path] = groupReference if isTopLevelGroup { @@ -260,7 +252,7 @@ class SourceGenerator { sourceTree: .group, name: path.lastComponent ) - variantGroup = createObject(id: path.byRemovingBase(path: project.basePath).string, group) + variantGroup = addObject(group) variantGroupsByPath[path] = variantGroup } return variantGroup From 01163012277c0841db4fce1e36c355848d938309 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 1 Oct 2018 13:19:29 +1000 Subject: [PATCH 16/77] swift_format --- Sources/XcodeGen/main.swift | 2 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 2 +- Sources/XcodeGenKit/ProjectGenerator.swift | 2 +- Sources/XcodeGenKit/SettingsBuilder.swift | 2 +- Sources/XcodeGenKit/SourceGenerator.swift | 3 ++- Tests/XcodeGenKitTests/ProjectGeneratorTests.swift | 6 +++--- Tests/XcodeGenKitTests/SourceGeneratorTests.swift | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index b7288ab2..70c91d98 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -1,3 +1,4 @@ +import Basic import Commander import Foundation import JSONUtilities @@ -5,7 +6,6 @@ import PathKit import ProjectSpec import XcodeGenKit import xcodeproj -import Basic let version = try Version("1.11.2") diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 6cc40bcf..ee0be093 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -806,7 +806,7 @@ public class PBXProjGenerator { var baseConfiguration: PBXFileReference? if let configPath = target.configFiles[config.name], - let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference{ + let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference { baseConfiguration = fileReference } let buildConfig = XCBuildConfiguration( diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index 47df1847..3c34ad44 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -47,7 +47,7 @@ public class ProjectGenerator { } let buildableReference = XCScheme.BuildableReference( referencedContainer: "container:\(project.name).xcodeproj", - blueprintIdentifier: "", //FIXME: pbxTarget.reference, + blueprintIdentifier: "", // FIXME: pbxTarget.reference, buildableName: buildableName, blueprintName: buildTarget.target ) diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index 348f6275..7970b7d2 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -1,10 +1,10 @@ +import Basic import Foundation import JSONUtilities import PathKit import ProjectSpec import xcodeproj import Yams -import Basic extension Project { diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index 96f9758a..59e0e83b 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -161,7 +161,8 @@ class SourceGenerator { return versionGroup } else { // For all extensions other than `xcdatamodeld` - let fileReference = addObject(PBXFileReference( + let fileReference = addObject( + PBXFileReference( sourceTree: sourceTree, name: fileReferenceName, lastKnownFileType: lastKnownFileType, diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 8799d2c2..ac106b6e 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -842,7 +842,7 @@ class ProjectGeneratorTests: XCTestCase { ].compactMap { $0 } for buildableReference in buildableReferences { - //FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference + // FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference try expect(buildableReference.blueprintName) == target.name try expect(buildableReference.buildableName) == "\(target.name).\(target.productType!.fileExtension!)" } @@ -915,8 +915,8 @@ class ProjectGeneratorTests: XCTestCase { guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { throw failure("Build Action entry not found") } - - //FIXME: try expect(buildActionEntry.buildableReference.blueprintIdentifier) == nativeTarget + + // FIXME: try expect(buildActionEntry.buildableReference.blueprintIdentifier) == nativeTarget try expect(xcscheme.launchAction?.buildConfiguration) == "Test Debug" try expect(xcscheme.testAction?.buildConfiguration) == "Test Debug" diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift index 21dd0ead..e4a0440e 100644 --- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift @@ -93,7 +93,7 @@ class SourceGeneratorTests: XCTestCase { ) guard let buildFile = pbxProj.buildFiles .first(where: { $0.file == fileReference }) else { - throw failure("Cant find build file") + throw failure("Cant find build file") } try expect(buildPhase?.files.count) == 1 try expect(buildPhase?.files.contains(buildFile)) == true From ab0d71d96f89562197258ff2f08ded8896c0eb91 Mon Sep 17 00:00:00 2001 From: Alvar Hansen Date: Fri, 28 Sep 2018 16:46:46 +0300 Subject: [PATCH 17/77] Add framework weak linking setting --- CHANGELOG.md | 6 + Docs/ProjectSpec.md | 1 + Sources/ProjectSpec/Dependency.swift | 8 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 23 +- .../Project.xcodeproj/project.pbxproj | 729 +++++++++++++++++- Tests/Fixtures/TestProject/project.yml | 11 + .../ProjectGeneratorTests.swift | 42 +- Tests/XcodeGenKitTests/SpecLoadingTests.swift | 4 +- 8 files changed, 810 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a2e1f1f..1b6fb0e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## Master + +#### Added +- Added `weak` Weak linking setting for dependencies [411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen + + ## 1.11.2 If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project will not be deterministic. This will be fixed in an upcoming release with an update to xcodeproj 6.0 diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index 4042dfb5..5117b78e 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -328,6 +328,7 @@ These only applied to `target` and `framework` dependencies. - [ ] **link**: **Bool** - Whether to link the dependency. Defaults to `true` depending on the type of the dependency and the type of the target (e.g. static libraries will only link to executables by default). - [ ] **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 **Implicit Framework options**: diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift index 324f703a..537bd46f 100644 --- a/Sources/ProjectSpec/Dependency.swift +++ b/Sources/ProjectSpec/Dependency.swift @@ -11,6 +11,7 @@ public struct Dependency: Equatable { public var removeHeaders: Bool = true public var link: Bool? public var implicit: Bool = false + public var weakLink: Bool = false public init( type: DependencyType, @@ -18,7 +19,8 @@ public struct Dependency: Equatable { embed: Bool? = nil, codeSign: Bool? = nil, link: Bool? = nil, - implicit: Bool = false + implicit: Bool = false, + weakLink: Bool = false ) { self.type = type self.reference = reference @@ -26,6 +28,7 @@ public struct Dependency: Equatable { self.codeSign = codeSign self.link = link self.implicit = implicit + self.weakLink = weakLink } public enum DependencyType { @@ -61,5 +64,8 @@ extension Dependency: JSONObjectConvertible { if let bool: Bool = jsonDictionary.json(atKeyPath: "implicit") { implicit = bool } + if let bool: Bool = jsonDictionary.json(atKeyPath: "weak") { + weakLink = bool + } } } diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index de814fd0..262a46aa 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -459,6 +459,14 @@ public class PBXProjGenerator { return ["ATTRIBUTES": embedAttributes] } + func getDependencyFrameworkSettings(dependency: Dependency) -> [String: Any]? { + var linkingAttributes: [String] = [] + if dependency.weakLink { + linkingAttributes.append("Weak") + } + return !linkingAttributes.isEmpty ? ["ATTRIBUTES": linkingAttributes] : nil + } + for dependency in targetDependencies { let embed = dependency.embed ?? target.shouldEmbedDependencies @@ -482,7 +490,10 @@ public class PBXProjGenerator { let dependencyBuildFile = targetBuildFiles[dependencyTargetName]! let buildFile = createObject( id: dependencyBuildFile.reference + target.name, - PBXBuildFile(fileRef: dependencyBuildFile.object.fileRef!) + PBXBuildFile( + fileRef: dependencyBuildFile.object.fileRef!, + settings: getDependencyFrameworkSettings(dependency: dependency) + ) ) targetFrameworkBuildFiles.append(buildFile.reference) @@ -538,7 +549,10 @@ public class PBXProjGenerator { let buildFile = createObject( id: "framework" + fileReference + target.name, - PBXBuildFile(fileRef: fileReference) + PBXBuildFile( + fileRef: fileReference, + settings: getDependencyFrameworkSettings(dependency: dependency) + ) ) targetFrameworkBuildFiles.append(buildFile.reference) @@ -569,7 +583,10 @@ public class PBXProjGenerator { let buildFile = createObject( id: "carthage" + fileReference + target.name, - PBXBuildFile(fileRef: fileReference) + PBXBuildFile( + fileRef: fileReference, + settings: getDependencyFrameworkSettings(dependency: dependency) + ) ) carthageFrameworksByPlatform[target.platform.carthageDirectoryName, default: []].insert(fileReference) diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index fbd3b463..4802c460 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -27,7 +27,9 @@ BF_138356261076 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_363921640403 /* InterfaceController.swift */; }; BF_140777424236 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_584425140013 /* Result.framework */; }; BF_143559378694 = {isa = PBXBuildFile; fileRef = FR_919543414727 /* StaticLibrary_ObjC.a */; }; + BF_149117711530 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; BF_150525852574 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; + BF_156245390034 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_159058095963 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_167705969896 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_145531354566 /* TestProjectUITests.swift */; }; BF_182635022050 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_830053537293 /* Assets.xcassets */; }; @@ -39,10 +41,12 @@ BF_211435872001 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG_473000061463 /* Localizable.strings */; }; BF_212221512596 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_470929579339 /* StaticLibrary.swift */; }; BF_215463341392 /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; }; + BF_219605708533 = {isa = PBXBuildFile; fileRef = FR_563193937230 /* Framework2.framework */; }; BF_225293845818 = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; }; BF_237760701422 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_987043315473 /* Assets.xcassets */; }; BF_239684316986 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_243071719122 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; + BF_250927007176 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_259448131292 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_268392110450 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_587738154368 /* Assets.xcassets */; }; BF_279581961655 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_868653349092 /* Assets.xcassets */; }; @@ -59,8 +63,10 @@ BF_331192862207 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_481575785861 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; BF_334321520545 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_377082606829 /* Assets.xcassets */; }; BF_334778067417 = {isa = PBXBuildFile; fileRef = FR_783122899910 /* App_iOS_Tests.xctest */; }; + BF_341452282021 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_360196406184 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_722239415598 /* TestProjectTests.swift */; }; BF_387462025786 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_202279841299 /* Main.storyboard */; }; + BF_391366142497 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_662897337290 /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_425679397292 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_434838320682 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = "FR_698230898030-1" /* StaticLibrary_ObjC.m */; }; BF_441538117869 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -69,12 +75,18 @@ BF_461044234706 /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_654302359039 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_463608041925 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_698230898030 /* StaticLibrary_ObjC.h */; }; BF_474063668246 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; }; + BF_479713239854 = {isa = PBXBuildFile; fileRef = FR_105280345645 /* Framework2.framework */; }; BF_496472559782 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_503484983186 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_196911129660 /* MoreUnder.swift */; }; BF_510053944904 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_815403394914 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_515435124777 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; + BF_517043434617 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; BF_518775144316 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_229826849033 /* SomeXPCService.xpc */; }; BF_526105569599 = {isa = PBXBuildFile; fileRef = FR_437179166843 /* StaticLibrary_Swift.a */; }; + BF_529143086177 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_532861652809 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; BF_538515166673 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_256263906698 /* LaunchScreen.storyboard */; }; + BF_550502704373 = {isa = PBXBuildFile; fileRef = FR_662897337290 /* Framework2.framework */; }; BF_552913093094 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_561304997165 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; BF_563614389392 = {isa = PBXBuildFile; fileRef = FR_618687462494 /* iMessageExtension.appex */; }; @@ -82,6 +94,7 @@ BF_597639300414 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_525119120469 /* Framework.framework */; }; BF_606517090398 = {isa = PBXBuildFile; fileRef = FR_281269793733 /* StaticLibrary_ObjC.a */; }; BF_612351978356 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_264279911176 /* Interface.storyboard */; }; + BF_616519281451 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_662897337290 /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; BF_624802436672 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; }; BF_628591712051 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_665156855283 /* module.modulemap */; }; BF_629554450880 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_763057275314 /* Result.framework */; }; @@ -96,6 +109,7 @@ BF_704149935229 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_675266829517 /* Standalone.swift */; }; BF_721498080533 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = FR_257073931060 /* ResourceFolder */; }; BF_725992639588 = {isa = PBXBuildFile; fileRef = FR_480982116789 /* App_macOS.app */; }; + BF_726199177939 = {isa = PBXBuildFile; fileRef = FR_651103371726 /* Framework2.framework */; }; BF_732745079658 = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; }; BF_734036107922 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_747443236192 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_324671077936 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -179,6 +193,13 @@ remoteGlobalIDString = NT_525119120469; remoteInfo = Framework_macOS; }; + CIP_23609521734 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_8448771205358 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_662897337290; + remoteInfo = Framework2_iOS; + }; CIP_28856087625 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = P_8448771205358 /* Project object */; @@ -358,6 +379,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + BF_391366142497 /* Framework2.framework in Embed Frameworks */, BF_905038616071 /* Framework.framework in Embed Frameworks */, BF_461044234706 /* SomeFramework.framework in Embed Frameworks */, ); @@ -399,6 +421,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + FR_105280345645 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_118219888726 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; FR_123503999387 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FR_131384036341 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; @@ -445,6 +468,7 @@ FR_525119120469 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_530818555464 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_530852296303 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_563193937230 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_570918052822 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; FR_584425140013 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_587738154368 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -455,10 +479,12 @@ FR_618687462494 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; FR_635802719871 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; }; FR_643034527839 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_651103371726 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_654302359039 /* SomeFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SomeFramework.framework; path = Vendor/SomeFramework.framework; sourceTree = ""; }; FR_655678458041 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_660690926982 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; FR_662315837182 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_662897337290 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_665156855283 /* module.modulemap */ = {isa = PBXFileReference; path = module.modulemap; sourceTree = ""; }; FR_669811003841 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_675266829517 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; @@ -552,6 +578,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BF_616519281451 /* Framework2.framework in Frameworks */, BF_324363145049 /* Framework.framework in Frameworks */, BF_474063668246 /* Result.framework in Frameworks */, BF_849675970921 /* StaticLibrary_ObjC.a in Frameworks */, @@ -848,16 +875,20 @@ FR_480982116789 /* App_macOS.app */, FR_507023492251 /* App_watchOS Extension.appex */, FR_324671077936 /* App_watchOS.app */, - FR_525119120469 /* Framework.framework */, - FR_662315837182 /* Framework.framework */, - FR_438704538506 /* Framework.framework */, FR_472296042419 /* Framework.framework */, + FR_525119120469 /* Framework.framework */, + FR_438704538506 /* Framework.framework */, + FR_662315837182 /* Framework.framework */, + FR_105280345645 /* Framework2.framework */, + FR_563193937230 /* Framework2.framework */, + FR_662897337290 /* Framework2.framework */, + FR_651103371726 /* Framework2.framework */, FR_935153865209 /* iMessageApp.app */, FR_618687462494 /* iMessageExtension.appex */, - FR_530818555464 /* StaticLibrary_ObjC.a */, - FR_704531614016 /* StaticLibrary_ObjC.a */, FR_919543414727 /* StaticLibrary_ObjC.a */, FR_281269793733 /* StaticLibrary_ObjC.a */, + FR_704531614016 /* StaticLibrary_ObjC.a */, + FR_530818555464 /* StaticLibrary_ObjC.a */, FR_437179166843 /* StaticLibrary_Swift.a */, FR_376569054786 /* XPC Service.xpc */, ); @@ -875,6 +906,14 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + HBP_10528034564 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_529143086177 /* MyFramework.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; HBP_43870453850 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -902,6 +941,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + HBP_56319393723 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_156245390034 /* MyFramework.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + HBP_65110337172 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_250927007176 /* MyFramework.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; HBP_66231583718 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -911,6 +966,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + HBP_66289733729 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_341452282021 /* MyFramework.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ @@ -930,6 +993,22 @@ /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ + NT_105280345645 /* Framework2_watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_105280345645 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */; + buildPhases = ( + HBP_10528034564 /* Headers */, + SBP_10528034564 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_watchOS; + productName = Framework2_watchOS; + productReference = FR_105280345645 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; NT_123503999387 /* App_iOS_UITests */ = { isa = PBXNativeTarget; buildConfigurationList = CL_123503999387 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */; @@ -1126,6 +1205,22 @@ productReference = FR_530818555464 /* StaticLibrary_ObjC.a */; productType = "com.apple.product-type.library.static"; }; + NT_563193937230 /* Framework2_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_563193937230 /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */; + buildPhases = ( + HBP_56319393723 /* Headers */, + SBP_56319393723 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_tvOS; + productName = Framework2_tvOS; + productReference = FR_563193937230 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; NT_618687462494 /* iMessageExtension */ = { isa = PBXNativeTarget; buildConfigurationList = CL_618687462494 /* Build configuration list for PBXNativeTarget "iMessageExtension" */; @@ -1142,6 +1237,22 @@ productReference = FR_618687462494 /* iMessageExtension.appex */; productType = "com.apple.product-type.app-extension.messages"; }; + NT_651103371726 /* Framework2_macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_651103371726 /* Build configuration list for PBXNativeTarget "Framework2_macOS" */; + buildPhases = ( + HBP_65110337172 /* Headers */, + SBP_65110337172 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_macOS; + productName = Framework2_macOS; + productReference = FR_651103371726 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; NT_662315837182 /* Framework_tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = CL_662315837182 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */; @@ -1161,6 +1272,22 @@ productReference = FR_662315837182 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; + NT_662897337290 /* Framework2_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_662897337290 /* Build configuration list for PBXNativeTarget "Framework2_iOS" */; + buildPhases = ( + HBP_66289733729 /* Headers */, + SBP_66289733729 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_iOS; + productName = Framework2_iOS; + productReference = FR_662897337290 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; NT_704531614016 /* StaticLibrary_ObjC_tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = CL_704531614016 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */; @@ -1212,6 +1339,7 @@ ); dependencies = ( TD_824101787753 /* PBXTargetDependency */, + TD_236095217340 /* PBXTargetDependency */, TD_109724965966 /* PBXTargetDependency */, TD_232150454486 /* PBXTargetDependency */, TD_288560876254 /* PBXTargetDependency */, @@ -1295,6 +1423,10 @@ NT_480982116789 /* App_macOS */, NT_324671077936 /* App_watchOS */, NT_507023492251 /* App_watchOS Extension */, + NT_662897337290 /* Framework2_iOS */, + NT_651103371726 /* Framework2_macOS */, + NT_563193937230 /* Framework2_tvOS */, + NT_105280345645 /* Framework2_watchOS */, NT_472296042419 /* Framework_iOS */, NT_525119120469 /* Framework_macOS */, NT_662315837182 /* Framework_tvOS */, @@ -1526,6 +1658,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + SBP_10528034564 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_532861652809 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_12350399938 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1625,6 +1765,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_56319393723 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_517043434617 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_61868746249 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1633,6 +1781,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_65110337172 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_515435124777 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_66231583718 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1641,6 +1797,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + SBP_66289733729 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_149117711530 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; SBP_70453161401 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1722,6 +1886,11 @@ target = NT_525119120469 /* Framework_macOS */; targetProxy = CIP_23558050412 /* PBXContainerItemProxy */; }; + TD_236095217340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = NT_662897337290 /* Framework2_iOS */; + targetProxy = CIP_23609521734 /* PBXContainerItemProxy */; + }; TD_288560876254 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = NT_935153865209 /* iMessageApp */; @@ -1927,6 +2096,27 @@ }; name = "Test Release"; }; + BC_132887277508 /* 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"; + }; BC_142190149658 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1939,6 +2129,27 @@ }; name = "Production Debug"; }; + BC_162130726969 /* 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"; + }; BC_167564962969 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2039,6 +2250,27 @@ }; name = "Production Debug"; }; + BC_233005332042 /* 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"; + }; BC_240587562436 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2242,6 +2474,27 @@ }; name = "Production Debug"; }; + BC_282993316269 /* 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"; + }; BC_282993554784 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2267,6 +2520,27 @@ }; name = "Production Release"; }; + BC_283605270658 /* 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"; + }; BC_296138297674 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2332,6 +2606,26 @@ }; name = "Staging Debug"; }; + BC_317429236477 /* 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"; + }; BC_334821934458 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2351,6 +2645,27 @@ }; name = "Test Release"; }; + BC_345911583907 /* 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"; + }; BC_351179072988 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2620,6 +2935,27 @@ }; name = "Production Release"; }; + BC_469509245400 /* 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"; + }; BC_470682595853 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2701,6 +3037,27 @@ }; name = "Production Debug"; }; + BC_493052429980 /* 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"; + }; BC_493052431451 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2737,6 +3094,26 @@ }; name = "Staging Debug"; }; + BC_496162047138 /* 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"; + }; BC_499325041919 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2789,6 +3166,27 @@ }; name = "Production Debug"; }; + BC_516808329453 /* 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"; + }; BC_517306343059 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2901,6 +3299,26 @@ }; name = "Staging Debug"; }; + BC_536614240472 /* 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"; + }; BC_556794548954 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3002,6 +3420,27 @@ }; name = "Production Release"; }; + BC_572479882124 /* 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"; + }; BC_575374366235 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3090,6 +3529,27 @@ }; name = "Production Release"; }; + BC_598666093104 /* 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"; + }; BC_601792226085 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3255,6 +3715,48 @@ }; name = "Staging Release"; }; + BC_649616542112 /* 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"; + }; + BC_650615721579 /* 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"; + }; BC_655752097950 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3280,6 +3782,26 @@ }; name = "Test Debug"; }; + BC_659994766813 /* 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"; + }; BC_667304541586 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3395,6 +3917,27 @@ }; name = "Test Debug"; }; + BC_704319259740 /* 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"; + }; BC_705279564212 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3420,6 +3963,27 @@ }; name = "Production Debug"; }; + BC_706746828714 /* 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"; + }; BC_707904794064 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3512,6 +4076,26 @@ }; name = "Staging Debug"; }; + BC_721815976999 /* 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"; + }; BC_730521266150 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3800,6 +4384,27 @@ }; name = "Production Debug"; }; + BC_800851631390 /* 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"; + }; BC_805283956103 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4026,6 +4631,48 @@ }; name = "Test Debug"; }; + BC_870421557533 /* 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"; + }; + BC_878673788752 /* 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"; + }; BC_879000441352 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4094,9 +4741,42 @@ }; name = "Staging Release"; }; + BC_990974077989 /* 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"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + CL_105280345645 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_721815976999 /* Production Debug */, + BC_317429236477 /* Production Release */, + BC_990974077989 /* Staging Debug */, + BC_659994766813 /* Staging Release */, + BC_496162047138 /* Test Debug */, + BC_536614240472 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_123503999387 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4266,6 +4946,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; + CL_563193937230 /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_132887277508 /* Production Debug */, + BC_282993316269 /* Production Release */, + BC_704319259740 /* Staging Debug */, + BC_598666093104 /* Staging Release */, + BC_878673788752 /* Test Debug */, + BC_233005332042 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_618687462494 /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4279,6 +4972,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; + CL_651103371726 /* Build configuration list for PBXNativeTarget "Framework2_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_469509245400 /* Production Debug */, + BC_870421557533 /* Production Release */, + BC_800851631390 /* Staging Debug */, + BC_649616542112 /* Staging Release */, + BC_706746828714 /* Test Debug */, + BC_516808329453 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_662315837182 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4292,6 +4998,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; + CL_662897337290 /* Build configuration list for PBXNativeTarget "Framework2_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_572479882124 /* Production Debug */, + BC_493052429980 /* Production Release */, + BC_283605270658 /* Staging Debug */, + BC_345911583907 /* Staging Release */, + BC_650615721579 /* Test Debug */, + BC_162130726969 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; CL_704531614016 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index cc98a20c..2afae046 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -73,6 +73,8 @@ targets: - target: Framework_iOS - target: StaticLibrary_ObjC_iOS - carthage: Result + - target: Framework2_iOS + weak: true - target: App_watchOS - target: iMessageApp - framework: Vendor/SomeFramework.framework @@ -160,6 +162,15 @@ targets: dependencies: - carthage: Result - target: StaticLibrary_ObjC_$platform + + Framework2: + type: framework + platform: [iOS, tvOS, watchOS, macOS] + sources: + - path: Framework + excludes: + - "*.xcodeproj" + App_iOS_Tests: type: bundle.unit-test platform: iOS diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index df246301..5db24c36 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -21,6 +21,12 @@ fileprivate let framework = Target( settings: Settings(buildSettings: ["SETTING_2": "VALUE"]) ) +fileprivate let optionalFramework = Target( + name: "MyOptionalFramework", + type: .framework, + platform: .iOS +) + fileprivate let uiTest = Target( name: "MyAppUITests", type: .uiTestBundle, @@ -29,7 +35,7 @@ fileprivate let uiTest = Target( dependencies: [Dependency(type: .target, reference: "MyApp")] ) -fileprivate let targets = [app, framework, uiTest] +fileprivate let targets = [app, framework, optionalFramework, uiTest] class ProjectGeneratorTests: XCTestCase { @@ -230,10 +236,11 @@ class ProjectGeneratorTests: XCTestCase { $0.it("generates targets") { let pbxProject = try project.generatePbxProj() let nativeTargets = pbxProject.objects.nativeTargets.referenceValues - try expect(nativeTargets.count) == 3 + try expect(nativeTargets.count) == 4 try expect(nativeTargets.contains { $0.name == app.name }).beTrue() try expect(nativeTargets.contains { $0.name == framework.name }).beTrue() try expect(nativeTargets.contains { $0.name == uiTest.name }).beTrue() + try expect(nativeTargets.contains { $0.name == optionalFramework.name }).beTrue() } $0.it("generates target attributes") { @@ -243,7 +250,7 @@ class ProjectGeneratorTests: XCTestCase { var testTargetWithAttributes = uiTest testTargetWithAttributes.settings.buildSettings["CODE_SIGN_STYLE"] = "Manual" - let project = Project(basePath: "", name: "test", targets: [appTargetWithAttributes, framework, testTargetWithAttributes]) + let project = Project(basePath: "", name: "test", targets: [appTargetWithAttributes, framework, optionalFramework, testTargetWithAttributes]) let pbxProject = try project.generatePbxProj() guard let targetAttributes = pbxProject.objects.projects.referenceValues.first?.attributes["TargetAttributes"] as? [String: [String: Any]] else { @@ -804,6 +811,35 @@ class ProjectGeneratorTests: XCTestCase { try expect(second.outputFiles) == [] try expect(second.outputFilesCompilerFlags) == [] } + + $0.it("generates dependency build file settings") { + let app = Target( + name: "MyApp", + type: .application, + platform: .iOS, + dependencies: [ + Dependency(type: .target, reference: "MyFramework"), + Dependency(type: .target, reference: "MyOptionalFramework", weakLink: true) + ] + ) + + let project = Project(basePath: "", name: "test", targets: [app, framework, optionalFramework, uiTest]) + let pbxProject = try project.generatePbxProj() + + guard let nativeTarget = pbxProject.objects.nativeTargets.referenceValues.first(where: { $0.name == app.name }) else { + throw failure("PBXNativeTarget for \(app.name) not found") + } + let buildPhases = nativeTarget.buildPhases + let frameworkPhases = pbxProject.objects.frameworksBuildPhases.objectReferences.filter { buildPhases.contains($0.reference) } + + let frameworkBuildFiles = frameworkPhases[0].object.files.compactMap { pbxProject.objects.buildFiles[$0] } + let buildFileSettings = frameworkBuildFiles.map { $0.settings } + + try expect(frameworkBuildFiles.count) == 2 + try expect(buildFileSettings.compactMap({ $0 }).count) == 1 + try expect(buildFileSettings.compactMap({ $0?["ATTRIBUTES"] }).count) == 1 + try expect(buildFileSettings.compactMap({ $0?["ATTRIBUTES"] as? [String] }).first) == ["Weak"] + } } } diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index a6d47476..ce9836d2 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -146,13 +146,13 @@ class SpecLoadingTests: XCTestCase { targetDictionary["dependencies"] = [ ["target": "name", "embed": false], ["carthage": "name"], - ["framework": "path"], + ["framework": "path", "weak": true], ] let target = try Target(name: "test", jsonDictionary: targetDictionary) try expect(target.dependencies.count) == 3 try expect(target.dependencies[0]) == Dependency(type: .target, reference: "name", embed: false) try expect(target.dependencies[1]) == Dependency(type: .carthage, reference: "name") - try expect(target.dependencies[2]) == Dependency(type: .framework, reference: "path") + try expect(target.dependencies[2]) == Dependency(type: .framework, reference: "path", weakLink: true) } $0.it("parses cross platform targets") { From 010487ec350819e9e6febcb64371e5fe0054c5cf Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 4 Oct 2018 20:25:18 +1000 Subject: [PATCH 18/77] use xcodeproj scheme blueprint --- Package.resolved | 14 ++++++------ Package.swift | 4 ++-- Sources/XcodeGenKit/ProjectGenerator.swift | 6 ++++- .../Project.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/App_iOS.xcscheme | 20 ++++++++--------- .../xcschemes/App_watchOS.xcscheme | 16 +++++++------- .../xcshareddata/xcschemes/Framework.xcscheme | 22 +++++++++---------- .../xcschemes/iMessageApp.xcscheme | 16 +++++++------- 8 files changed, 53 insertions(+), 49 deletions(-) diff --git a/Package.resolved b/Package.resolved index 0eb910a2..2df37a3a 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/tadija/AEXML.git", "state": { "branch": null, - "revision": "6eea665515d079c338690147082a8084a36484b0", - "version": "4.3.0" + "revision": "54bb8ea6fb693dd3f92a89e5fcc19e199fdeedd0", + "version": "4.3.3" } }, { @@ -60,17 +60,17 @@ "repositoryURL": "https://github.com/apple/swift-package-manager", "state": { "branch": null, - "revision": "6983434787dec4e543e9d398a0a9acf63ccd4da1", - "version": "0.2.1" + "revision": "235aacc514cb81a6881364b0fedcb3dd083228f3", + "version": "0.3.0" } }, { "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": null, - "revision": "1314329687682864119ecc03c73a413dfc24ade0", - "version": "6.0.1" + "branch": "master", + "revision": "77f84235b304472546f20cd545a632f1c16dc486", + "version": null } }, { diff --git a/Package.swift b/Package.swift index 5ff3c502..9c933b68 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:4.0 +// swift-tools-version:4.2 import PackageDescription @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.0.0"), + .package(url: "https://github.com/tuist/xcodeproj.git", .branch("master")), ], targets: [ .target(name: "XcodeGen", dependencies: [ diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index 3c34ad44..c6280ea4 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -40,6 +40,10 @@ public class ProjectGenerator { func getBuildEntry(_ buildTarget: Scheme.BuildTarget) -> XCScheme.BuildAction.Entry { + guard let pbxTarget = pbxProject.targets(named: buildTarget.target).first else { + fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"") + } + guard let buildableName = project.getTarget(buildTarget.target)?.filename ?? project.getAggregateTarget(buildTarget.target)?.name else { @@ -47,7 +51,7 @@ public class ProjectGenerator { } let buildableReference = XCScheme.BuildableReference( referencedContainer: "container:\(project.name).xcodeproj", - blueprintIdentifier: "", // FIXME: pbxTarget.reference, + blueprint: pbxTarget, buildableName: buildableName, blueprintName: buildTarget.target ) diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 416f4dfb..8f7a9861 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ /* Begin PBXBuildFile section */ 01E1BB1F24B4A80B8FC21EC54DDAFCFB /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */; }; 0A774DBC62F3C7721971E0C95BB2564A /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */; }; + 0nazXv7ABCyCN9fKu87n = {isa = PBXBuildFile; fileRef = F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11620E0E3097992FFB14B60ADB580C14 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12BB537967032E2ECE176F4F6BD7FEF1 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */; }; 1392EC1CE7BD042F68C39A2AAB6AFBF0 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */; }; @@ -94,8 +95,7 @@ FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - irhgJ7FX3id0PscP9V19 = {isa = PBXBuildFile; fileRef = F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - wRIMwRUI5z90K7MaV9ga = {isa = PBXBuildFile; fileRef = 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ba9n4YM2NGxFEyHIyuEc = {isa = PBXBuildFile; fileRef = 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme index ff5b9d32..7bde710e 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme @@ -3,8 +3,8 @@ LastUpgradeVersion = "0930" version = "1.3"> + buildImplicitDependencies = "YES" + parallelizeBuildables = "YES"> @@ -33,7 +33,7 @@ skipped = "NO"> @@ -43,7 +43,7 @@ skipped = "NO"> @@ -53,7 +53,7 @@ @@ -86,7 +86,7 @@ runnableDebuggingMode = "0"> @@ -115,7 +115,7 @@ runnableDebuggingMode = "0"> @@ -136,7 +136,7 @@ buildConfiguration = "Production Debug"> + revealArchiveInOrganizer = "YES" + buildConfiguration = "Production Release"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme index ec20739f..ca5876fd 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme @@ -3,8 +3,8 @@ LastUpgradeVersion = "0930" version = "1.3"> + buildImplicitDependencies = "YES" + parallelizeBuildables = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> @@ -91,7 +91,7 @@ buildConfiguration = "Production Debug"> + revealArchiveInOrganizer = "YES" + buildConfiguration = "Production Release"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme index 2b15a4ca..73e058c2 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme @@ -3,8 +3,8 @@ LastUpgradeVersion = "0930" version = "1.3"> + buildImplicitDependencies = "NO" + parallelizeBuildables = "NO"> @@ -14,7 +14,7 @@ @@ -32,7 +32,7 @@ buildForAnalyzing = "YES"> @@ -50,7 +50,7 @@ @@ -72,7 +72,7 @@ @@ -80,11 +80,11 @@ @@ -101,7 +101,7 @@ runnableDebuggingMode = "0"> @@ -112,7 +112,7 @@ buildConfiguration = "Production Debug"> + revealArchiveInOrganizer = "YES" + buildConfiguration = "Production Release"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme index b3e4fcaa..b08d16c4 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme @@ -3,8 +3,8 @@ LastUpgradeVersion = "0930" version = "1.3"> + buildImplicitDependencies = "YES" + parallelizeBuildables = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> @@ -91,7 +91,7 @@ buildConfiguration = "Production Debug"> + revealArchiveInOrganizer = "YES" + buildConfiguration = "Production Release"> From 7625cd5a586979fc182f6c7d0129dad6c9596f3d Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 4 Oct 2018 20:33:43 +1000 Subject: [PATCH 19/77] remove Swift 4.1 from tests --- .circleci/config.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ec28cdfb..b589018d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,5 @@ version: 2 jobs: - macOS_swift_4.1: - macos: - xcode: "9.3.0" - steps: - - checkout - - run: swift build - - run: swift test - - run: make build macOS_swift_4.2: macos: xcode: "10.0.0" @@ -19,5 +11,4 @@ workflows: version: 2 workflow: jobs: - - macOS_swift_4.1 - macOS_swift_4.2 From 2bb4a266615d247d73dd051dd82a5029cbb9283c Mon Sep 17 00:00:00 2001 From: Dave Lee Date: Fri, 5 Oct 2018 09:12:51 -0700 Subject: [PATCH 20/77] Improve performance of getCombinedBuildSettings --- Sources/XcodeGenKit/PBXProjGenerator.swift | 11 +++---- Sources/XcodeGenKit/SettingsBuilder.swift | 36 ++++++++++------------ 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 262a46aa..b1c55e33 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -355,7 +355,7 @@ public class PBXProjGenerator { func getSingleBuildSetting(_ setting: String) -> String? { let settings = project.configs.compactMap { - project.getCombinedBuildSettings(basePath: project.basePath, target: target, config: $0)[setting] as? String + project.getCombinedBuildSetting(setting, target: target, config: $0) as? String } guard settings.count == project.configs.count, let firstSetting = settings.first, @@ -670,8 +670,7 @@ public class PBXProjGenerator { buildPhases.append(resourcesBuildPhase.reference) } - let buildSettings = project.getCombinedBuildSettings(basePath: project.basePath, target: target, config: project.configs[0]) - let swiftObjCInterfaceHeader = buildSettings["SWIFT_OBJC_INTERFACE_HEADER_NAME"] as? String + let swiftObjCInterfaceHeader = project.getCombinedBuildSetting("SWIFT_OBJC_INTERFACE_HEADER_NAME", target: target, config: project.configs[0]) as? String if target.type == .staticLibrary && swiftObjCInterfaceHeader != "" @@ -807,7 +806,7 @@ public class PBXProjGenerator { var buildSettings = project.getTargetBuildSettings(target: target, config: config) // automatically set INFOPLIST_FILE path - if !project.targetHasBuildSetting("INFOPLIST_FILE", basePath: project.basePath, target: target, config: config) { + if !project.targetHasBuildSetting("INFOPLIST_FILE", target: target, config: config) { if searchForPlist { plistPath = getInfoPlist(target.sources) searchForPlist = false @@ -819,7 +818,7 @@ public class PBXProjGenerator { // automatically calculate bundle id if let bundleIdPrefix = project.options.bundleIdPrefix, - !project.targetHasBuildSetting("PRODUCT_BUNDLE_IDENTIFIER", basePath: project.basePath, target: target, config: config) { + !project.targetHasBuildSetting("PRODUCT_BUNDLE_IDENTIFIER", target: target, config: config) { let characterSet = CharacterSet.alphanumerics.union(CharacterSet(charactersIn: "-.")).inverted let escapedTargetName = target.name .replacingOccurrences(of: "_", with: "-") @@ -830,7 +829,7 @@ public class PBXProjGenerator { // automatically set test target name if target.type == .uiTestBundle, - !project.targetHasBuildSetting("TEST_TARGET_NAME", basePath: project.basePath, target: target, config: config) { + !project.targetHasBuildSetting("TEST_TARGET_NAME", target: target, config: config) { for dependency in target.dependencies { if dependency.type == .target, let dependencyTarget = project.getTarget(dependency.reference), diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index c5974e9f..3f7ad5b0 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -81,31 +81,27 @@ extension Project { } // combines all levels of a target's settings: target, target config, project, project config - public func getCombinedBuildSettings(basePath: Path, target: ProjectTarget, config: Config, includeProject: Bool = true) -> BuildSettings { - var buildSettings: BuildSettings = [:] - if includeProject { - if let configFilePath = configFiles[config.name] { - buildSettings += loadConfigFileBuildSettings(path: configFilePath) - } - buildSettings += getProjectBuildSettings(config: config) + public func getCombinedBuildSetting(_ setting: String, target: ProjectTarget, config: Config) -> Any? { + if let target = target as? Target, + let value = getTargetBuildSettings(target: target, config: config)[setting] { + return value } - if let configFilePath = target.configFiles[config.name] { - buildSettings += loadConfigFileBuildSettings(path: configFilePath) + if let configFilePath = target.configFiles[config.name], + let value = loadConfigFileBuildSettings(path: configFilePath)?[setting] { + return value } - if let target = target as? Target { - buildSettings += getTargetBuildSettings(target: target, config: config) + if let value = getProjectBuildSettings(config: config)[setting] { + return value } - return buildSettings + if let configFilePath = configFiles[config.name], + let value = loadConfigFileBuildSettings(path: configFilePath)?[setting] { + return value + } + return nil } - public func targetHasBuildSetting(_ setting: String, basePath: Path, target: Target, config: Config, includeProject: Bool = true) -> Bool { - let buildSettings = getCombinedBuildSettings( - basePath: basePath, - target: target, - config: config, - includeProject: includeProject - ) - return buildSettings[setting] != nil + public func targetHasBuildSetting(_ setting: String, target: Target, config: Config) -> Bool { + return getCombinedBuildSetting(setting, target: target, config: config) != nil } /// Removes values from build settings if they are defined in an xcconfig file From 8acea8341c4142583e72f0c5cbe40b83c458a37d Mon Sep 17 00:00:00 2001 From: Dave Lee Date: Fri, 5 Oct 2018 15:13:50 -0700 Subject: [PATCH 21/77] Cache config/setting file misses too --- Sources/XcodeGenKit/SettingsBuilder.swift | 34 +++++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index c5974e9f..70ccc051 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -126,28 +126,43 @@ extension Project { /// Returns cached build settings from a config file private func loadConfigFileBuildSettings(path: String) -> BuildSettings? { let configFilePath = basePath + path - if let settings = configFileSettings[configFilePath.string] { - return settings + if let cached = configFileSettings[configFilePath.string] { + return cached.value } else { - guard let configFile = try? XCConfig(path: configFilePath) else { return nil } + guard let configFile = try? XCConfig(path: configFilePath) else { + configFileSettings[configFilePath.string] = .nothing + return nil + } let settings = configFile.flattenedBuildSettings() - configFileSettings[configFilePath.string] = settings + configFileSettings[configFilePath.string] = .cached(settings) return settings } } } +private enum Cached { + case cached(T) + case nothing + + var value: T? { + switch self { + case let .cached(value): return value + case .nothing: return nil + } + } +} + // cached flattened xcconfig file settings -private var configFileSettings: [String: BuildSettings] = [:] +private var configFileSettings: [String: Cached] = [:] // cached setting preset settings -private var settingPresetSettings: [String: BuildSettings] = [:] +private var settingPresetSettings: [String: Cached] = [:] extension SettingsPresetFile { public func getBuildSettings() -> BuildSettings? { - if let group = settingPresetSettings[path] { - return group + if let cached = settingPresetSettings[path] { + return cached.value } let bundlePath = Path(Bundle.main.bundlePath) let relativePath = Path("SettingPresets/\(path).yml") @@ -171,6 +186,7 @@ extension SettingsPresetFile { case .product, .productPlatform: break } + settingPresetSettings[path] = .nothing return nil } @@ -178,7 +194,7 @@ extension SettingsPresetFile { print("Error parsing \"\(name)\" settings") return nil } - settingPresetSettings[path] = buildSettings + settingPresetSettings[path] = .cached(buildSettings) return buildSettings } } From 590128e15612268c5ec7439a01b75e3c3b731872 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 8 Oct 2018 17:29:09 +1100 Subject: [PATCH 22/77] =?UTF-8?q?Remove=20header=20build=20files=20that=20?= =?UTF-8?q?aren=E2=80=99t=20in=20a=20build=20phase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/XcodeGenKit/PBXProjGenerator.swift | 10 +++++++--- .../TestProject/Project.xcodeproj/project.pbxproj | 2 -- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index ee0be093..dffab484 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -592,9 +592,13 @@ public class PBXProjGenerator { buildPhases += try target.prebuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) } let headersBuildPhaseFiles = getBuildFilesForPhase(.headers) - if !headersBuildPhaseFiles.isEmpty && (target.type == .framework || target.type == .dynamicLibrary) { - let headersBuildPhase = addObject(PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) - buildPhases.append(headersBuildPhase) + if !headersBuildPhaseFiles.isEmpty { + if (target.type == .framework || target.type == .dynamicLibrary) { + let headersBuildPhase = addObject(PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) + buildPhases.append(headersBuildPhase) + } else { + headersBuildPhaseFiles.forEach { pbxProj.delete(object: $0) } + } } let sourcesBuildPhaseFiles = getBuildFilesForPhase(.sources) diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 8f7a9861..7dc3f3eb 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -25,7 +25,6 @@ /* Begin PBXBuildFile section */ 01E1BB1F24B4A80B8FC21EC54DDAFCFB /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4316EA80F87D5B5ED86E105CE1FE35 /* Alamofire.framework */; }; 0A774DBC62F3C7721971E0C95BB2564A /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */; }; - 0nazXv7ABCyCN9fKu87n = {isa = PBXBuildFile; fileRef = F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11620E0E3097992FFB14B60ADB580C14 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12BB537967032E2ECE176F4F6BD7FEF1 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B711E3A23DD91E764A249E83C1D84E3 /* Alamofire.framework */; }; 1392EC1CE7BD042F68C39A2AAB6AFBF0 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */; }; @@ -95,7 +94,6 @@ FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - ba9n4YM2NGxFEyHIyuEc = {isa = PBXBuildFile; fileRef = 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ From 26d44f64d7d8c8b6f80ddb542cdb46aa01c93b49 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 8 Oct 2018 19:42:25 +1100 Subject: [PATCH 23/77] add performance tests --- Tests/XcodeGenKitTests/PerformanceTests.swift | 58 ++++++ Tests/XcodeGenKitTests/TestProject.swift | 177 ++++++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 Tests/XcodeGenKitTests/PerformanceTests.swift create mode 100644 Tests/XcodeGenKitTests/TestProject.swift diff --git a/Tests/XcodeGenKitTests/PerformanceTests.swift b/Tests/XcodeGenKitTests/PerformanceTests.swift new file mode 100644 index 00000000..a1fb60be --- /dev/null +++ b/Tests/XcodeGenKitTests/PerformanceTests.swift @@ -0,0 +1,58 @@ +import XcodeGenKit +import xcproj +import Foundation +import XCTest +import ProjectSpec +import PathKit + +class GeneratedPerformanceTests: XCTestCase { + + let basePath = Path.temporary + "XcodeGenPeformanceTests" + + func testGeneration() throws { + let project = try Project.testProject(basePath: basePath) + self.measure { + let generator = ProjectGenerator(project: project) + _ = try! generator.generateXcodeProject() + } + } + + func testWriting() throws { + let project = try Project.testProject(basePath: basePath) + let generator = ProjectGenerator(project: project) + let xcodeProject = try generator.generateXcodeProject() + self.measure { + let path = project.basePath + "\(project.name).xcodeproj" + try! xcodeProject.write(path: path) + } + } +} + +class FixturePerformanceTests: XCTestCase { + + let specPath = fixturePath + "TestProject/project.yml" + + func testFixtureDecoding() throws { + self.measure { + _ = try! Project(path: specPath) + } + } + + func testFixtureGeneration() throws { + let project = try Project(path: specPath) + self.measure { + let generator = ProjectGenerator(project: project) + _ = try! generator.generateXcodeProject() + } + } + + func testFixtureWriting() throws { + let project = try Project(path: specPath) + let generator = ProjectGenerator(project: project) + let xcodeProject = try generator.generateXcodeProject() + self.measure { + let path = project.basePath + "\(project.name).xcodeproj" + try! xcodeProject.write(path: path) + } + } +} diff --git a/Tests/XcodeGenKitTests/TestProject.swift b/Tests/XcodeGenKitTests/TestProject.swift new file mode 100644 index 00000000..ebc28180 --- /dev/null +++ b/Tests/XcodeGenKitTests/TestProject.swift @@ -0,0 +1,177 @@ +import Foundation +import ProjectSpec +import PathKit +import xcproj + +extension Project { + + static func testProject(basePath: Path, createSources: Bool = true) throws -> Project { + + if createSources { + try? basePath.delete() + try basePath.mkpath() + } + + var paths: [Path] = [] + var targets: [Target] = [] + let scheme = TargetScheme( + testTargets: [], + configVariants: ["Test", "Staging", "Prod"], + gatherCoverageData: true, + commandLineArguments: [ + "--command": true, + "--command2": false + ], + environmentVariables: [ + XCScheme.EnvironmentVariable(variable: "ENV", value: "HELLO", enabled: true), + XCScheme.EnvironmentVariable(variable: "ENV2", value: "HELLO", enabled: false) + ], + preActions: [Scheme.ExecutionAction(name: "run", script: "script")], + postActions: [Scheme.ExecutionAction(name: "run", script: "script")] + ) + for platform in Platform.all { + let appTarget = Target( + name: "App_\(platform)", + type: .application, + platform: platform, + sources: [TargetSource(path: "App_\(platform)")], + dependencies: [ + Dependency(type: .target, reference: "Framework_\(platform)"), + Dependency(type: .target, reference: "Framework2_\(platform)"), + Dependency(type: .carthage, reference: "Alamofire"), + Dependency(type: .carthage, reference: "BrightFutures"), + ], + scheme: scheme + ) + targets.append(appTarget) + if createSources { + paths += try createTargetSources(path: basePath, target: appTarget) + } + + let testTarget = Target( + name: "App_Test_\(platform)", + type: .unitTestBundle, + platform: platform, + sources: [TargetSource(path: "App_Test_\(platform)")], + dependencies: [ + Dependency(type: .target, reference: "App_\(platform)"), + Dependency(type: .target, reference: "Framework_\(platform)"), + Dependency(type: .target, reference: "Framework2_\(platform)"), + ], + scheme: scheme + ) + targets.append(testTarget) + if createSources { + paths += try createTargetSources(path: basePath, target: testTarget) + } + + let frameworkTarget = Target( + name: "Framework_\(platform)", + type: .framework, + platform: platform, + sources: [ + TargetSource(path: "Framework_\(platform)"), + ], + dependencies: [ + Dependency(type: .carthage, reference: "Alamofire"), + ], + scheme: scheme + ) + targets.append(frameworkTarget) + if createSources { + paths += try createTargetSources(path: basePath, target: frameworkTarget) + } + + let frameworkTarget2 = Target( + name: "Framework2_\(platform)", + type: .framework, + platform: platform, + sources: [TargetSource(path: "Framework2_\(platform)")], + dependencies: [ + Dependency(type: .target, reference: "Framework_\(platform)"), + Dependency(type: .carthage, reference: "Alamofire"), + Dependency(type: .carthage, reference: "BrightFutures"), + ], + scheme: scheme + ) + targets.append(frameworkTarget2) + if createSources { + paths += try createTargetSources(path: basePath, target: frameworkTarget2) + } + } + if createSources { + let files = paths.filter { $0.isFile } + let directories = paths.filter { $0.isDirectory } + print("Generated \(files.count) files and \(directories.count) directories") + } + + return Project( + basePath: basePath, + name: "Project", + configs: [ + Config(name: "Debug Test", type: .debug), + 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), + ], + targets: targets, + aggregateTargets: [], + settings: [:], + settingGroups: [:], + schemes: [], + options: SpecOptions(), + fileGroups: [], + configFiles: [:], + attributes: [:] + ) + } + + fileprivate static func createTargetSources(path: Path, target: Target) throws -> [Path] { + let levels = 3 + let directoriesPerLevel = 1 + let swiftFilesPerDirectory = 5 + let objFilesPerDirectory = 2 + let resourcesPerDirectory = 2 + var paths: [Path] = [] + + func createDirectory(_ path: Path, depth: Int = 0) throws { + try path.mkpath() + paths.append(path) + + for swiftFile in 1...swiftFilesPerDirectory { + let file = path + "file_\(swiftFile).swift" + try file.write("") + paths.append(file) + } + + for resourceFile in 1...resourcesPerDirectory { + let file = path + "file_\(resourceFile).png" + try file.write("") + paths.append(file) + } + + for objFile in 1...objFilesPerDirectory { + let header = path + "file_\(objFile).h" + try header.write("") + paths.append(header) + + let implementation = path + "file_\(objFile).m" + try implementation.write("") + paths.append(implementation) + } + + if depth < levels - 1 { + for directory in 1...directoriesPerLevel { + try createDirectory(path + "directory_\(directory)", depth: depth + 1) + } + } + } + + for source in target.sources { + try createDirectory(path + source.path) + } + return paths + } +} From a59b8efb032af4fc29c59a53d124f33e3eb779d0 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 8 Oct 2018 22:08:49 +1100 Subject: [PATCH 24/77] fix file comparison --- Sources/XcodeGenKit/PBXProjGenerator.swift | 2 +- Tests/XcodeGenKitTests/SourceGeneratorTests.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index dcf7d7e4..35e73f3e 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -574,7 +574,7 @@ public class PBXProjGenerator { func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXBuildFile] { let files = sourceFiles .reduce(into: [SourceFile]()) { output, sourceFile in - if !output.contains(where: { $0.fileReference == sourceFile.fileReference }) { + if !output.contains(where: { $0.fileReference === sourceFile.fileReference }) { output.append(sourceFile) } } diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift index e4a0440e..7dec0a53 100644 --- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift @@ -534,7 +534,7 @@ extension PBXProj { if let buildPhase = buildPhase { let buildFile = buildFiles - .first(where: { $0.file == fileReference }) + .first(where: { $0.file === fileReference }) let actualBuildPhase = buildFile .flatMap { buildFile in buildPhases.first { $0.files.contains(buildFile) } }?.buildPhase From 5bd704392aa6b55b1eb1ca1d5bea9f7931fba700 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 8 Oct 2018 20:39:34 +1100 Subject: [PATCH 25/77] add projectPath getter --- Sources/ProjectSpec/Project.swift | 4 ++++ Tests/XcodeGenKitTests/PerformanceTests.swift | 6 ++---- Tests/XcodeGenKitTests/ProjectFixtureTests.swift | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Sources/ProjectSpec/Project.swift b/Sources/ProjectSpec/Project.swift index bb6eeebb..8c6f524a 100644 --- a/Sources/ProjectSpec/Project.swift +++ b/Sources/ProjectSpec/Project.swift @@ -78,6 +78,10 @@ public struct Project: BuildSettingsContainer { public func getConfig(_ configName: String) -> Config? { return configs.first { $0.name == configName } } + + public var projectPath: Path { + return basePath + "\(name).xcodeproj" + } } extension Project: CustomDebugStringConvertible { diff --git a/Tests/XcodeGenKitTests/PerformanceTests.swift b/Tests/XcodeGenKitTests/PerformanceTests.swift index a1fb60be..1aed1194 100644 --- a/Tests/XcodeGenKitTests/PerformanceTests.swift +++ b/Tests/XcodeGenKitTests/PerformanceTests.swift @@ -22,8 +22,7 @@ class GeneratedPerformanceTests: XCTestCase { let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() self.measure { - let path = project.basePath + "\(project.name).xcodeproj" - try! xcodeProject.write(path: path) + try! xcodeProject.write(path: project.projectPath) } } } @@ -51,8 +50,7 @@ class FixturePerformanceTests: XCTestCase { let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() self.measure { - let path = project.basePath + "\(project.name).xcodeproj" - try! xcodeProject.write(path: path) + try! xcodeProject.write(path: project.projectPath) } } } diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index 028c7173..8019b0dc 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -12,7 +12,7 @@ class ProjectFixtureTests: XCTestCase { var xcodeProject: XcodeProj? $0.it("generates") { - xcodeProject = try generateXcodeProject(specPath: fixturePath + "TestProject/project.yml", projectPath: fixturePath + "TestProject/Project.xcodeproj") + xcodeProject = try generateXcodeProject(specPath: fixturePath + "TestProject/project.yml") } $0.it("generates variant group") { @@ -58,11 +58,11 @@ class ProjectFixtureTests: XCTestCase { } } -fileprivate func generateXcodeProject(specPath: Path, projectPath: Path, file: String = #file, line: Int = #line) throws -> XcodeProj { +fileprivate func generateXcodeProject(specPath: Path, file: String = #file, line: Int = #line) throws -> XcodeProj { let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() - try xcodeProject.write(path: projectPath, override: true) + try xcodeProject.write(path: project.projectPath, override: true) return xcodeProject } From bf293d6ac6a437b306ec7c069d28d03bb5ee04ba Mon Sep 17 00:00:00 2001 From: Jerry Marino Date: Mon, 8 Oct 2018 13:34:15 -0700 Subject: [PATCH 26/77] Use the provided TargetSource.headerVisibility This was missing in the init - simply use the value provided by the user. --- Sources/ProjectSpec/TargetSource.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/ProjectSpec/TargetSource.swift b/Sources/ProjectSpec/TargetSource.swift index 08bc65cd..f8a1cbb3 100644 --- a/Sources/ProjectSpec/TargetSource.swift +++ b/Sources/ProjectSpec/TargetSource.swift @@ -119,6 +119,7 @@ public struct TargetSource: Equatable { self.type = type self.optional = optional self.buildPhase = buildPhase + self.headerVisibility = headerVisibility } } From 4b0169e42ac5dac672bb1629f4925a0ab8473380 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 9 Oct 2018 21:10:44 +1100 Subject: [PATCH 27/77] sorted command line arguments --- Package.resolved | 2 +- Sources/ProjectSpec/XCProjExtensions.swift | 2 +- .../xcschemes/App_iOS Production.xcscheme | 24 +++++++++---------- .../xcschemes/App_iOS Staging.xcscheme | 24 +++++++++---------- .../xcschemes/App_iOS Test.xcscheme | 24 +++++++++---------- 5 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Package.resolved b/Package.resolved index 2df37a3a..5840089f 100644 --- a/Package.resolved +++ b/Package.resolved @@ -3,7 +3,7 @@ "pins": [ { "package": "AEXML", - "repositoryURL": "https://github.com/tadija/AEXML.git", + "repositoryURL": "https://github.com/tadija/AEXML", "state": { "branch": null, "revision": "54bb8ea6fb693dd3f92a89e5fcc19e199fdeedd0", diff --git a/Sources/ProjectSpec/XCProjExtensions.swift b/Sources/ProjectSpec/XCProjExtensions.swift index 85f74b4d..bd3541a1 100644 --- a/Sources/ProjectSpec/XCProjExtensions.swift +++ b/Sources/ProjectSpec/XCProjExtensions.swift @@ -60,7 +60,7 @@ extension XCScheme.CommandLineArguments { public convenience init(_ dict: [String: Bool]) { let args = dict.map { tuple in XCScheme.CommandLineArguments.CommandLineArgument(name: tuple.key, enabled: tuple.value) - } + }.sorted { $0.name < $1.name } self.init(arguments: args) } } diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme index 3b14acc5..7c386b2d 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme @@ -60,14 +60,14 @@ - - + + @@ -93,14 +93,14 @@ - - + + @@ -122,14 +122,14 @@ - - + + - - + + @@ -93,14 +93,14 @@ - - + + @@ -122,14 +122,14 @@ - - + + - - + + @@ -93,14 +93,14 @@ - - + + @@ -122,14 +122,14 @@ - - + + Date: Tue, 9 Oct 2018 23:13:30 +1100 Subject: [PATCH 28/77] fix scheme order --- Package.resolved | 2 +- .../xcshareddata/xcschemes/App_iOS Production.xcscheme | 4 ++-- .../xcshareddata/xcschemes/App_iOS Staging.xcscheme | 4 ++-- .../xcshareddata/xcschemes/App_iOS Test.xcscheme | 4 ++-- .../xcshareddata/xcschemes/App_watchOS.xcscheme | 4 ++-- .../xcshareddata/xcschemes/Framework.xcscheme | 4 ++-- .../xcshareddata/xcschemes/iMessageApp.xcscheme | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Package.resolved b/Package.resolved index 5840089f..56b4146a 100644 --- a/Package.resolved +++ b/Package.resolved @@ -69,7 +69,7 @@ "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { "branch": "master", - "revision": "77f84235b304472546f20cd545a632f1c16dc486", + "revision": "df58e7c581f54512a09587fe519b95caeca57ae1", "version": null } }, diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme index 7c386b2d..acf0b9a1 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme @@ -136,7 +136,7 @@ buildConfiguration = "Production Debug"> + buildConfiguration = "Production Release" + revealArchiveInOrganizer = "YES"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme index 70957aa8..1cf28c94 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme @@ -136,7 +136,7 @@ buildConfiguration = "Staging Debug"> + buildConfiguration = "Staging Release" + revealArchiveInOrganizer = "YES"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme index f988a70e..dc623756 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme @@ -136,7 +136,7 @@ buildConfiguration = "Test Debug"> + buildConfiguration = "Test Release" + revealArchiveInOrganizer = "YES"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme index 157e47b1..d5d61020 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme @@ -91,7 +91,7 @@ buildConfiguration = "Production Debug"> + buildConfiguration = "Production Release" + revealArchiveInOrganizer = "YES"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme index 7b1560e7..fa3f0ee7 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme @@ -112,7 +112,7 @@ buildConfiguration = "Production Debug"> + buildConfiguration = "Production Release" + revealArchiveInOrganizer = "YES"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme index 40075b6d..1e73621f 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme @@ -91,7 +91,7 @@ buildConfiguration = "Production Debug"> + buildConfiguration = "Production Release" + revealArchiveInOrganizer = "YES"> From 32a36b0e7fce83b88bd5a4fa81ba621f96335ba2 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Wed, 10 Oct 2018 20:06:15 +1100 Subject: [PATCH 29/77] update to xcodeproj 6.1.0 --- Package.resolved | 6 +- Package.swift | 2 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 2 +- .../Project.xcodeproj/project.pbxproj | 7017 +++++++++-------- .../xcschemes/App_iOS Production.xcscheme | 12 +- .../xcschemes/App_iOS Staging.xcscheme | 12 +- .../xcschemes/App_iOS Test.xcscheme | 12 +- .../xcschemes/App_watchOS.xcscheme | 8 +- .../xcshareddata/xcschemes/Framework.xcscheme | 10 +- .../xcschemes/iMessageApp.xcscheme | 8 +- .../ProjectGeneratorTests.swift | 2 +- 11 files changed, 3547 insertions(+), 3544 deletions(-) diff --git a/Package.resolved b/Package.resolved index 56b4146a..dc529f00 100644 --- a/Package.resolved +++ b/Package.resolved @@ -68,9 +68,9 @@ "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": "master", - "revision": "df58e7c581f54512a09587fe519b95caeca57ae1", - "version": null + "branch": null, + "revision": "ed33abf5f983232d5a27ada48d120ad7564a3087", + "version": "6.1.0" } }, { diff --git a/Package.swift b/Package.swift index 9c933b68..31d86154 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", .branch("master")), + .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.1.0"), ], targets: [ .target(name: "XcodeGen", dependencies: [ diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 44748112..a441c58f 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -316,7 +316,7 @@ public class PBXProjGenerator { guard let target = self.pbxProj.targets(named: name).first else { continue } // FIX: Can't set in xcproj 5.0+ - //targetAttributes[uiTestTarget, default: [:]].merge(["TestTargetID": target.reference]) + targetAttributes[uiTestTarget, default: [:]].merge(["TestTargetID": target]) } func generateTargetAttributes(_ target: ProjectTarget, pbxTarget: PBXTarget) { diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index b2fea098..eb94ceaf 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -7,15 +7,15 @@ objects = { /* Begin PBXAggregateTarget section */ - AB59C0690172FF119F045336C1F1CA0D /* SuperTarget */ = { + AT_D40C01B2BAD29EDEA392714DFB69FE8F /* SuperTarget */ = { isa = PBXAggregateTarget; - buildConfigurationList = DF19D3419A77EDFF6F8498EFC3E36048 /* Build configuration list for PBXAggregateTarget "SuperTarget" */; + buildConfigurationList = CL_B523BC91AF70F483BF998E2BA8DD6669 /* Build configuration list for PBXAggregateTarget "SuperTarget" */; buildPhases = ( - 69E4B11A07FF06F8306B5646CA2403EF /* MyScript */, + SSBP_831D7D5A30B0F736E1E92F7B5CF9428F /* MyScript */, ); dependencies = ( - 3E978D446B3957A557629CD1DF47004B /* PBXTargetDependency */, - 3FFD524CC10F62CA07750D1026106CB3 /* PBXTargetDependency */, + TD_B8AB4064784522A5F3760CB1372D1BCD /* PBXTargetDependency */, + TD_D056799E80FFF41247BAE692D01142F0 /* PBXTargetDependency */, ); name = SuperTarget; productName = SuperTarget; @@ -23,932 +23,932 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 05FF80F42925EF347DA1AD4437B741FB /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA14B4739058A49371BCE05E035C864B /* Result.framework */; }; - 0A774DBC62F3C7721971E0C95BB2564A /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */; }; - 11620E0E3097992FFB14B60ADB580C14 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1392EC1CE7BD042F68C39A2AAB6AFBF0 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */; }; - 142F53A6CDA1596543042CFD876E1B17 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; }; - 155B03B91592C42BB787EB5FB9FA4625 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 1A988400D88DEFE16938611C06A0C05F /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */; }; - 1D1EBBAD810AB8280C138C76BE8AF7B5 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 1DAB513CE479D00840BC5D0698409634 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - 1E0C40A9135DA33BF80DDCDD8D9860E8 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */; }; - 242BCE1F2307F71F1BB3EAF2ED63875A /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */; }; - 277BE1159CD7855C287566F29F8939BA /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */; }; - 2A8A171902ADC287F600AAB4C3020AA3 /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */; }; - 2C1F870E81995F5A2616C91AC628A285 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C16ABECF1E65BF7DD6C87529FF02EB72 /* Result.framework */; }; - 2CCCB0657766F9F9527F77A9F42AAF9E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9835A83F1E5D8E22848E171BA3C2DBA6 /* LaunchScreen.storyboard */; }; - 2FADF97C0767D01C764933FD041CE39C /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - 304090AFAC1ED0D09C95B0CB2BEFEB9E /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */; }; - 3243ACA306AD909C8186921F288640DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E005A2734C32783354AAB8546A12718B /* Localizable.strings */; }; - 334AA8E27C083421E9B411D7CD5D3458 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 34D18588625C4E99A9A1265B3B918A50 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 3702C5D2AA18D181E38607CECF96F6E5 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 370B3DF5D5741094E48BE3C0E00B68E7 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C358B60A4C6D98BF3CD9B2C0C75FFC31 /* Interface.storyboard */; }; - 39F00BF22067B72F4FB20F216AFA52DC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 102A33EC5717973ECD491A1CA311D270 /* AppDelegate.swift */; }; - 3D49538E97F4592012896021971B0166 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49A30AD670910672DABA8B736EECBAEB /* LocalizedStoryboard.storyboard */; }; - 3E8A30F173DFFDBDDD0EBDA2D21A0D77 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 523DB06F1851416DDCF4B7616911B6CB /* Assets.xcassets */; }; - 3F23F02A130E74E4DACB22F380E3462D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 34A22AE37B552B7AA18B27919BF3891D /* Assets.xcassets */; }; - 3F6CF73FD22CC393D7A5EA3B0C66C24C /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; }; - 44B62E9C097529F3D5C7A44A5F777A61 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - 45FE59E8EE4FE189573959804F6F6076 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 486E2AABDE448C496C0FCC393A35E669 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49C46F18756F4E9EE9E1CC328F79A2AD /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01801EB5629DB3812650E5E47F3362C8 /* NotificationController.swift */; }; - 4B73A1BC6DB57DC8D7548C59B109CB49 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */; }; - 4EE4F4B638DFB130C8032FB1426CB9F3 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - 5163749E505B01D5ACB99C653525D046 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0C43CE340B78E88FE95F7E8DF5EC35D2 /* Assets.xcassets */; }; - 51FCB6F2D56B68E627A35C53729E423A /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = 508B113F244D2D7F7731ED871B2F16DA /* XPC_Service.m */; }; - 55E7240008DD5452802A41DA6FC7A16F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68FD4BD70DF5429E43E14A65FDF9D81 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - 5679C223A300E533FFBBF0AE849DAFFB /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57CCDA08B5D75FAC5F4FB6CFC78A1356 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C16ABECF1E65BF7DD6C87529FF02EB72 /* Result.framework */; }; - 592B7DC60EC3B3D790E3CED2A478FC8B /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B542FC1F38087BEC4C749F9E0D9122EB /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5A6137039176A4E48CF6B399372D56EA /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 5C92EF2518A277E7F1236963F83A51C8 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */; }; - 5E6B55D2CDA0C2C1984637D5366FB8AE /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */; }; - 6013ED0F37BB222A6B44D0CB89CE69AE /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62C7A0E1D8A45D53F0AB0E72C74E5990 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */; }; - 631A7BEDCB97C03DC5E6AED97FDF408E /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5FCB8A69D323BC3CA127642FCFD887A6 /* Empty.h */; }; - 63570E645EE5129EF6C454A8444DBA1A /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6693ECDA5AD8C2A96135B694E16C3199 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */; }; - 68642C69AC9333487FC491E6FA98261E /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0248345678C3EEA7143459B634AB4F99 /* TestProjectTests.swift */; }; - 6CA893D9CEC25B6E3BD17BC1018474E5 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA14B4739058A49371BCE05E035C864B /* Result.framework */; }; - 70258A8A5A4356F2DF3D4CCA017350FF /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */; }; - 702E56BFA3B2A830E24D74FCA3A33D55 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - 722101AFA2DB6FE7A4D8EB1E671F2C93 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C26F9CE571A93EC043EC05B66DBF382 /* Result.framework */; }; - 766C78D100B581A2A469B47A02A0E6D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10D051136D86691641578C2EB7616D4B /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; - 7AE6DE3A93E56909084D4F93795B3C93 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8EAFD105FB449C592C944D3003203AB5 /* Main.storyboard */; }; - 7AF2CCC3F2ECDC1FE82B2C05BEF75B71 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AC31952D4BF4BB8CC21459D75DCB7DC9 /* main.m */; }; - 7C2B87BE6AEC5813069E896736FA68A3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 80294B8FAECA0DC3B83DC6D2FC6FBE59 /* Assets.xcassets */; }; - 809CDDAA142679CDCFCF376C9CA71C09 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C67AA6BA96CF5A5E2A3FBED848E6C3D4 /* MyBundle.bundle */; }; - 815FE8E5731877B7B3F53381086B04B1 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */; }; - 83F27BE20C6E3641BD9BA0C4D26085F4 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA14B4739058A49371BCE05E035C864B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 8CF2462D2181DDDA1A8E8A1F176F9A47 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8EA31D26241C81C5B7BF40D4B7070B6A /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */; }; - 9D5CC37AFE684374E3CDBE16B0836E9F /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B542FC1F38087BEC4C749F9E0D9122EB /* Result.framework */; }; - 9EDBBA9C5BBD228F8A488B96413AAF33 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA14B4739058A49371BCE05E035C864B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 9F2CA54E38CDF41C367FAC8E304AF4C5 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81F7E21FBB8DA98ECF0A51099CDAF2EE /* MainInterface.storyboard */; }; - A37247C6EE3138C4083810BA1BA6C7FD /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - A4E000AF88BD17B9A2B08452C17C2EEF /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B653BE433FA2C7F27E0DD742C56972 /* StaticLibrary.swift */; }; - A5D1F9A6928F9F6BCCA5230EFCE6998C /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - A6CCC432869EB6B8A65A89B565B57EA5 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */; }; - AA5AF277386012CD6CC015073239E50F /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */; }; - AD00993C2491D03BD3A1B6E48D685C29 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */; }; - B9800A5AECDBEAC5CF1F147562441889 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B542FC1F38087BEC4C749F9E0D9122EB /* Result.framework */; }; - B98C8E72B61BBDB105CFBC7A22B5E972 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3D83428EAF171BE82BD12D1EC5A5BE2 /* ViewController.swift */; }; - BD4C8B77EF89CF7F4ED0D1C4713397E4 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - BD8FA9115EB29C8438DE82A4C33C249A /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BE38983978B6D70795D2924F52F3081D /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */; }; - C0D7A2DF599055387B153A51128FB20A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FDFD35E7E9845A353B2B0DF8B68296A8 /* Main.storyboard */; }; - C4D60709F2B70E1E3966F523976EB21F /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C16ABECF1E65BF7DD6C87529FF02EB72 /* Result.framework */; }; - C4F880A62908F7CD24C87CE5D67B0196 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - C5DD61FED061701F52A2AE59334C3964 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EF485495979F5EF324B541071E00D33B /* Assets.xcassets */; }; - D8E194DE99C1389B4335B7112DEA7DC4 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71DECBD66A150B303E116D2F05C0B4E /* ExtensionDelegate.swift */; }; - D9338C1374B8F82194B44B6F73075123 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 083D78A107BD9A58D0F5B30EA9A65E2C /* Assets.xcassets */; }; - DB8A64197C4C63F208D8D98C4D87C1B2 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - DB95C341F44FE1E093C948F4F734515B /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 466B302E661DE3B3972203B31F4AFED4 /* Localizable.stringsdict */; }; - E249D28B974B22ED41B7BAE7A1CC7468 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - E8B95950224163C1A158F78FD2938D82 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBC3AA70BAD516864D119DDEEE2C436D /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - EBE418FA45EA5317C0CF06FDCA026876 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F16AD8A4E1A6E1189CE048C03CEA9469 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */; }; - F25CA48D38ED8577DF81395CFBFF0FA5 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; - F3A83212C0353120427786F5F59AD59E /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */; }; - F7E9F427669FE7710D0A19AA4E1156F4 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BE8C8DF245700F7E0EF36D9F2B8C0E3 /* TestProjectUITests.swift */; }; - FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; }; - FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; - FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_021628792D80050372F6E56A6C3D0561 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_B993F75B001AB1C272CE83CACC06F0E5 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_0A6C302954FF03411D6F2704ECF5C738 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_0B3CE605B6243480C374176E01B1BB12 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; + BF_149B8FD8F114C531F675E01FBE814609 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = FR_1B0304C0E4DC73614BAA550E4A80D41C /* ResourceFolder */; }; + BF_19C973A29D9994B1E0655B1AFC5528AD /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_6542B94EE7DA40CD30BC54DED26C61C7 /* Interface.storyboard */; }; + BF_1C8AAB7468188315681C0879591969B4 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; + BF_1EC32E6544284999188A140FB5FC6E67 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_5CFDEA59B939FA9F3CA4F775B9E6AD2B /* TestProjectUITests.swift */; }; + BF_230439786C4C6849F488A5FADC6A42A5 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */; }; + BF_2356EAE09301354149D45720369BE7F2 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; + BF_30024D558743C8ABC415D87431CDC13C /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_3080067722B357BFC053D89CCDBF5397 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_33EA0F8B2ADA2D24A683FCD8D6235B10 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_3811C1771AF5342AD8F9FEB63A3465B5 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_390908C547D6F8520DF9AA0CC5A98EB1 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_3B680DD27CFCD491675F1BF257A95A24 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_42222C3F9126FFCC21BA88AD21CFD964 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_42944378315033432F76246C09E5A4DB /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + BF_47A75C8A7EF15658238E254C846C5C6B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_30676EBEE9BE54AA26CAE69BE744CAE8 /* Main.storyboard */; }; + BF_47FBEFEA08B9642C1F711EDA77FC8C89 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_FE6D89DA2D7E7F58340D566590FF221C /* LocalizedStoryboard.storyboard */; }; + BF_47FF83A37355E90F93C0F5B2CFBCE317 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */; }; + BF_4D56F3F4D081A77C11325B96DD34D8E1 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_4EBBAD70FA73DDC89BD933866B90DD08 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_4FC40CAFC1CFAD431215635FE1A0ED86 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_51D370314B5DA8E002A908021E459F50 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_A55A35F549FD72775C37ED05342812AA /* Assets.xcassets */; }; + BF_527E94EECC2501E12D28790BF9318FD3 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; + BF_52C8E2C5962601534CE6F00B88FDB048 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_14B7B5469AA17939993A2B25E775D391 /* Main.storyboard */; }; + BF_5336CD16DBDB1654D75AA91B922DEAD6 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_CC3A24A5C8E1815346752C5AB0745176 /* InterfaceController.swift */; }; + BF_569CC068CD4B7BCE35E974D7B61566DB /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_587563F1FBA507305EC4AD895394002E /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; }; + BF_5C6407EDAC3D88B020BCB46724DC1D14 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_63672615CB7B136F2706924EC460710A /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_65835F9276FF0DB8E27D098367F9D03C /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = VG_C247AA37E9057916EDDC65C7B55E2F38 /* Localizable.stringsdict */; }; + BF_67219751DE020023F9D6068EDCCDC445 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_4EB4AAACD714C13E5BC894C71B954299 /* SomeXPCService.xpc */; }; + BF_6EF6DB8898CD050E19303DC481EEFDC5 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_6FA9DA8B67663BAD9E11C1CEBD3BAC43 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; + BF_703163C1C547AD6EF09BEA5F5F5ED49C /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; + BF_729EB1C88A5E43B2342099D81B301F4D /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_76825DD9B3B10103CDAB9D235BDF6A91 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_5FEC20FF753341FD0483E2E4C622DB05 /* MessagesViewController.swift */; }; + BF_77C9BB7BED4F5970D02E69312259FE09 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; + BF_7C9646667C0D479544A2207DEE3E930B /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_81711FB79375EB743254B809B4E246E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_4DB225C7FF39C16EEFD9A1A5595FCDBC /* AppDelegate.swift */; }; + BF_81C29A47481BF6D67B4CB3F6C836A57E /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; }; + BF_8610CB66872BC72C1690EBD8D102FBC0 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_86F2552DA1E230901EC4CB1A40399019 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; }; + BF_8765851BF5D99B10C220DDD57B968B10 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_90F0E9253F2768C312B65530931CD55A /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_DBD29CA78CDBBEF69B2C39C6D23BBDA1 /* Empty.h */; }; + BF_910C2D6055BD22643F042545CD21AA78 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; + BF_93A4E1A93C7DB4289E526466D547E55E /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */; }; + BF_9830FFD35765AACD86D1B619E22830D6 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_98DEE7FD578AA439550E0023A2ECE8D0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_25BDF725104C5E280D45CBF33F54C72C /* ViewController.swift */; }; + BF_9A74AED05E2F61530BFA0F7D23AF0112 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = VG_EB676136B9F946373D4796800CC00AD4 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_9D9B97D239384F4CE6E73852E027B787 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_B537FEE8515090D3BA0F5CFF3BC76BB1 /* Assets.xcassets */; }; + BF_A038D29BE93A9CF1654D2B7392845AEA /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; }; + BF_A29F8B04C9DD9ADE1EF5AFDAAA0130D2 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_DBB69305458B16774C88720CDD3978E5 /* ExtensionDelegate.swift */; }; + BF_A314322BB45C75B7EE401C539B1120C5 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; }; + BF_A8A5905BCA8872B2D7B0EF6326B33077 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FR_291D6D09ACADC420638E83BEE89DFFEB /* MyBundle.bundle */; }; + BF_ABA4EA32A6DB022806126D9C1418BBA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_ED407ECED0DF010B1E787D238EA91A5D /* Assets.xcassets */; }; + BF_AC2CE59D56846478FDFBB376FF9F9DC0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG_BE436BDD64E90EFB600D47AC69B49DD3 /* Localizable.strings */; }; + BF_B2B4B15D6F7B242DBDA39939111282F9 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_D7B45FAEE40EE622B4FA9192609F9717 /* TestProjectTests.swift */; }; + BF_B5446C54E942A18E025D2061A88004A4 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */; }; + BF_B57F9691AD12CA8AE5528A2BAB9E4A43 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_F256536BB07CF3E64C4DD934F75BED9C /* LaunchScreen.storyboard */; }; + BF_B6E31790D07B981E52CD5BC9049FE303 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_B8E824A58BFE0B81E16BB26087FDC8B4 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; }; + BF_BD2537A230BFC8A86681F0AF34C929DA /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_8B770F475242D91FC20289A3B35CD165 /* Result.framework */; }; + BF_BEFDF47CD7D88221A9C166BD65BF2013 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_C5EA496FE2EDF51C92DC55FD552472E5 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; + BF_C9D24A56926211130F4E25B5D9972B58 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; + BF_CD062A97959629BD672893FDAE89A1E9 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_BB49B398F9291781A60DA963A0BF168C /* NotificationController.swift */; }; + BF_CF8F05DAB384E10C59B65F4D0F51C109 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_D0676C98017B6FDD96A733CB851645DE /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; + BF_D1EF4AECA866B1132F3F01B826B5EE5D /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_D3D64E2595369BBDEF03E07543AE2779 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_D4A5544EDEE7F80A1F9DF1D0684CAFBB /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; + BF_D6588CD7B83034816FFD3A7DB10DAD78 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */; }; + BF_D9111FF58DCAA51B7251F882EC418E67 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_DA12D48C9BCEC64D55B87CE8703432BE /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; + BF_DBF3047DCE71CB2E7B9AC7367F44F8DB /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_CCC97AF230188CAF9B4A66324891CCAD /* StaticLibrary.swift */; }; + BF_E228A4D3997297780216722D71AC9FE5 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; + BF_E2D02DDEDD7DC21831F50A6EAA71E528 /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_C6A9DE885CAF350F6C9D0AC6F7324CD3 /* StandaloneAssets.xcassets */; }; + BF_E35C9C198B45406E64439FF96C17F056 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_E6B3BA0A3A687598FB5CCDF0524E1B10 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; + BF_E6D3B938E2ED4C5339D11D340D3809EF /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_EA0063B4FC2A0980A746D35A8DF71CED /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_06DC429EEFBBA25BC3EE1AA1B4062C10 /* MainInterface.storyboard */; }; + BF_EBC45940911A4942BA04AE1285BF3802 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */; }; + BF_EC0616A0D18A2F723D2AF50287C43669 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_ED8BB47A2229EC3BEE544608267FB82D /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; + BF_F12E44D8E7F617E8A5FD8E1A342E5FAD /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_752FB5DFFBC490CFB9742549A0C48527 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_F6A0FC1F0C9A4EC13BCCBB764D716C3F /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_F7AC9F45ED37FCD5A749FD6F5F4518AF /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */; }; + BF_F9E44FE6ECBD936A8C762D425DDBA37C /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_FA28229372AB6236883309181258AF26 /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_7F4496C534F2DF8C4FB9A8D52414990B /* XPC_Service.m */; }; + BF_FA5F3C87A2571E0F39637D118B6C6F8F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_B243640A6F73B3F3D33ABD05ABDBC26B /* Assets.xcassets */; }; + BF_FD13F69A90FB1D5676B97A8C77D710B4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_F5436E663145426483F206F8A61400BC /* main.m */; }; + BF_FF7EBDFA4462D2983743C84CE99D9714 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_AC5B2FCE520D5306B254D5857E15B6CB /* MoreUnder.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 09709070DE34AF9CD99E9E5EB9990FEA /* PBXContainerItemProxy */ = { + CIP_1AEF07B9F6A9BC9605E82F26AE7BFE15 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; proxyType = 1; - remoteGlobalIDString = DB85CB6A2C15660854D634EF1B0C1FAD; - remoteInfo = App_iOS; + remoteGlobalIDString = NT_6AEE12F93D449E249F5348BBF35D3053; + remoteInfo = StaticLibrary_ObjC_iOS; }; - 0BF678D2C5D11E654050E6FD6AF1321C /* PBXContainerItemProxy */ = { + CIP_1C3D8F2BF099A773651CF8A195466469 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; proxyType = 1; - remoteGlobalIDString = 24B389B0959F4A6CB05BB732DABDFE40; - remoteInfo = iMessageApp; - }; - 1466B8370FAB4F9766F799F21EB3E6F8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A79BE4AD95C20F54B13A8B76DC061CDE; + remoteGlobalIDString = NT_D4C3E345E90AF9F6CBE8CF226FCFBCD6; remoteInfo = StaticLibrary_ObjC_tvOS; }; - 29DD3982DDC8FB1816F3413908D59361 /* PBXContainerItemProxy */ = { + CIP_1F8C8F9FAC75236BB2F60C3BCAE41C55 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; proxyType = 1; - remoteGlobalIDString = FE8D0077B0ADF688264AFA16A3FC213E; - remoteInfo = Framework_iOS; - }; - 322420B31CCE201E90F298BE48129574 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6805881B1B6A80ABD523DAF4AFA493E2; - remoteInfo = Framework_macOS; - }; - 3F55262AEB18533E792A957CE709A5F8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 30FE6802B08DEC0251F565BD100C6552; - remoteInfo = Framework2_iOS; - }; - 454E9650A00080FE30274224CC9F46C0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CBCC05D0B8E90F960AA198981827667B; - remoteInfo = "App_watchOS Extension"; - }; - 61EAE260C32C57D1ADCEAA01E33B62F0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9F21B9C99E75314E51854589C0A2D40C; - remoteInfo = App_watchOS; - }; - 8E732CDAED0C28344CAED954EDDEC26C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 15879457507DA34869A0D03EEEBD5DFE; - remoteInfo = StaticLibrary_ObjC_macOS; - }; - 931421A32656354E62549752A08EDBF8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DB85CB6A2C15660854D634EF1B0C1FAD; - remoteInfo = App_iOS; - }; - 96D6946F3C582A81EDB142746A377EF9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 15879457507DA34869A0D03EEEBD5DFE; - remoteInfo = StaticLibrary_ObjC_macOS; - }; - 9B58798122BFEA3C65A8FF0A3351860D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F61DEA90F1B7331EE9B26BBA1F66D1F3; - remoteInfo = "XPC Service"; - }; - CC516AFC796533BF02DD6B96F8DD7E74 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DB85CB6A2C15660854D634EF1B0C1FAD; - remoteInfo = App_iOS; - }; - DE00464172E7A41CC51991B9136AA5BD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8A0FE14A3A3815C1F26B447C6178089C; - remoteInfo = iMessageExtension; - }; - ED4E74C287B41CF65512AA3E218CCD4A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EC0A54038C133DEC055A8FC6B9E86304; + remoteGlobalIDString = NT_6AEE12F93D449E249F5348BBF35D3053; remoteInfo = StaticLibrary_ObjC_iOS; }; - EEB2D30EB7369BDB638EBEEF136463C2 /* PBXContainerItemProxy */ = { + CIP_291A38592460740F400A80DE5DBA9679 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; proxyType = 1; - remoteGlobalIDString = FE8D0077B0ADF688264AFA16A3FC213E; - remoteInfo = Framework_iOS; + remoteGlobalIDString = NT_BEB0891E36797FE2214A0A9D516D408D; + remoteInfo = App_iOS; }; - F012DD49D84B1DDE30124D55ED320316 /* PBXContainerItemProxy */ = { + CIP_47399FDE0885501C87782313489C95A3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; proxyType = 1; - remoteGlobalIDString = EA82D195375B7CB5C6034F26A1C28D44; + remoteGlobalIDString = NT_34A020E43FBBD797051205235CD82B70; remoteInfo = StaticLibrary_ObjC_watchOS; }; - FAE0D33AD5DFB0090F183AC2E48BA1D2 /* PBXContainerItemProxy */ = { + CIP_4FA1F11884BC4F5DBDFAC1FBEC60AFC1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 48BA824E9883B72747F77581255D9C94 /* Project object */; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; proxyType = 1; - remoteGlobalIDString = EC0A54038C133DEC055A8FC6B9E86304; - remoteInfo = StaticLibrary_ObjC_iOS; + remoteGlobalIDString = NT_BEB0891E36797FE2214A0A9D516D408D; + remoteInfo = App_iOS; + }; + CIP_5E9F76628F77E820EB9AA60A282D8691 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_6BD068FAAC6AA35C090C48147B94EC6E; + remoteInfo = iMessageApp; + }; + CIP_5F2FD3F0AED59431B4F98D7238CAA733 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_5245AB6D3B3CFBC95AEBADF6E0C593B8; + remoteInfo = "App_watchOS Extension"; + }; + CIP_64ED071F49DC88F8192387D7A18827F1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_15609BCEEB00CBCC4C42110EB0366A6F; + remoteInfo = StaticLibrary_ObjC_macOS; + }; + CIP_6D60DD975DE7829AEA72BD4098DE13E6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_38A9FE87056942A2746E0FF025B52A91; + remoteInfo = App_watchOS; + }; + CIP_73A78E804E93B79E9ED934358CDD7D9D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_BEB0891E36797FE2214A0A9D516D408D; + remoteInfo = App_iOS; + }; + CIP_862C50E687ABB75CCDF71F1157709A4D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_9F72C903B42E1AA3B88F97B917231B15; + remoteInfo = Framework2_iOS; + }; + CIP_A760C88E6F24D3F06081AEBDEB8AE54B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_7D108AE86BED8C9CCF52C2646FA4C5DE; + remoteInfo = Framework_iOS; + }; + CIP_B5B71FB9D5064D7E05E9E44827A87775 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_6A4FC6EE80FB2821AB96D51C3BC8966E; + remoteInfo = iMessageExtension; + }; + CIP_BAAD03920C86C2839C3C93FDA5568ECE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_23509FD082D1F788E6D6431F509B11AF; + remoteInfo = "XPC Service"; + }; + CIP_C82ED1EBAD4D7218ED9694EB7BF4DE74 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_15609BCEEB00CBCC4C42110EB0366A6F; + remoteInfo = StaticLibrary_ObjC_macOS; + }; + CIP_CA46A507405C3CBD7579D2C9A3F8719E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_9D53AF351F8DAE25354F2391248DFCCA; + remoteInfo = Framework_macOS; + }; + CIP_DC690C90FF2F615A1EB93D9803F8D905 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; + proxyType = 1; + remoteGlobalIDString = NT_7D108AE86BED8C9CCF52C2646FA4C5DE; + remoteInfo = Framework_iOS; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 0B85189BAB2D1568EECF81226FF3FF97 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; - dstSubfolderSpec = 16; - files = ( - A37247C6EE3138C4083810BA1BA6C7FD /* XPC Service.xpc in CopyFiles */, - 1392EC1CE7BD042F68C39A2AAB6AFBF0 /* SomeXPCService.xpc in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1130301AAAB06CA6AE2DBC09B9F82B74 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3702C5D2AA18D181E38607CECF96F6E5 /* Framework2.framework in Embed Frameworks */, - 1D1EBBAD810AB8280C138C76BE8AF7B5 /* Framework.framework in Embed Frameworks */, - BD8FA9115EB29C8438DE82A4C33C249A /* SomeFramework.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 29FB14F57B61FDFF88A94C7B9D664F12 /* CopyFiles */ = { + CFBP_0B6C520DAC94DDCE678BE15C53528F25 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - 62C7A0E1D8A45D53F0AB0E72C74E5990 /* StaticLibrary_ObjC.h in CopyFiles */, - 5E6B55D2CDA0C2C1984637D5366FB8AE /* module.modulemap in CopyFiles */, + BF_910C2D6055BD22643F042545CD21AA78 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_527E94EECC2501E12D28790BF9318FD3 /* module.modulemap in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; - 31035708668339C7624CD18BC4971F27 /* Embed Frameworks */ = { + CFBP_1C40B0777F31334440F91C2DB34EF404 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 83F27BE20C6E3641BD9BA0C4D26085F4 /* Result.framework in Embed Frameworks */, + BF_6EF6DB8898CD050E19303DC481EEFDC5 /* Framework2.framework in Embed Frameworks */, + BF_63672615CB7B136F2706924EC460710A /* Framework.framework in Embed Frameworks */, + BF_30024D558743C8ABC415D87431CDC13C /* SomeFramework.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 3F08DFC5C47AB8175AF8061735995D5F /* CopyFiles */ = { + CFBP_2FE0B34CC045616C815F2675387DA9D5 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; + dstPath = ""; + dstSubfolderSpec = 10; files = ( - 1A988400D88DEFE16938611C06A0C05F /* StaticLibrary_ObjC.h in CopyFiles */, - 1E0C40A9135DA33BF80DDCDD8D9860E8 /* module.modulemap in CopyFiles */, + BF_F9E44FE6ECBD936A8C762D425DDBA37C /* Result.framework in Embed Frameworks */, ); + name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 64735A35127234188A50A9CC433F3D43 /* Embed App Extensions */ = { + CFBP_3BE6FE084D6BE913354F37B1DD9A8D92 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + BF_F6A0FC1F0C9A4EC13BCCBB764D716C3F /* Result.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + CFBP_469B033759EACBB99ECBF1008677C590 /* Embed App Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - 45FE59E8EE4FE189573959804F6F6076 /* App_watchOS Extension.appex in Embed App Extensions */, + BF_E6D3B938E2ED4C5339D11D340D3809EF /* App_watchOS Extension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; }; - 800C402270322E33CF2C5DBBAE32DD06 /* Embed Watch Content */ = { + CFBP_4DFB7882C9F8BAB250BB0A6B9457B4CC /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + BF_C5EA496FE2EDF51C92DC55FD552472E5 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_0B3CE605B6243480C374176E01B1BB12 /* module.modulemap in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CFBP_712E86A86BBF89DB5B5F3874B24B8996 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + BF_DA12D48C9BCEC64D55B87CE8703432BE /* StaticLibrary_ObjC.h in CopyFiles */, + BF_703163C1C547AD6EF09BEA5F5F5ED49C /* module.modulemap in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CFBP_961F46C30E720E886AEFD11D45DDA199 /* Embed Watch Content */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; dstSubfolderSpec = 16; files = ( - 155B03B91592C42BB787EB5FB9FA4625 /* App_watchOS.app in Embed Watch Content */, + BF_CF8F05DAB384E10C59B65F4D0F51C109 /* App_watchOS.app in Embed Watch Content */, ); name = "Embed Watch Content"; runOnlyForDeploymentPostprocessing = 0; }; - 8C62857F0DCEBB22C299F26FCCE769F9 /* Embed App Extensions */ = { + CFBP_AD91D17C63B2CD9AE7EFB9EFD62A8223 /* Embed App Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - 34D18588625C4E99A9A1265B3B918A50 /* iMessageExtension.appex in Embed App Extensions */, + BF_42222C3F9126FFCC21BA88AD21CFD964 /* iMessageExtension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; }; - 916C69163E65CD06E8BD0CCC8D8227C2 /* Embed Frameworks */ = { + CFBP_CB2355266C8BAA9C97863011F3DE05A2 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 9EDBBA9C5BBD228F8A488B96413AAF33 /* Result.framework in Embed Frameworks */, + BF_4FC40CAFC1CFAD431215635FE1A0ED86 /* Framework.framework in Embed Frameworks */, + BF_8765851BF5D99B10C220DDD57B968B10 /* Result.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 9ABD85CE4BE56F04AD335239A3D8465F /* CopyFiles */ = { + CFBP_CC1EF1963551F7E08925519982C248B9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - 815FE8E5731877B7B3F53381086B04B1 /* StaticLibrary_ObjC.h in CopyFiles */, - 5C92EF2518A277E7F1236963F83A51C8 /* module.modulemap in CopyFiles */, + BF_2356EAE09301354149D45720369BE7F2 /* StaticLibrary_ObjC.h in CopyFiles */, + BF_1C8AAB7468188315681C0879591969B4 /* module.modulemap in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; - C03880471FE232DBFD669107EC84C23E /* CopyFiles */ = { + CFBP_CC737A6BF6243B189B109606B0C4B5A2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; + dstSubfolderSpec = 16; + files = ( + BF_D9111FF58DCAA51B7251F882EC418E67 /* XPC Service.xpc in CopyFiles */, + BF_67219751DE020023F9D6068EDCCDC445 /* SomeXPCService.xpc in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CFBP_D7E07645BC437C4DFBB212DFC4F3B09E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "include/$(PRODUCT_NAME)"; dstSubfolderSpec = 16; files = ( - F3A83212C0353120427786F5F59AD59E /* StaticLibrary_ObjC.h in CopyFiles */, - 70258A8A5A4356F2DF3D4CCA017350FF /* module.modulemap in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DBC722FD0EE319959445B8F14D3EE091 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 334AA8E27C083421E9B411D7CD5D3458 /* Framework.framework in Embed Frameworks */, - 592B7DC60EC3B3D790E3CED2A478FC8B /* Result.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - FE39362C1CB6263D81609FF7975359EE /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - 631A7BEDCB97C03DC5E6AED97FDF408E /* Empty.h in CopyFiles */, + BF_90F0E9253F2768C312B65530931CD55A /* Empty.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 01801EB5629DB3812650E5E47F3362C8 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; }; - 0248345678C3EEA7143459B634AB4F99 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; }; - 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; }; - 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SomeFramework.framework; path = Vendor/SomeFramework.framework; sourceTree = ""; }; - 083D78A107BD9A58D0F5B30EA9A65E2C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0BE8C8DF245700F7E0EF36D9F2B8C0E3 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; - 0BFEFFB973F5EEEF285D98AB90CFC9B0 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; }; - 0C43CE340B78E88FE95F7E8DF5EC35D2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; - 102A33EC5717973ECD491A1CA311D270 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 10D051136D86691641578C2EB7616D4B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 11DBDC38AD04D9F24454201311335431 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; }; - 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; }; - 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; - 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; }; - 247D8122E426D1FC239D36918CE3C0C5 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; }; - 2553AE42F1AAAE25D59E0FE045BA52C2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 25F603F3FBBAB0B8947331C9190A6282 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - 2923CD786EB965107819EFF08193E672 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C26F9CE571A93EC043EC05B66DBF382 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; - 2E871C49A75D636E1E87F8904C5BA3D9 /* en */ = {isa = PBXFileReference; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; - 31F27C0F2868434258A846C4ADE4B35A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 34A22AE37B552B7AA18B27919BF3891D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 354650483D8F76CB15A0FB0A99D2657F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; - 3F8D809984627520BE1811A1AC9B1AD9 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; - 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 508B113F244D2D7F7731ED871B2F16DA /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; }; - 523DB06F1851416DDCF4B7616911B6CB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; - 5FA5EA11F66D659044AB1FB5496EBF25 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 5FCB8A69D323BC3CA127642FCFD887A6 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; - 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; - 6B9588F9AA980468B26837ADE36D0D2E /* Base */ = {isa = PBXFileReference; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; }; - 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */ = {isa = PBXFileReference; path = SomeXPCService.xpc; sourceTree = ""; }; - 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 72AE3D8A409EF0F4D17EA0BD0EC3BFFA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 75B653BE433FA2C7F27E0DD742C56972 /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; }; - 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = ""; }; - 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; - 7AF3ACEAC55D3B6352EED8415D5B2951 /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; }; - 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; }; - 80294B8FAECA0DC3B83DC6D2FC6FBE59 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; - 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; - 88CE11E8D928D43BCC70F12A5576D511 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8AFEF032B9B258B97EFBD5B5AA741E8C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A444869BCBB55167EF043EEFFD075A78 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A59DAE760F32225493BDC5D378468EA9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; - AC31952D4BF4BB8CC21459D75DCB7DC9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - AFDDC1A69B4B2637D36C39EE01DF23C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B542FC1F38087BEC4C749F9E0D9122EB /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; - B71DECBD66A150B303E116D2F05C0B4E /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; - B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; }; - BD07DCE20104773C42E7617A09A55BD5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C16ABECF1E65BF7DD6C87529FF02EB72 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; - C64021D20FD55B89CE1AFE88AE7C1CDD /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; - C67AA6BA96CF5A5E2A3FBED848E6C3D4 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; }; - C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - C8822458902508063262BA655921BA2F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - CA14B4739058A49371BCE05E035C864B /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; - CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D3D83428EAF171BE82BD12D1EC5A5BE2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - D68FD4BD70DF5429E43E14A65FDF9D81 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - D99F14029800E2D9F2434C4B6D718A5E /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; - DB194C9EF763551CE2D5131407E8CF1C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; }; - DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; - E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - EC5C7923578F1110EE9EE74505530753 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - EF485495979F5EF324B541071E00D33B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - F04030C0892CAC78F4B4376F938018E3 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; - F435E28C9379AF718A5D502BF3B2FB26 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - F56A7C74F4A75492F063A0A5BDBBF65C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; - F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; - F9FE9B31FDF6705B4BFB0BCFF437F493 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FBF4C9FD09B493401414CA2F3086041F /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; }; - FFA022D59DE3CD80EDCC5CCEC6DB29C7 /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; }; + FR_05405007CB77B2E003B19B89401C12AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_07C0A7866967FA47B3F2777BF4AB694A /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = ""; }; + FR_0823766D9A1DAB5D3F9CC04A9B35FA3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; + FR_11E95FCD1DEB0C8A01A053518C1DAA8E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + FR_1672C218968DD6996F05E3C7688F0718 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_1B0304C0E4DC73614BAA550E4A80D41C /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; + FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_22A431E337CB22CE70E39135206EDE27 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; + FR_25BDF725104C5E280D45CBF33F54C72C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; + FR_2649A01C17A7301DD72EA826604ED8AA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; + FR_291D6D09ACADC420638E83BEE89DFFEB /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; }; + FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SomeFramework.framework; path = Vendor/SomeFramework.framework; sourceTree = ""; }; + FR_347062562C9C212A082B1326BBCDC71B /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; }; + FR_35B9B5E8A2ED60FBB9CED8AE515B16B5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; }; + FR_3744DA35690747A918CC896E2354C59D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_3B4065B548BFD8CFB3D1153F7106DDA3 /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; }; + FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; }; + FR_3ED99EEAF978C071491E281B8EAFD249 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_41E1155D8A7FDD97B783A1D5B3AD2C5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_4B58A01ABBE8E0A56B7B5A539C9BF5C7 /* Base */ = {isa = PBXFileReference; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; }; + FR_4DB225C7FF39C16EEFD9A1A5595FCDBC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + FR_4EB4AAACD714C13E5BC894C71B954299 /* SomeXPCService.xpc */ = {isa = PBXFileReference; path = SomeXPCService.xpc; sourceTree = ""; }; + FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_58A974F0E117C1384FD1B5147E524659 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; + FR_5B3188BDA6DB0560398A483646F17AE4 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_5CFDEA59B939FA9F3CA4F775B9E6AD2B /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; + FR_5E4B4E53251DE2294715A48CC249EBFD /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; }; + FR_5FEC20FF753341FD0483E2E4C622DB05 /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; + FR_62ECE5A3D0F25415CB50A28226B91EBE /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + FR_6643E0FE8DD9AAC71691A739070C6833 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; + FR_752FB5DFFBC490CFB9742549A0C48527 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + FR_7532DD7B78451A5040048474AC4FBCCC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + FR_7C782E8FBF41DE8BB1E3789DF2C8C1F7 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; }; + FR_7C8280C3C5E1D43BBB12A5F0156A8305 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + FR_7F4496C534F2DF8C4FB9A8D52414990B /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; }; + FR_81A08F81FED7C42DC346B9611ECD21AA /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; + FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; + FR_8B770F475242D91FC20289A3B35CD165 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; + FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_9403DF729F7FE2E6B823C1DACE1E6214 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; + FR_98BB4C8D33EB0E666C136ACD08B21EB3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_9B4B00A3CDADD50167B2393562AEBAB2 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; + FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_A51DE87AC269BC36016F9CAC32B4ECB2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; + FR_A55A35F549FD72775C37ED05342812AA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; }; + FR_AC5B2FCE520D5306B254D5857E15B6CB /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; }; + FR_B243640A6F73B3F3D33ABD05ABDBC26B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_B537FEE8515090D3BA0F5CFF3BC76BB1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_B993F75B001AB1C272CE83CACC06F0E5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + FR_BB49B398F9291781A60DA963A0BF168C /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = ""; }; + FR_BCEF8D29C9B93D3160D8D76DD368C8AD /* en */ = {isa = PBXFileReference; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; + FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = ""; }; + FR_C5682A1371F91CBD1254C115F0439F12 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + FR_C6A9DE885CAF350F6C9D0AC6F7324CD3 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = ""; }; + FR_C73B96CEEE97DE429C638EBD9C2F3D2B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + FR_C86A7EAE4DFF4327D1E7D32A597CA4AC /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = ""; }; + FR_CB1D0F4BB53B8DEE921C6E232193A62B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_CC3A24A5C8E1815346752C5AB0745176 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; + FR_CCC97AF230188CAF9B4A66324891CCAD /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; }; + FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; + FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; + FR_D7B45FAEE40EE622B4FA9192609F9717 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; }; + FR_DACDD51068A6E1B7D2470F3E27E5EB2C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_DBB69305458B16774C88720CDD3978E5 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; + FR_DBD29CA78CDBBEF69B2C39C6D23BBDA1 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; + FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; + FR_E3314150DA4CEFF65D69CF7DB678E845 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_ED407ECED0DF010B1E787D238EA91A5D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_F18AD4408D0A35A0B9EAE353E8087CDE /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_F5353B71B99044C8C37D7601A8107195 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; }; + FR_F5436E663145426483F206F8A61400BC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + FR_F861CF6DF133AAD164CBE6DF2C7CEBFF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1D124A23C4D38CE6B023194E85A64BBA /* Frameworks */ = { + FBP_18D4325BBE506E88E1C742F57AECB0CD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C4D60709F2B70E1E3966F523976EB21F /* Result.framework in Frameworks */, + BF_42944378315033432F76246C09E5A4DB /* Framework2.framework in Frameworks */, + BF_A314322BB45C75B7EE401C539B1120C5 /* Framework.framework in Frameworks */, + BF_B8E824A58BFE0B81E16BB26087FDC8B4 /* Result.framework in Frameworks */, + BF_A038D29BE93A9CF1654D2B7392845AEA /* StaticLibrary_ObjC.a in Frameworks */, + BF_93A4E1A93C7DB4289E526466D547E55E /* SomeFramework.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 266AF93F95F8ECC5F62E443DD79D4263 /* Frameworks */ = { + FBP_1BDCD6E0245ED2400E6FE9AC9C334DE4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9D5CC37AFE684374E3CDBE16B0836E9F /* Result.framework in Frameworks */, + BF_BD2537A230BFC8A86681F0AF34C929DA /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3730EBC6001089E597081CA9CF12AF52 /* Frameworks */ = { + FBP_3C7ADC43EF430300C2A315B0D2860080 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5D1F9A6928F9F6BCCA5230EFCE6998C /* Framework2.framework in Frameworks */, - F25CA48D38ED8577DF81395CFBFF0FA5 /* Framework.framework in Frameworks */, - 05FF80F42925EF347DA1AD4437B741FB /* Result.framework in Frameworks */, - 142F53A6CDA1596543042CFD876E1B17 /* StaticLibrary_ObjC.a in Frameworks */, - 2A8A171902ADC287F600AAB4C3020AA3 /* SomeFramework.framework in Frameworks */, + BF_6FA9DA8B67663BAD9E11C1CEBD3BAC43 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6F3C985C6701880E8731C4AAFBDC9FEF /* Frameworks */ = { + FBP_4E773D46F6F726BBC0032C576D02FCB7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6CA893D9CEC25B6E3BD17BC1018474E5 /* Result.framework in Frameworks */, + BF_81C29A47481BF6D67B4CB3F6C836A57E /* Framework.framework in Frameworks */, + BF_230439786C4C6849F488A5FADC6A42A5 /* Result.framework in Frameworks */, + BF_587563F1FBA507305EC4AD895394002E /* StaticLibrary_ObjC.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 78E2554EF343D4CF421577E8651E5480 /* Frameworks */ = { + FBP_71D96680A2FBE24C4C8BD0B5E55FE034 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 57CCDA08B5D75FAC5F4FB6CFC78A1356 /* Result.framework in Frameworks */, + BF_ED8BB47A2229EC3BEE544608267FB82D /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C79A51DBA8AF7631AEF22BA83E104A04 /* Frameworks */ = { + FBP_935BCDE6C86D2D59A945DC1E6886D7C3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 722101AFA2DB6FE7A4D8EB1E671F2C93 /* Result.framework in Frameworks */, + BF_B5446C54E942A18E025D2061A88004A4 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C8CA7D5902F866D50BF6F9A24BF1D10A /* Frameworks */ = { + FBP_98B76E46D78FD48FB47A41B8891665BC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FA69E7367B9D2F2CB97F57AE7984D9BD /* Framework.framework in Frameworks */, - B9800A5AECDBEAC5CF1F147562441889 /* Result.framework in Frameworks */, - 3F6CF73FD22CC393D7A5EA3B0C66C24C /* StaticLibrary_ObjC.a in Frameworks */, + BF_86F2552DA1E230901EC4CB1A40399019 /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F6C2490C6497837A21966090C77C3602 /* Frameworks */ = { + FBP_F6E2D2D110453E88BF9E3FB6A466B8EC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2C1F870E81995F5A2616C91AC628A285 /* Result.framework in Frameworks */, + BF_D4A5544EDEE7F80A1F9DF1D0684CAFBB /* Result.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 03A84AADCBED3566C47BC9335B8085C7 /* App_macOS */ = { + G_089F5A7E7FB159719FE19B5E84B85D5D /* App_watchOS Extension */ = { isa = PBXGroup; children = ( - 102A33EC5717973ECD491A1CA311D270 /* AppDelegate.swift */, - 34A22AE37B552B7AA18B27919BF3891D /* Assets.xcassets */, - F9FE9B31FDF6705B4BFB0BCFF437F493 /* Info.plist */, - FDFD35E7E9845A353B2B0DF8B68296A8 /* Main.storyboard */, - D3D83428EAF171BE82BD12D1EC5A5BE2 /* ViewController.swift */, - ); - path = App_macOS; - sourceTree = ""; - }; - 0637537049544BDB5A2EB886E765A6C8 /* Module */ = { - isa = PBXGroup; - children = ( - 84A2F7FD70C38F7B09D6809A2586E1A7 /* module.modulemap */, - ); - path = Module; - sourceTree = ""; - }; - 09F7EC373CEDA69072DC9D77495F0E25 /* App_iOS_UITests */ = { - isa = PBXGroup; - children = ( - 31F27C0F2868434258A846C4ADE4B35A /* Info.plist */, - 0BE8C8DF245700F7E0EF36D9F2B8C0E3 /* TestProjectUITests.swift */, - ); - path = App_iOS_UITests; - sourceTree = ""; - }; - 17999F76E13B84D118972DC03BCEA6F2 /* App_iOS_Tests */ = { - isa = PBXGroup; - children = ( - BD07DCE20104773C42E7617A09A55BD5 /* Info.plist */, - 0248345678C3EEA7143459B634AB4F99 /* TestProjectTests.swift */, - ); - path = App_iOS_Tests; - sourceTree = ""; - }; - 1AAEB7BBE834CAB4A205069AE3E0AF11 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F4476AACF02F14D7CACC61F1763C176B /* Carthage */, - 065FC8C30C4E0AB09C1E77734E46F252 /* SomeFramework.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 215025EF88E84A49861B7B0A717D575C /* Configs */ = { - isa = PBXGroup; - children = ( - 0BFEFFB973F5EEEF285D98AB90CFC9B0 /* base.xcconfig */, - C64021D20FD55B89CE1AFE88AE7C1CDD /* config.xcconfig */, - ); - path = Configs; - sourceTree = ""; - }; - 384C5FF5A3C798619B2A3F5A9C654EE3 /* Resources */ = { - isa = PBXGroup; - children = ( - C67AA6BA96CF5A5E2A3FBED848E6C3D4 /* MyBundle.bundle */, - ); - path = Resources; - sourceTree = ""; - }; - 4AD39BFA18B0D81C8C8BA3425FE6E91A /* Framework */ = { - isa = PBXGroup; - children = ( - 0F657AA556F579E2C56BC6BC04E3CAF4 /* FrameworkFile.swift */, - 25F603F3FBBAB0B8947331C9190A6282 /* Info.plist */, - 7B0B64C16BE3E860FA96760027A29C74 /* MyFramework.h */, - ); - path = Framework; - sourceTree = ""; - }; - 56936C3686A0928B34562E16F94536C8 /* App_watchOS */ = { - isa = PBXGroup; - children = ( - 0C43CE340B78E88FE95F7E8DF5EC35D2 /* Assets.xcassets */, - 88CE11E8D928D43BCC70F12A5576D511 /* Info.plist */, - C358B60A4C6D98BF3CD9B2C0C75FFC31 /* Interface.storyboard */, - ); - path = App_watchOS; - sourceTree = ""; - }; - 5BC30B8BA34DE0A67196277EA184BAAC /* CopyFiles */ = { - isa = PBXGroup; - children = ( - 5FCB8A69D323BC3CA127642FCFD887A6 /* Empty.h */, - ); - path = CopyFiles; - sourceTree = ""; - }; - 61FC1E8D4842FD2FBD2E37F067E943F9 /* iOS */ = { - isa = PBXGroup; - children = ( - CA14B4739058A49371BCE05E035C864B /* Result.framework */, - ); - path = iOS; - sourceTree = ""; - }; - 63A2C5F06E17FA2652DDA338F0A32501 /* StaticLibrary_ObjC */ = { - isa = PBXGroup; - children = ( - 0637537049544BDB5A2EB886E765A6C8 /* Module */, - 5878F070E087ECAECE45ADD20BE9D635 /* StaticLibrary_ObjC.h */, - B9F777771795CF517CFB5FE931917C46 /* StaticLibrary_ObjC.m */, - ); - path = StaticLibrary_ObjC; - sourceTree = ""; - }; - 874A71D4E37BA319FD212D21173C1CED /* iMessage MessagesExtension */ = { - isa = PBXGroup; - children = ( - 80294B8FAECA0DC3B83DC6D2FC6FBE59 /* Assets.xcassets */, - 72AE3D8A409EF0F4D17EA0BD0EC3BFFA /* Info.plist */, - 81F7E21FBB8DA98ECF0A51099CDAF2EE /* MainInterface.storyboard */, - 67BB19DDA48C227FF6E676B89FDFCAEB /* MessagesViewController.swift */, - ); - path = "iMessage MessagesExtension"; - sourceTree = ""; - }; - B2AA9B645D928F657D399D8F62BB4DDC /* App_watchOS Extension */ = { - isa = PBXGroup; - children = ( - 523DB06F1851416DDCF4B7616911B6CB /* Assets.xcassets */, - B71DECBD66A150B303E116D2F05C0B4E /* ExtensionDelegate.swift */, - AFDDC1A69B4B2637D36C39EE01DF23C3 /* Info.plist */, - 81E39751EDA257E7F7946E95A67FDBBD /* InterfaceController.swift */, - 01801EB5629DB3812650E5E47F3362C8 /* NotificationController.swift */, - 11DBDC38AD04D9F24454201311335431 /* PushNotificationPayload.apns */, + FR_B243640A6F73B3F3D33ABD05ABDBC26B /* Assets.xcassets */, + FR_DBB69305458B16774C88720CDD3978E5 /* ExtensionDelegate.swift */, + FR_3744DA35690747A918CC896E2354C59D /* Info.plist */, + FR_CC3A24A5C8E1815346752C5AB0745176 /* InterfaceController.swift */, + FR_BB49B398F9291781A60DA963A0BF168C /* NotificationController.swift */, + FR_7C782E8FBF41DE8BB1E3789DF2C8C1F7 /* PushNotificationPayload.apns */, ); path = "App_watchOS Extension"; sourceTree = ""; }; - BA50A516F5BBC843E3CD4B1845B99334 /* App */ = { + G_0D2DDBB1C39493B8B0EAF9CC23272F2D /* Framework */ = { isa = PBXGroup; children = ( - 10D051136D86691641578C2EB7616D4B /* AppDelegate.swift */, - 083D78A107BD9A58D0F5B30EA9A65E2C /* Assets.xcassets */, - A444869BCBB55167EF043EEFFD075A78 /* Info.plist */, - 9835A83F1E5D8E22848E171BA3C2DBA6 /* LaunchScreen.storyboard */, - E005A2734C32783354AAB8546A12718B /* Localizable.strings */, - 466B302E661DE3B3972203B31F4AFED4 /* Localizable.stringsdict */, - 49A30AD670910672DABA8B736EECBAEB /* LocalizedStoryboard.storyboard */, - 8EAFD105FB449C592C944D3003203AB5 /* Main.storyboard */, - 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */, - 3F8D809984627520BE1811A1AC9B1AD9 /* module.modulemap */, - D68FD4BD70DF5429E43E14A65FDF9D81 /* ViewController.swift */, + FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */, + FR_F861CF6DF133AAD164CBE6DF2C7CEBFF /* Info.plist */, + FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */, + ); + path = Framework; + sourceTree = ""; + }; + G_23236546763854F4301D7847EBA0A2BF /* XPC Service */ = { + isa = PBXGroup; + children = ( + FR_98BB4C8D33EB0E666C136ACD08B21EB3 /* Info.plist */, + FR_F5436E663145426483F206F8A61400BC /* main.m */, + FR_07C0A7866967FA47B3F2777BF4AB694A /* XPC_Service.h */, + FR_7F4496C534F2DF8C4FB9A8D52414990B /* XPC_Service.m */, + FR_81A08F81FED7C42DC346B9611ECD21AA /* XPC_ServiceProtocol.h */, + ); + path = "XPC Service"; + sourceTree = ""; + }; + G_26EB72A03E79484F94412C6DF07B2C65 /* iOS */ = { + isa = PBXGroup; + children = ( + FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */, + ); + path = iOS; + sourceTree = ""; + }; + G_2C00D0D23CBE29FF5F6DFEB95CBF2ECA /* UnderFileGroup */ = { + isa = PBXGroup; + children = ( + FR_AC5B2FCE520D5306B254D5857E15B6CB /* MoreUnder.swift */, + ); + path = UnderFileGroup; + sourceTree = ""; + }; + G_322C327C1DB8AE7E0B99EF59318DFE22 /* Resources */ = { + isa = PBXGroup; + children = ( + FR_291D6D09ACADC420638E83BEE89DFFEB /* MyBundle.bundle */, + ); + path = Resources; + sourceTree = ""; + }; + G_3569DDFAF0CD0D2E17F8D05B12F9A7BA /* tvOS */ = { + isa = PBXGroup; + children = ( + FR_8B770F475242D91FC20289A3B35CD165 /* Result.framework */, + ); + path = tvOS; + sourceTree = ""; + }; + G_373C03E19EC66ABB051FC35B4E57A52E /* App_iOS_UITests */ = { + isa = PBXGroup; + children = ( + FR_0823766D9A1DAB5D3F9CC04A9B35FA3E /* Info.plist */, + FR_5CFDEA59B939FA9F3CA4F775B9E6AD2B /* TestProjectUITests.swift */, + ); + path = App_iOS_UITests; + sourceTree = ""; + }; + G_415E92CCC7C77CD8BB161FA75E8B66EF /* iMessage MessagesExtension */ = { + isa = PBXGroup; + children = ( + FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */, + FR_E3314150DA4CEFF65D69CF7DB678E845 /* Info.plist */, + VG_06DC429EEFBBA25BC3EE1AA1B4062C10 /* MainInterface.storyboard */, + FR_5FEC20FF753341FD0483E2E4C622DB05 /* MessagesViewController.swift */, + ); + path = "iMessage MessagesExtension"; + sourceTree = ""; + }; + G_4401384B8D17D0B62305BE82DE0660D2 /* App_iOS_Tests */ = { + isa = PBXGroup; + children = ( + FR_CB1D0F4BB53B8DEE921C6E232193A62B /* Info.plist */, + FR_D7B45FAEE40EE622B4FA9192609F9717 /* TestProjectTests.swift */, + ); + path = App_iOS_Tests; + sourceTree = ""; + }; + G_4A1045347B09A484656D26436E35FDCC /* StaticLibrary_ObjC */ = { + isa = PBXGroup; + children = ( + G_AFE0E055A99B8BF7C44E69B9B69889C8 /* Module */, + FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */, + FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */, + ); + path = StaticLibrary_ObjC; + sourceTree = ""; + }; + G_54CAD56F6F3EAD10E9DB8D50B52D09F3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + G_A1CE8BFBEAC6AFDC64D7068C3CE11421 /* Carthage */, + FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + G_68375B6CA3E19FBBA0246B55B60849C0 /* App_macOS */ = { + isa = PBXGroup; + children = ( + FR_4DB225C7FF39C16EEFD9A1A5595FCDBC /* AppDelegate.swift */, + FR_A55A35F549FD72775C37ED05342812AA /* Assets.xcassets */, + FR_3ED99EEAF978C071491E281B8EAFD249 /* Info.plist */, + VG_14B7B5469AA17939993A2B25E775D391 /* Main.storyboard */, + FR_25BDF725104C5E280D45CBF33F54C72C /* ViewController.swift */, + ); + path = App_macOS; + sourceTree = ""; + }; + G_77F9CDD1713BAEF02DF44C1EA19D86B8 /* Mac */ = { + isa = PBXGroup; + children = ( + FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */, + ); + path = Mac; + sourceTree = ""; + }; + G_7C1E92BE8CA995A6B0952C8AE6F5ADF9 /* App_watchOS */ = { + isa = PBXGroup; + children = ( + FR_ED407ECED0DF010B1E787D238EA91A5D /* Assets.xcassets */, + FR_DACDD51068A6E1B7D2470F3E27E5EB2C /* Info.plist */, + VG_6542B94EE7DA40CD30BC54DED26C61C7 /* Interface.storyboard */, + ); + path = App_watchOS; + sourceTree = ""; + }; + G_81658721738C48797F805CC891E70B6F /* Configs */ = { + isa = PBXGroup; + children = ( + FR_F5353B71B99044C8C37D7601A8107195 /* base.xcconfig */, + FR_22A431E337CB22CE70E39135206EDE27 /* config.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + G_8F5765334752A7E52B1E63ACAC466729 /* App */ = { + isa = PBXGroup; + children = ( + FR_B993F75B001AB1C272CE83CACC06F0E5 /* AppDelegate.swift */, + FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */, + FR_05405007CB77B2E003B19B89401C12AB /* Info.plist */, + VG_F256536BB07CF3E64C4DD934F75BED9C /* LaunchScreen.storyboard */, + VG_BE436BDD64E90EFB600D47AC69B49DD3 /* Localizable.strings */, + VG_C247AA37E9057916EDDC65C7B55E2F38 /* Localizable.stringsdict */, + VG_FE6D89DA2D7E7F58340D566590FF221C /* LocalizedStoryboard.storyboard */, + VG_30676EBEE9BE54AA26CAE69BE744CAE8 /* Main.storyboard */, + VG_EB676136B9F946373D4796800CC00AD4 /* Model.xcdatamodeld */, + FR_9B4B00A3CDADD50167B2393562AEBAB2 /* module.modulemap */, + FR_752FB5DFFBC490CFB9742549A0C48527 /* ViewController.swift */, ); name = App; path = App_iOS; sourceTree = ""; }; - BEB2E21F3B6F8B8E6CA0CB877DE3D47D /* Vendor */ = { + G_9DEB15811B31C2D4D4B63339FBE33149 /* FileGroup */ = { isa = PBXGroup; children = ( - 7047649EC963EC43D7BC538E7D8607CC /* SomeXPCService.xpc */, - ); - path = Vendor; - sourceTree = ""; - }; - C27E200F9D2708164A4BDD75B7A861BC /* StandaloneFiles */ = { - isa = PBXGroup; - children = ( - 7A5E91CF52DCCAC8D07B999177AAB3B7 /* Standalone.swift */, - 02537F8F3DAD9BF1F249FF662131F1F5 /* StandaloneAssets.xcassets */, - ); - path = StandaloneFiles; - sourceTree = ""; - }; - C30E33740CB17218735DAE1FFFC565AE /* FileGroup */ = { - isa = PBXGroup; - children = ( - D81BDF703E98A5351121B96103BD52A6 /* UnderFileGroup */, + G_2C00D0D23CBE29FF5F6DFEB95CBF2ECA /* UnderFileGroup */, ); path = FileGroup; sourceTree = ""; }; - D59738133ECA1ACC9C32CAD22FBEF0F4 /* StaticLibrary_Swift */ = { + G_9E36E5E1B7BEC6A8D683D2E36CE21BCE /* CopyFiles */ = { isa = PBXGroup; children = ( - 75B653BE433FA2C7F27E0DD742C56972 /* StaticLibrary.swift */, + FR_DBD29CA78CDBBEF69B2C39C6D23BBDA1 /* Empty.h */, ); - path = StaticLibrary_Swift; + path = CopyFiles; sourceTree = ""; }; - D81BDF703E98A5351121B96103BD52A6 /* UnderFileGroup */ = { + G_A1CE8BFBEAC6AFDC64D7068C3CE11421 /* Carthage */ = { isa = PBXGroup; children = ( - 1359BCAE8548E7063115210477D5CB83 /* MoreUnder.swift */, + G_26EB72A03E79484F94412C6DF07B2C65 /* iOS */, + G_77F9CDD1713BAEF02DF44C1EA19D86B8 /* Mac */, + G_3569DDFAF0CD0D2E17F8D05B12F9A7BA /* tvOS */, + G_CC8E08E619EF6EA96B28904C6651F6B8 /* watchOS */, ); - path = UnderFileGroup; + name = Carthage; + path = Carthage/Build; sourceTree = ""; }; - DA18B6EB7FF6E1DAACDFA5EB93833C54 /* watchOS */ = { + G_AFE0E055A99B8BF7C44E69B9B69889C8 /* Module */ = { isa = PBXGroup; children = ( - C16ABECF1E65BF7DD6C87529FF02EB72 /* Result.framework */, + FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */, ); - path = watchOS; + path = Module; sourceTree = ""; }; - E0B77C999E8E6D192A135A06E7331C27 /* Mac */ = { + G_B0D2DFD450BCF614AA46E474644F2CE3 /* Products */ = { isa = PBXGroup; children = ( - B542FC1F38087BEC4C749F9E0D9122EB /* Result.framework */, + FR_5B3188BDA6DB0560398A483646F17AE4 /* App_iOS_Tests.xctest */, + FR_9403DF729F7FE2E6B823C1DACE1E6214 /* App_iOS_UITests.xctest */, + FR_1672C218968DD6996F05E3C7688F0718 /* App_iOS.app */, + FR_F18AD4408D0A35A0B9EAE353E8087CDE /* App_macOS.app */, + FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */, + FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */, + FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, + FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, + FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, + FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, + FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, + FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, + FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, + FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, + FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */, + FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */, + FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, + FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, + FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, + FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, + FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */, + FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */, ); - path = Mac; + name = Products; sourceTree = ""; }; - ECD23E49A0CA25E14EC0D028673840D6 /* iMessage */ = { + G_CBE9DB02095FA0DF8A7ECE76A4BD81A4 = { isa = PBXGroup; children = ( - EF485495979F5EF324B541071E00D33B /* Assets.xcassets */, - 2923CD786EB965107819EFF08193E672 /* Info.plist */, - ); - path = iMessage; - sourceTree = ""; - }; - EDFE6B7A5CE9583846B704EE371675F2 = { - isa = PBXGroup; - children = ( - BA50A516F5BBC843E3CD4B1845B99334 /* App */, - 17999F76E13B84D118972DC03BCEA6F2 /* App_iOS_Tests */, - 09F7EC373CEDA69072DC9D77495F0E25 /* App_iOS_UITests */, - 03A84AADCBED3566C47BC9335B8085C7 /* App_macOS */, - 56936C3686A0928B34562E16F94536C8 /* App_watchOS */, - B2AA9B645D928F657D399D8F62BB4DDC /* App_watchOS Extension */, - 215025EF88E84A49861B7B0A717D575C /* Configs */, - 5BC30B8BA34DE0A67196277EA184BAAC /* CopyFiles */, - C30E33740CB17218735DAE1FFFC565AE /* FileGroup */, - 4AD39BFA18B0D81C8C8BA3425FE6E91A /* Framework */, - ECD23E49A0CA25E14EC0D028673840D6 /* iMessage */, - 874A71D4E37BA319FD212D21173C1CED /* iMessage MessagesExtension */, - 384C5FF5A3C798619B2A3F5A9C654EE3 /* Resources */, - C27E200F9D2708164A4BDD75B7A861BC /* StandaloneFiles */, - 63A2C5F06E17FA2652DDA338F0A32501 /* StaticLibrary_ObjC */, - D59738133ECA1ACC9C32CAD22FBEF0F4 /* StaticLibrary_Swift */, - BEB2E21F3B6F8B8E6CA0CB877DE3D47D /* Vendor */, - F37F48EF1C25643F0E408DC3E115895A /* XPC Service */, - FFA022D59DE3CD80EDCC5CCEC6DB29C7 /* Folder */, - 224967658A2D92DC2BD9D665A1CA1F5F /* Headers */, - 7AF3ACEAC55D3B6352EED8415D5B2951 /* Mintfile */, - 138DC1A4CB4E585A69355474092AE0E0 /* ResourceFolder */, - 247D8122E426D1FC239D36918CE3C0C5 /* SomeFile */, - 1AAEB7BBE834CAB4A205069AE3E0AF11 /* Frameworks */, - FC1E35057FBB1EE0597B70D0D9EDF4EE /* Products */, + G_8F5765334752A7E52B1E63ACAC466729 /* App */, + G_4401384B8D17D0B62305BE82DE0660D2 /* App_iOS_Tests */, + G_373C03E19EC66ABB051FC35B4E57A52E /* App_iOS_UITests */, + G_68375B6CA3E19FBBA0246B55B60849C0 /* App_macOS */, + G_7C1E92BE8CA995A6B0952C8AE6F5ADF9 /* App_watchOS */, + G_089F5A7E7FB159719FE19B5E84B85D5D /* App_watchOS Extension */, + G_81658721738C48797F805CC891E70B6F /* Configs */, + G_9E36E5E1B7BEC6A8D683D2E36CE21BCE /* CopyFiles */, + G_9DEB15811B31C2D4D4B63339FBE33149 /* FileGroup */, + G_0D2DDBB1C39493B8B0EAF9CC23272F2D /* Framework */, + G_DFE333D63D37FEA4C705A105F9FE0C2A /* iMessage */, + G_415E92CCC7C77CD8BB161FA75E8B66EF /* iMessage MessagesExtension */, + G_322C327C1DB8AE7E0B99EF59318DFE22 /* Resources */, + G_D0428A559D8B50225BCD0A3640D8B431 /* StandaloneFiles */, + G_4A1045347B09A484656D26436E35FDCC /* StaticLibrary_ObjC */, + G_CC2410394CB552EF47011133E3A148F5 /* StaticLibrary_Swift */, + G_EEC8BB7E2370237E3F5D64AA1BD42CC9 /* Vendor */, + G_23236546763854F4301D7847EBA0A2BF /* XPC Service */, + FR_3B4065B548BFD8CFB3D1153F7106DDA3 /* Folder */, + FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */, + FR_5E4B4E53251DE2294715A48CC249EBFD /* Mintfile */, + FR_1B0304C0E4DC73614BAA550E4A80D41C /* ResourceFolder */, + FR_C86A7EAE4DFF4327D1E7D32A597CA4AC /* SomeFile */, + G_54CAD56F6F3EAD10E9DB8D50B52D09F3 /* Frameworks */, + G_B0D2DFD450BCF614AA46E474644F2CE3 /* Products */, ); indentWidth = 2; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; - EF06950CAC36EBAD861CAD7CA561D440 /* tvOS */ = { + G_CC2410394CB552EF47011133E3A148F5 /* StaticLibrary_Swift */ = { isa = PBXGroup; children = ( - 2C26F9CE571A93EC043EC05B66DBF382 /* Result.framework */, + FR_CCC97AF230188CAF9B4A66324891CCAD /* StaticLibrary.swift */, ); - path = tvOS; + path = StaticLibrary_Swift; sourceTree = ""; }; - F37F48EF1C25643F0E408DC3E115895A /* XPC Service */ = { + G_CC8E08E619EF6EA96B28904C6651F6B8 /* watchOS */ = { isa = PBXGroup; children = ( - 8AFEF032B9B258B97EFBD5B5AA741E8C /* Info.plist */, - AC31952D4BF4BB8CC21459D75DCB7DC9 /* main.m */, - 77532D0489A67876EE56705C71C908C6 /* XPC_Service.h */, - 508B113F244D2D7F7731ED871B2F16DA /* XPC_Service.m */, - F8D572C96FEC4C18AE61EB3D4D84466C /* XPC_ServiceProtocol.h */, + FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */, ); - path = "XPC Service"; + path = watchOS; sourceTree = ""; }; - F4476AACF02F14D7CACC61F1763C176B /* Carthage */ = { + G_D0428A559D8B50225BCD0A3640D8B431 /* StandaloneFiles */ = { isa = PBXGroup; children = ( - 61FC1E8D4842FD2FBD2E37F067E943F9 /* iOS */, - E0B77C999E8E6D192A135A06E7331C27 /* Mac */, - EF06950CAC36EBAD861CAD7CA561D440 /* tvOS */, - DA18B6EB7FF6E1DAACDFA5EB93833C54 /* watchOS */, + FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */, + FR_C6A9DE885CAF350F6C9D0AC6F7324CD3 /* StandaloneAssets.xcassets */, ); - name = Carthage; - path = Carthage/Build; + path = StandaloneFiles; sourceTree = ""; }; - FC1E35057FBB1EE0597B70D0D9EDF4EE /* Products */ = { + G_DFE333D63D37FEA4C705A105F9FE0C2A /* iMessage */ = { isa = PBXGroup; children = ( - C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */, - EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */, - 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */, - AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */, - 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */, - CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */, - E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, - E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, - E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, - E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */, - 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */, - 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */, - 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */, - 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */, - D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */, - 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */, - 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */, - 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */, - 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */, - 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */, - 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */, - DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */, + FR_B537FEE8515090D3BA0F5CFF3BC76BB1 /* Assets.xcassets */, + FR_41E1155D8A7FDD97B783A1D5B3AD2C5B /* Info.plist */, ); - name = Products; + path = iMessage; + sourceTree = ""; + }; + G_EEC8BB7E2370237E3F5D64AA1BD42CC9 /* Vendor */ = { + isa = PBXGroup; + children = ( + FR_4EB4AAACD714C13E5BC894C71B954299 /* SomeXPCService.xpc */, + ); + path = Vendor; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 440F7F1F9382CEDD92D75B89E25552D5 /* Headers */ = { + HBP_1A14716AFB45FE3C40861AEC5BFC7160 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E249D28B974B22ED41B7BAE7A1CC7468 /* Headers in Headers */, - 486E2AABDE448C496C0FCC393A35E669 /* MyFramework.h in Headers */, + BF_0A6C302954FF03411D6F2704ECF5C738 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8200CD1FC8A4EDF8D0C8A971D7B5C35C /* Headers */ = { + HBP_28AB146B2409C5AB0F7A57873541C794 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 63570E645EE5129EF6C454A8444DBA1A /* MyFramework.h in Headers */, + BF_390908C547D6F8520DF9AA0CC5A98EB1 /* Headers in Headers */, + BF_BEFDF47CD7D88221A9C166BD65BF2013 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9C424B9F3AFC563C6A6CE8FA124F8801 /* Headers */ = { + HBP_5B487D2A0AEF5F301CF0DD29039EC911 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - FF688241378D1AE956E9A9F46EEBCFAA /* Headers in Headers */, - 6013ED0F37BB222A6B44D0CB89CE69AE /* MyFramework.h in Headers */, + BF_4EBBAD70FA73DDC89BD933866B90DD08 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9EFB55828B52CAA000828935A560E877 /* Headers */ = { + HBP_7854F8DBCA44D8AB407768095D725CA7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - EBE418FA45EA5317C0CF06FDCA026876 /* MyFramework.h in Headers */, + BF_EC0616A0D18A2F723D2AF50287C43669 /* Headers in Headers */, + BF_569CC068CD4B7BCE35E974D7B61566DB /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - A08871F94C4ADE4FF10D349F4ECC06C9 /* Headers */ = { + HBP_98CC32EF86CB88CC66AA4CD229EB6072 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 44B62E9C097529F3D5C7A44A5F777A61 /* Headers in Headers */, - 11620E0E3097992FFB14B60ADB580C14 /* MyFramework.h in Headers */, + BF_9830FFD35765AACD86D1B619E22830D6 /* Headers in Headers */, + BF_3B680DD27CFCD491675F1BF257A95A24 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B6AA01763EF8349E60D1FA4E652778F3 /* Headers */ = { + HBP_9DD85101234CF2E78A49044D618D1D80 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 702E56BFA3B2A830E24D74FCA3A33D55 /* Headers in Headers */, - 8CF2462D2181DDDA1A8E8A1F176F9A47 /* MyFramework.h in Headers */, + BF_7C9646667C0D479544A2207DEE3E930B /* Headers in Headers */, + BF_33EA0F8B2ADA2D24A683FCD8D6235B10 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BF4B25304A35C041BB8EACF6703B5F3F /* Headers */ = { + HBP_A3CA1B21BE2C36844B1C6BA4D2A20394 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5679C223A300E533FFBBF0AE849DAFFB /* MyFramework.h in Headers */, + BF_E35C9C198B45406E64439FF96C17F056 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F3EF44E81C5DEAAC1013F6F98B98D2CA /* Headers */ = { + HBP_D19BC27B3521E3ED15AB860A9AC22D2A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E8B95950224163C1A158F78FD2938D82 /* MyFramework.h in Headers */, + BF_B6E31790D07B981E52CD5BC9049FE303 /* MyFramework.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ - D47258787A296733EB9A496796369EDC /* Legacy */ = { + LT_5A51AFB390A610885D62F601DE321E4E /* Legacy */ = { isa = PBXLegacyTarget; - buildConfigurationList = 7523052A5C96494802A0431E05947F67 /* Build configuration list for PBXLegacyTarget "Legacy" */; + buildConfigurationList = CL_F8A83116F913B5DD0538C3680E08BDDB /* Build configuration list for PBXLegacyTarget "Legacy" */; buildPhases = ( - 634CFCBFE3760F2A0288F1BF42B66FF9 /* Sources */, + SBP_C18D008976BE0EFD3D3A3C68FB79D271 /* Sources */, ); buildToolPath = /usr/bin/true; dependencies = ( @@ -960,12 +960,12 @@ /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ - 15879457507DA34869A0D03EEEBD5DFE /* StaticLibrary_ObjC_macOS */ = { + NT_15609BCEEB00CBCC4C42110EB0366A6F /* StaticLibrary_ObjC_macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = B2C7678C2E2663B0DB1ED71352D99426 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */; + buildConfigurationList = CL_3BB54CFB2F2EFE7302C0B0709BD0AE04 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */; buildPhases = ( - B07FD4FDF599BF4F54EF8B3381CFF050 /* Sources */, - 9ABD85CE4BE56F04AD335239A3D8465F /* CopyFiles */, + SBP_52AE5DCFB4487297D6889C7F014AD281 /* Sources */, + CFBP_712E86A86BBF89DB5B5F3874B24B8996 /* CopyFiles */, ); buildRules = ( ); @@ -973,354 +973,31 @@ ); name = StaticLibrary_ObjC_macOS; productName = StaticLibrary_ObjC_macOS; - productReference = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; + productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; productType = "com.apple.product-type.library.static"; }; - 1E8C6D55C8B9978E9D6A615CE98A90E0 /* Framework2_tvOS */ = { + NT_193BAF154270D1C21E269EDF2A1BD3F6 /* App_iOS_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = B792E5189C47CA21F95A329FA1C05715 /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */; + buildConfigurationList = CL_89763567DCA601C83E4C78A9917D81AD /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */; buildPhases = ( - 8200CD1FC8A4EDF8D0C8A971D7B5C35C /* Headers */, - FE2EE5AFF99E31C8919F2875F62884E1 /* Sources */, + SBP_70B2F11AAC526FDB99D68212C2C92CE6 /* Sources */, + CFBP_2FE0B34CC045616C815F2675387DA9D5 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( - ); - name = Framework2_tvOS; - productName = Framework2_tvOS; - productReference = 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */; - productType = "com.apple.product-type.framework"; - }; - 24B389B0959F4A6CB05BB732DABDFE40 /* iMessageApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 59C3AA3AEA5802DA17DF9B42615D9B6B /* Build configuration list for PBXNativeTarget "iMessageApp" */; - buildPhases = ( - 1C8F955BEA261BDB36838B408C2D7D23 /* Sources */, - DFB4932D20872BF046F9902EB430C6B6 /* Resources */, - 8C62857F0DCEBB22C299F26FCCE769F9 /* Embed App Extensions */, - ); - buildRules = ( - ); - dependencies = ( - D976477E0195A8FFD5043C8BBD4B67C4 /* PBXTargetDependency */, - ); - name = iMessageApp; - productName = iMessageApp; - productReference = D26369BE2A7A98A736F7A13BA924A4A2 /* iMessageApp.app */; - productType = "com.apple.product-type.application.messages"; - }; - 2563A01E1A5E949F2AE1CD7308779FE3 /* Framework_tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0AA719054B034D653457F3861CE722A9 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */; - buildPhases = ( - B6AA01763EF8349E60D1FA4E652778F3 /* Headers */, - E74DACDAB11D89D5B824405B81E48D89 /* Sources */, - C79A51DBA8AF7631AEF22BA83E104A04 /* Frameworks */, - ADF413AF548A97CB33898BB4F6211314 /* MyScript */, - ); - buildRules = ( - ); - dependencies = ( - 7361EDBA6CC2A0CC04DCB2658DEAA7D3 /* PBXTargetDependency */, - ); - name = Framework_tvOS; - productName = Framework_tvOS; - productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; - productType = "com.apple.product-type.framework"; - }; - 30FE6802B08DEC0251F565BD100C6552 /* Framework2_iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = C6AB800DC544086FBA8F60B46D0000E8 /* Build configuration list for PBXNativeTarget "Framework2_iOS" */; - buildPhases = ( - BF4B25304A35C041BB8EACF6703B5F3F /* Headers */, - 1A0DA3851491E727A610A7638ABB5434 /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Framework2_iOS; - productName = Framework2_iOS; - productReference = 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */; - productType = "com.apple.product-type.framework"; - }; - 347AE2E7B939A276DEE77148A708FDE4 /* Framework_watchOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = CCF68725DCD5EF7FD03872D0B98C32F0 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */; - buildPhases = ( - 9C424B9F3AFC563C6A6CE8FA124F8801 /* Headers */, - A0301004CBF36C0004B23102202FA9FE /* Sources */, - F6C2490C6497837A21966090C77C3602 /* Frameworks */, - DABB7DFD3C5DB4EAC8C5D24C79EA4E35 /* MyScript */, - ); - buildRules = ( - ); - dependencies = ( - 79285886AE41FF04B4E0274CE54C6C60 /* PBXTargetDependency */, - ); - name = Framework_watchOS; - productName = Framework_watchOS; - productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; - productType = "com.apple.product-type.framework"; - }; - 6805881B1B6A80ABD523DAF4AFA493E2 /* Framework_macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9BA95DBD7B862EE1F43DC68338281D0E /* Build configuration list for PBXNativeTarget "Framework_macOS" */; - buildPhases = ( - A08871F94C4ADE4FF10D349F4ECC06C9 /* Headers */, - 1411E21883A09388E140C6D123029288 /* Sources */, - 266AF93F95F8ECC5F62E443DD79D4263 /* Frameworks */, - 78EF33E6A08B3BB88D8805DC3588843C /* MyScript */, - ); - buildRules = ( - ); - dependencies = ( - A0D6CD1CF256FD0AA1C77265A094A814 /* PBXTargetDependency */, - ); - name = Framework_macOS; - productName = Framework_macOS; - productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; - productType = "com.apple.product-type.framework"; - }; - 8A0FE14A3A3815C1F26B447C6178089C /* iMessageExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 330B76D4702856DD55067456FD7A4F4A /* Build configuration list for PBXNativeTarget "iMessageExtension" */; - buildPhases = ( - 35714896F7B0D8F151E1A3B4C04AE0DB /* Sources */, - 32ECF2BB5AFA1C4E9A0F6DFE1417110E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = iMessageExtension; - productName = iMessageExtension; - productReference = 28C9901BE3ADBC6102849237424B03D6 /* iMessageExtension.appex */; - productType = "com.apple.product-type.app-extension.messages"; - }; - 8CDD0FC5B69DB55054CAECF513716138 /* App_iOS_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4DF366239AC6F6E9EE59EEA525319ABA /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */; - buildPhases = ( - E74227370CF6081A47B8C2AB02479899 /* Sources */, - 31035708668339C7624CD18BC4971F27 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 85A9116EE91FAB1AA6CA20FD4203A941 /* PBXTargetDependency */, + TD_402541000CCC58970431E41C3D928AB8 /* PBXTargetDependency */, ); name = App_iOS_Tests; productName = App_iOS_Tests; - productReference = C7F72C86B98DCABE16D17DDC9894C845 /* App_iOS_Tests.xctest */; + productReference = FR_5B3188BDA6DB0560398A483646F17AE4 /* App_iOS_Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 9F21B9C99E75314E51854589C0A2D40C /* App_watchOS */ = { + NT_23509FD082D1F788E6D6431F509B11AF /* XPC Service */ = { isa = PBXNativeTarget; - buildConfigurationList = 13FC8BD638A49F585CF46B85EF6E6E4E /* Build configuration list for PBXNativeTarget "App_watchOS" */; + buildConfigurationList = CL_6993244897DFCCF1F61A6136FDBE3C01 /* Build configuration list for PBXNativeTarget "XPC Service" */; buildPhases = ( - 8E6FC06C82186DB3FA95E51EFE18711C /* Sources */, - 24E393E5BC60BE4C18A4E88099C92B0B /* Resources */, - 1D124A23C4D38CE6B023194E85A64BBA /* Frameworks */, - 64735A35127234188A50A9CC433F3D43 /* Embed App Extensions */, - 2F13215A0801F44C3CCF154F3EE02A7B /* Carthage */, - ); - buildRules = ( - ); - dependencies = ( - 586BE274C55FC00DE6BE62A0AAC127F6 /* PBXTargetDependency */, - ); - name = App_watchOS; - productName = App_watchOS; - productReference = CFF173E643CE5FF0AE955580CB2B6641 /* App_watchOS.app */; - productType = "com.apple.product-type.application.watchapp2"; - }; - A79BE4AD95C20F54B13A8B76DC061CDE /* StaticLibrary_ObjC_tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = E5E32C1485A6F6887EA6CC53B4584F3E /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */; - buildPhases = ( - C88A74B7BA8B2E80B92E453D04A9688A /* Sources */, - C03880471FE232DBFD669107EC84C23E /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_ObjC_tvOS; - productName = StaticLibrary_ObjC_tvOS; - productReference = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; - productType = "com.apple.product-type.library.static"; - }; - B145BCFEB550C3DDF48510BB85CDE8DC /* App_iOS_UITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 933D4300D58AA7B25E208357C65F2AD3 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */; - buildPhases = ( - D037068D88E7DAEB3A373602EE996609 /* Sources */, - 916C69163E65CD06E8BD0CCC8D8227C2 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - A835D5FBAD20741BCF95975E1CD63A7A /* PBXTargetDependency */, - ); - name = App_iOS_UITests; - productName = App_iOS_UITests; - productReference = EABA2B52871944E6E80A12C64E198883 /* App_iOS_UITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - BA741EB2126CE44DAD218BBADD277CA9 /* Framework2_macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = CDA4223FB9077220550DAC72871CFB38 /* Build configuration list for PBXNativeTarget "Framework2_macOS" */; - buildPhases = ( - 9EFB55828B52CAA000828935A560E877 /* Headers */, - ADD1A71858A73905360F9EF440895A09 /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Framework2_macOS; - productName = Framework2_macOS; - productReference = 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */; - productType = "com.apple.product-type.framework"; - }; - CBCC05D0B8E90F960AA198981827667B /* App_watchOS Extension */ = { - isa = PBXNativeTarget; - buildConfigurationList = FC084246C395F08CB12677620BAF2399 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */; - buildPhases = ( - 910907240480D0AFBF32A79A4008D866 /* Sources */, - 918FF44B84209799C8ECD292189E6D55 /* Resources */, - 78E2554EF343D4CF421577E8651E5480 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "App_watchOS Extension"; - productName = "App_watchOS Extension"; - productReference = 42CEA852937FACF2B5D933EC8EC14418 /* App_watchOS Extension.appex */; - productType = "com.apple.product-type.watchkit2-extension"; - }; - D20DB1C7D23BB53FF8FD09BAF451A294 /* StaticLibrary_Swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = F40A414D7A0A13368AC9FB64BA5C73AC /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */; - buildPhases = ( - A305A9C4673244353334E95DCDFD735D /* Sources */, - 06FB4F63AAEECCDD060382A3AF8AEF4B /* Copy Swift Objective-C Interface Header */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_Swift; - productName = StaticLibrary_Swift; - productReference = 715B87EA4FFA97FECCBA0D1D269A19F4 /* StaticLibrary_Swift.a */; - productType = "com.apple.product-type.library.static"; - }; - DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B1322FEBB7A746BD1BF9227D37A7421 /* Build configuration list for PBXNativeTarget "App_iOS" */; - buildPhases = ( - 1C758FAD884F96BE234FBB1BBE295E97 /* Sources */, - FEFBCD77CD631C182084B94EC52BEE33 /* Resources */, - FE39362C1CB6263D81609FF7975359EE /* CopyFiles */, - 3730EBC6001089E597081CA9CF12AF52 /* Frameworks */, - 1130301AAAB06CA6AE2DBC09B9F82B74 /* Embed Frameworks */, - 800C402270322E33CF2C5DBBAE32DD06 /* Embed Watch Content */, - 712CA3288AD8B0F43FAA19930C53500B /* Carthage */, - 974A437754992A1B4A30613EC766AE2C /* Strip Unused Architectures from Frameworks */, - 70D0BCF93538A104153586A9BF269386 /* MyScript */, - ); - buildRules = ( - ); - dependencies = ( - 10B5BED93CB8C9A5B7BB81E996C7F071 /* PBXTargetDependency */, - 107877BC5E43BF7DDE7F77EC0A14BF24 /* PBXTargetDependency */, - 5189C5E269DD98A187BF59169A4FC1D1 /* PBXTargetDependency */, - 5E65F165E37E737337177A885B1D8276 /* PBXTargetDependency */, - 16156D2E07BFBB09D5921589B483FF23 /* PBXTargetDependency */, - ); - name = App_iOS; - productName = App_iOS; - productReference = 9FD5A8B54C9F429451BCCCC3F04CDB99 /* App_iOS.app */; - productType = "com.apple.product-type.application"; - }; - E165F00BB866D2A7087C93650EDB1138 /* App_macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 837376727FE2CF4AE46785F0E9561ED1 /* Build configuration list for PBXNativeTarget "App_macOS" */; - buildPhases = ( - 25185271EDE7FEEC99372505A683359C /* Sources */, - 83D69B533FE35E8D96403BD29AB37F9F /* Resources */, - 0B85189BAB2D1568EECF81226FF3FF97 /* CopyFiles */, - C8CA7D5902F866D50BF6F9A24BF1D10A /* Frameworks */, - DBC722FD0EE319959445B8F14D3EE091 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - BCAEBFE2D144CD4E9F4042CB793B6FFB /* PBXTargetDependency */, - 92AF10FC3AC60DB57A91645E9BDB9B2C /* PBXTargetDependency */, - 632C4C9ABCE4E550CC5CC6F87B5C4DBD /* PBXTargetDependency */, - ); - name = App_macOS; - productName = App_macOS; - productReference = AE0CDFA0B5B4F5D2FBB870B59FE51154 /* App_macOS.app */; - productType = "com.apple.product-type.application"; - }; - E980A2FD24ABE1336B8C24765456F655 /* Framework2_watchOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6D4D2839561B5E9CF0D2C239573C2178 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */; - buildPhases = ( - F3EF44E81C5DEAAC1013F6F98B98D2CA /* Headers */, - 6EA5EBCD13C2DDEB4B9422C07D81B71A /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Framework2_watchOS; - productName = Framework2_watchOS; - productReference = 6CB30008BDEA34CECCA3CBEB51850F9A /* Framework2.framework */; - productType = "com.apple.product-type.framework"; - }; - EA82D195375B7CB5C6034F26A1C28D44 /* StaticLibrary_ObjC_watchOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = D54A0CC77F5631F35C75FEA20D1BA43F /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */; - buildPhases = ( - EBA907A9A32C582C14D2C34324CA3898 /* Sources */, - 29FB14F57B61FDFF88A94C7B9D664F12 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_ObjC_watchOS; - productName = StaticLibrary_ObjC_watchOS; - productReference = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; - productType = "com.apple.product-type.library.static"; - }; - EC0A54038C133DEC055A8FC6B9E86304 /* StaticLibrary_ObjC_iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 79A5A52B3AEBCBFB7ED1858548D1282A /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */; - buildPhases = ( - DB71FFE5444FA615A2092FB2C7BDEFA7 /* Sources */, - 3F08DFC5C47AB8175AF8061735995D5F /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StaticLibrary_ObjC_iOS; - productName = StaticLibrary_ObjC_iOS; - productReference = 948EA9EE1BAE66408843BF6200620E70 /* StaticLibrary_ObjC.a */; - productType = "com.apple.product-type.library.static"; - }; - F61DEA90F1B7331EE9B26BBA1F66D1F3 /* XPC Service */ = { - isa = PBXNativeTarget; - buildConfigurationList = 526C1EB2E50CDBABCB448EE2FDF2E5D8 /* Build configuration list for PBXNativeTarget "XPC Service" */; - buildPhases = ( - E32AAD525623BF5008484D641327F1AD /* Sources */, + SBP_669CBAFD2D7234A2BEDCEAA4949ED575 /* Sources */, ); buildRules = ( ); @@ -1328,48 +1005,374 @@ ); name = "XPC Service"; productName = "XPC Service"; - productReference = DBF5F2565C6807B74F18D4ACCE28D071 /* XPC Service.xpc */; + productReference = FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */; productType = "com.apple.product-type.xpc-service"; }; - FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */ = { + NT_2940463C85DCD0660288786BC66F2C4C /* StaticLibrary_Swift */ = { isa = PBXNativeTarget; - buildConfigurationList = ABBCABD06AD7666C13DD9BAF0C16276E /* Build configuration list for PBXNativeTarget "Framework_iOS" */; + buildConfigurationList = CL_159255858B3EEC02844A3059326A6B93 /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */; buildPhases = ( - 440F7F1F9382CEDD92D75B89E25552D5 /* Headers */, - AFF1863F9CDDD4DD0B0EB22A6AD9850A /* Sources */, - 6F3C985C6701880E8731C4AAFBDC9FEF /* Frameworks */, - 2983C9312429A22DF5437C4020B9937E /* MyScript */, + SBP_3DD17ED231CE07543581040F32049525 /* Sources */, + SSBP_4A83147402B05D3C84D21F0487315914 /* Copy Swift Objective-C Interface Header */, ); buildRules = ( ); dependencies = ( - 2EA3B710428DD5AC737E68EA2707702D /* PBXTargetDependency */, + ); + name = StaticLibrary_Swift; + productName = StaticLibrary_Swift; + productReference = FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */; + productType = "com.apple.product-type.library.static"; + }; + NT_34A020E43FBBD797051205235CD82B70 /* StaticLibrary_ObjC_watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_2E30D27084B352548CCAA3500158519B /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */; + buildPhases = ( + SBP_924258C7A9F27B13508604CAF625E0D3 /* Sources */, + CFBP_4DFB7882C9F8BAB250BB0A6B9457B4CC /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_watchOS; + productName = StaticLibrary_ObjC_watchOS; + productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; + NT_38A9FE87056942A2746E0FF025B52A91 /* App_watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_C50D7BB75115E8561A0975DE1B65E088 /* Build configuration list for PBXNativeTarget "App_watchOS" */; + buildPhases = ( + SBP_ED63FCA00BD617EFF125ECDF9D24FAD8 /* Sources */, + RBP_5623703FDC4F6DF4679D8BAF27518F2F /* Resources */, + FBP_3C7ADC43EF430300C2A315B0D2860080 /* Frameworks */, + CFBP_469B033759EACBB99ECBF1008677C590 /* Embed App Extensions */, + SSBP_7F147E7ED45BAAE2186975B7FF9EB08A /* Carthage */, + ); + buildRules = ( + ); + dependencies = ( + TD_2A43F973A3E1CF675A967054BA52074B /* PBXTargetDependency */, + ); + name = App_watchOS; + productName = App_watchOS; + productReference = FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */; + productType = "com.apple.product-type.application.watchapp2"; + }; + NT_5245AB6D3B3CFBC95AEBADF6E0C593B8 /* App_watchOS Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_333C6C3162FB671343E806257FB2A411 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */; + buildPhases = ( + SBP_49F3C650EA105D1EF50817673A8DB33A /* Sources */, + RBP_1BFB64F249645ABF48C3CCDF8D5FA094 /* Resources */, + FBP_F6E2D2D110453E88BF9E3FB6A466B8EC /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "App_watchOS Extension"; + productName = "App_watchOS Extension"; + productReference = FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */; + productType = "com.apple.product-type.watchkit2-extension"; + }; + NT_66B6A18138FD1FB5ECF3FC67B20FF3D3 /* Framework2_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_A55E6C4018D2631D41C660DBF2113765 /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */; + buildPhases = ( + HBP_A3CA1B21BE2C36844B1C6BA4D2A20394 /* Headers */, + SBP_DB9B8E1504ED9DD92AE41067C53B5082 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_tvOS; + productName = Framework2_tvOS; + productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_6A4FC6EE80FB2821AB96D51C3BC8966E /* iMessageExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_3ABBEC1A6EFC98F40894F5E4769650EF /* Build configuration list for PBXNativeTarget "iMessageExtension" */; + buildPhases = ( + SBP_110D7B4160D965B7964619BF78E01DE2 /* Sources */, + RBP_A5B7C086E8F07F5FEE9B99375E375819 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iMessageExtension; + productName = iMessageExtension; + productReference = FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */; + productType = "com.apple.product-type.app-extension.messages"; + }; + NT_6A7B08EB167FD3A759C339FDBED7E019 /* Framework_watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_674C71F7D7B679C67A944F0110840758 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */; + buildPhases = ( + HBP_98CC32EF86CB88CC66AA4CD229EB6072 /* Headers */, + SBP_8990272D7DD45CFBDAB18690861BD4E8 /* Sources */, + FBP_71D96680A2FBE24C4C8BD0B5E55FE034 /* Frameworks */, + SSBP_B07F447D73408EA48C54A8E7F5B8D575 /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + TD_205ABD699FA8E05C47D73E8EB2D0F9EF /* PBXTargetDependency */, + ); + name = Framework_watchOS; + productName = Framework_watchOS; + productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_6AEE12F93D449E249F5348BBF35D3053 /* StaticLibrary_ObjC_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_F6ECF2D45799DBBB48DE9AE80AC280AA /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */; + buildPhases = ( + SBP_D6209A702C851D0CFD1CC2B225986D45 /* Sources */, + CFBP_0B6C520DAC94DDCE678BE15C53528F25 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_iOS; + productName = StaticLibrary_ObjC_iOS; + productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; + NT_6BD068FAAC6AA35C090C48147B94EC6E /* iMessageApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_AA475AE6741D5744A91627E7FAF4C986 /* Build configuration list for PBXNativeTarget "iMessageApp" */; + buildPhases = ( + SBP_20DDAC7BCD11ECA8B08695FE5D7314A9 /* Sources */, + RBP_9291220ECDCB98B69BB31C3E875042EC /* Resources */, + CFBP_AD91D17C63B2CD9AE7EFB9EFD62A8223 /* Embed App Extensions */, + ); + buildRules = ( + ); + dependencies = ( + TD_846DB03B9778D6C8E81FE52A5A212420 /* PBXTargetDependency */, + ); + name = iMessageApp; + productName = iMessageApp; + productReference = FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */; + productType = "com.apple.product-type.application.messages"; + }; + NT_7D108AE86BED8C9CCF52C2646FA4C5DE /* Framework_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_9FEF3E411E281B1820B2B067FC1C1B85 /* Build configuration list for PBXNativeTarget "Framework_iOS" */; + buildPhases = ( + HBP_28AB146B2409C5AB0F7A57873541C794 /* Headers */, + SBP_0CB30551A2D40126958D8D6DAF6922E2 /* Sources */, + FBP_98B76E46D78FD48FB47A41B8891665BC /* Frameworks */, + SSBP_13B42B84708A6ABC082BE00176F5DCB2 /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + TD_117F878FC368C83443CEC1707531F7F2 /* PBXTargetDependency */, ); name = Framework_iOS; productName = Framework_iOS; - productReference = E3C43679A1164385CDC2FCB5DD62C634 /* Framework.framework */; + productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_87DF09E78830E7EB3C00B6134A2D5A5D /* Framework2_macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_289609080F2D20D506C8A587BC92807B /* Build configuration list for PBXNativeTarget "Framework2_macOS" */; + buildPhases = ( + HBP_5B487D2A0AEF5F301CF0DD29039EC911 /* Headers */, + SBP_C469AFC0C383156AF5C80EBBC089D9FC /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_macOS; + productName = Framework2_macOS; + productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_9D53AF351F8DAE25354F2391248DFCCA /* Framework_macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_7A3206BF9A92D4552AE40D148897BB3E /* Build configuration list for PBXNativeTarget "Framework_macOS" */; + buildPhases = ( + HBP_7854F8DBCA44D8AB407768095D725CA7 /* Headers */, + SBP_EA528A5DC6D79AA397B25949B07AE70F /* Sources */, + FBP_935BCDE6C86D2D59A945DC1E6886D7C3 /* Frameworks */, + SSBP_C8F56E533BE956498E644805330168EB /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + TD_BBB2D0EDFD9EF8193F1864D1F3D5F97A /* PBXTargetDependency */, + ); + name = Framework_macOS; + productName = Framework_macOS; + productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_9F72C903B42E1AA3B88F97B917231B15 /* Framework2_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_0562279D56EF60E8CCC0973D2C663637 /* Build configuration list for PBXNativeTarget "Framework2_iOS" */; + buildPhases = ( + HBP_D19BC27B3521E3ED15AB860A9AC22D2A /* Headers */, + SBP_84E9A8BE77910B67B3F2DCD5916DC498 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_iOS; + productName = Framework2_iOS; + productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_A3933B4002C44B46F34B238F654D1362 /* Framework2_watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_E92E1636D45B284E44D38EB3EF7C98C9 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */; + buildPhases = ( + HBP_1A14716AFB45FE3C40861AEC5BFC7160 /* Headers */, + SBP_48868408A19D9BBE4A58CA4FAE00C0D4 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Framework2_watchOS; + productName = Framework2_watchOS; + productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productType = "com.apple.product-type.framework"; + }; + NT_B91A6EACD6F5192FECA2E95FD531D0CA /* App_macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_D72660834ED9ED4EB0E973ABC256E014 /* Build configuration list for PBXNativeTarget "App_macOS" */; + buildPhases = ( + SBP_7EE428F1F0444ACB29B3C5259C04FF6D /* Sources */, + RBP_BA57258FD71062047F5503B4B160FE15 /* Resources */, + CFBP_CC737A6BF6243B189B109606B0C4B5A2 /* CopyFiles */, + FBP_4E773D46F6F726BBC0032C576D02FCB7 /* Frameworks */, + CFBP_CB2355266C8BAA9C97863011F3DE05A2 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + TD_B8F32B4B3CC431FE0EC1C4E7D096E3AC /* PBXTargetDependency */, + TD_35F382102AABCCCEFADCBC201E5B1CE1 /* PBXTargetDependency */, + TD_C762D8FBA80775A921AA5B50422E9349 /* PBXTargetDependency */, + ); + name = App_macOS; + productName = App_macOS; + productReference = FR_F18AD4408D0A35A0B9EAE353E8087CDE /* App_macOS.app */; + productType = "com.apple.product-type.application"; + }; + NT_BEB0891E36797FE2214A0A9D516D408D /* App_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_C7673A8886407721BA5BFA1B18F184D4 /* Build configuration list for PBXNativeTarget "App_iOS" */; + buildPhases = ( + SBP_77EF8BC7FC3D693C9C0C1CB51984F3E2 /* Sources */, + RBP_85DF5DDC76E0E2A78CAFC9A3EC508232 /* Resources */, + CFBP_D7E07645BC437C4DFBB212DFC4F3B09E /* CopyFiles */, + FBP_18D4325BBE506E88E1C742F57AECB0CD /* Frameworks */, + CFBP_1C40B0777F31334440F91C2DB34EF404 /* Embed Frameworks */, + CFBP_961F46C30E720E886AEFD11D45DDA199 /* Embed Watch Content */, + SSBP_7F8DED07519BA4B70C40A9A755844874 /* Carthage */, + SSBP_062CBBF024005F57EECA660F9C7B0C7D /* Strip Unused Architectures from Frameworks */, + SSBP_376C0662E4E8416C049A50660864798B /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + TD_0C5CE0308CB64DB986A853307CCF8A95 /* PBXTargetDependency */, + TD_94E481CDF62CDA1E9B37D1DA08E5A5AF /* PBXTargetDependency */, + TD_4013C738E59E1CA40B4A982AF74E8604 /* PBXTargetDependency */, + TD_266243C3BBC1C83485E1B43C0FFC3626 /* PBXTargetDependency */, + TD_743D7CD7BB700A16A02A7A4A1E02D845 /* PBXTargetDependency */, + ); + name = App_iOS; + productName = App_iOS; + productReference = FR_1672C218968DD6996F05E3C7688F0718 /* App_iOS.app */; + productType = "com.apple.product-type.application"; + }; + NT_D4BAEEEC88124103C8DFF41FCE206DCE /* App_iOS_UITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_DB66C428B606518C825ECFF73A5EF059 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */; + buildPhases = ( + SBP_3848ADAF2343866973E57344A1054BE3 /* Sources */, + CFBP_3BE6FE084D6BE913354F37B1DD9A8D92 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + TD_98EB63C93477EA15558367FBAB5797CE /* PBXTargetDependency */, + ); + name = App_iOS_UITests; + productName = App_iOS_UITests; + productReference = FR_9403DF729F7FE2E6B823C1DACE1E6214 /* App_iOS_UITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + NT_D4C3E345E90AF9F6CBE8CF226FCFBCD6 /* StaticLibrary_ObjC_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_91682ADED17A2C81A700A67F5D70BA1F /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */; + buildPhases = ( + SBP_645418A0FA6E3F5727685DE191C6B793 /* Sources */, + CFBP_CC1EF1963551F7E08925519982C248B9 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = StaticLibrary_ObjC_tvOS; + productName = StaticLibrary_ObjC_tvOS; + productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productType = "com.apple.product-type.library.static"; + }; + NT_FA652FEB38562C3A5C93D5EC7ED09776 /* Framework_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = CL_11BB9F4DF26D98C0A2C8E1668356269F /* Build configuration list for PBXNativeTarget "Framework_tvOS" */; + buildPhases = ( + HBP_9DD85101234CF2E78A49044D618D1D80 /* Headers */, + SBP_9DB756A33A199E4D91CE6E6E2A5A706C /* Sources */, + FBP_1BDCD6E0245ED2400E6FE9AC9C334DE4 /* Frameworks */, + SSBP_1B2C6BA1C514471EF42FB7E03ACD8C83 /* MyScript */, + ); + buildRules = ( + ); + dependencies = ( + TD_79BA73EB5832255541811162BB2B0218 /* PBXTargetDependency */, + ); + name = Framework_tvOS; + productName = Framework_tvOS; + productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 48BA824E9883B72747F77581255D9C94 /* Project object */ = { + P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0930; TargetAttributes = { - AB59C0690172FF119F045336C1F1CA0D = { + AT_D40C01B2BAD29EDEA392714DFB69FE8F = { CUSTOM = value; }; - DB85CB6A2C15660854D634EF1B0C1FAD = { + NT_B91A6EACD6F5192FECA2E95FD531D0CA = { ProvisioningStyle = Automatic; }; - E165F00BB866D2A7087C93650EDB1138 = { + NT_BEB0891E36797FE2214A0A9D516D408D = { ProvisioningStyle = Automatic; }; + NT_D4BAEEEC88124103C8DFF41FCE206DCE = { + TestTargetID = NT_BEB0891E36797FE2214A0A9D516D408D; + }; }; }; - buildConfigurationList = 0D5965C1A1D5123D687DA32AC9B957F8 /* Build configuration list for PBXProject "Project" */; + buildConfigurationList = CL_85167C2DED9F1F2F7D5162C1DD252426 /* Build configuration list for PBXProject "Project" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; @@ -1377,103 +1380,159 @@ Base, en, ); - mainGroup = EDFE6B7A5CE9583846B704EE371675F2; + mainGroup = G_CBE9DB02095FA0DF8A7ECE76A4BD81A4; projectDirPath = ""; projectRoot = ""; targets = ( - DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */, - 8CDD0FC5B69DB55054CAECF513716138 /* App_iOS_Tests */, - B145BCFEB550C3DDF48510BB85CDE8DC /* App_iOS_UITests */, - E165F00BB866D2A7087C93650EDB1138 /* App_macOS */, - 9F21B9C99E75314E51854589C0A2D40C /* App_watchOS */, - CBCC05D0B8E90F960AA198981827667B /* App_watchOS Extension */, - 30FE6802B08DEC0251F565BD100C6552 /* Framework2_iOS */, - BA741EB2126CE44DAD218BBADD277CA9 /* Framework2_macOS */, - 1E8C6D55C8B9978E9D6A615CE98A90E0 /* Framework2_tvOS */, - E980A2FD24ABE1336B8C24765456F655 /* Framework2_watchOS */, - FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */, - 6805881B1B6A80ABD523DAF4AFA493E2 /* Framework_macOS */, - 2563A01E1A5E949F2AE1CD7308779FE3 /* Framework_tvOS */, - 347AE2E7B939A276DEE77148A708FDE4 /* Framework_watchOS */, - D47258787A296733EB9A496796369EDC /* Legacy */, - EC0A54038C133DEC055A8FC6B9E86304 /* StaticLibrary_ObjC_iOS */, - 15879457507DA34869A0D03EEEBD5DFE /* StaticLibrary_ObjC_macOS */, - A79BE4AD95C20F54B13A8B76DC061CDE /* StaticLibrary_ObjC_tvOS */, - EA82D195375B7CB5C6034F26A1C28D44 /* StaticLibrary_ObjC_watchOS */, - D20DB1C7D23BB53FF8FD09BAF451A294 /* StaticLibrary_Swift */, - AB59C0690172FF119F045336C1F1CA0D /* SuperTarget */, - F61DEA90F1B7331EE9B26BBA1F66D1F3 /* XPC Service */, - 24B389B0959F4A6CB05BB732DABDFE40 /* iMessageApp */, - 8A0FE14A3A3815C1F26B447C6178089C /* iMessageExtension */, + NT_BEB0891E36797FE2214A0A9D516D408D /* App_iOS */, + NT_193BAF154270D1C21E269EDF2A1BD3F6 /* App_iOS_Tests */, + NT_D4BAEEEC88124103C8DFF41FCE206DCE /* App_iOS_UITests */, + NT_B91A6EACD6F5192FECA2E95FD531D0CA /* App_macOS */, + NT_38A9FE87056942A2746E0FF025B52A91 /* App_watchOS */, + NT_5245AB6D3B3CFBC95AEBADF6E0C593B8 /* App_watchOS Extension */, + NT_9F72C903B42E1AA3B88F97B917231B15 /* Framework2_iOS */, + NT_87DF09E78830E7EB3C00B6134A2D5A5D /* Framework2_macOS */, + NT_66B6A18138FD1FB5ECF3FC67B20FF3D3 /* Framework2_tvOS */, + NT_A3933B4002C44B46F34B238F654D1362 /* Framework2_watchOS */, + NT_7D108AE86BED8C9CCF52C2646FA4C5DE /* Framework_iOS */, + NT_9D53AF351F8DAE25354F2391248DFCCA /* Framework_macOS */, + NT_FA652FEB38562C3A5C93D5EC7ED09776 /* Framework_tvOS */, + NT_6A7B08EB167FD3A759C339FDBED7E019 /* Framework_watchOS */, + LT_5A51AFB390A610885D62F601DE321E4E /* Legacy */, + NT_6AEE12F93D449E249F5348BBF35D3053 /* StaticLibrary_ObjC_iOS */, + NT_15609BCEEB00CBCC4C42110EB0366A6F /* StaticLibrary_ObjC_macOS */, + NT_D4C3E345E90AF9F6CBE8CF226FCFBCD6 /* StaticLibrary_ObjC_tvOS */, + NT_34A020E43FBBD797051205235CD82B70 /* StaticLibrary_ObjC_watchOS */, + NT_2940463C85DCD0660288786BC66F2C4C /* StaticLibrary_Swift */, + AT_D40C01B2BAD29EDEA392714DFB69FE8F /* SuperTarget */, + NT_23509FD082D1F788E6D6431F509B11AF /* XPC Service */, + NT_6BD068FAAC6AA35C090C48147B94EC6E /* iMessageApp */, + NT_6A4FC6EE80FB2821AB96D51C3BC8966E /* iMessageExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 24E393E5BC60BE4C18A4E88099C92B0B /* Resources */ = { + RBP_1BFB64F249645ABF48C3CCDF8D5FA094 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5163749E505B01D5ACB99C653525D046 /* Assets.xcassets in Resources */, - 370B3DF5D5741094E48BE3C0E00B68E7 /* Interface.storyboard in Resources */, + BF_FA5F3C87A2571E0F39637D118B6C6F8F /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 32ECF2BB5AFA1C4E9A0F6DFE1417110E /* Resources */ = { + RBP_5623703FDC4F6DF4679D8BAF27518F2F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7C2B87BE6AEC5813069E896736FA68A3 /* Assets.xcassets in Resources */, - 9F2CA54E38CDF41C367FAC8E304AF4C5 /* MainInterface.storyboard in Resources */, + BF_ABA4EA32A6DB022806126D9C1418BBA3 /* Assets.xcassets in Resources */, + BF_19C973A29D9994B1E0655B1AFC5528AD /* Interface.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 83D69B533FE35E8D96403BD29AB37F9F /* Resources */ = { + RBP_85DF5DDC76E0E2A78CAFC9A3EC508232 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3F23F02A130E74E4DACB22F380E3462D /* Assets.xcassets in Resources */, - C0D7A2DF599055387B153A51128FB20A /* Main.storyboard in Resources */, + BF_EBC45940911A4942BA04AE1285BF3802 /* Assets.xcassets in Resources */, + BF_B57F9691AD12CA8AE5528A2BAB9E4A43 /* LaunchScreen.storyboard in Resources */, + BF_AC2CE59D56846478FDFBB376FF9F9DC0 /* Localizable.strings in Resources */, + BF_65835F9276FF0DB8E27D098367F9D03C /* Localizable.stringsdict in Resources */, + BF_47FBEFEA08B9642C1F711EDA77FC8C89 /* LocalizedStoryboard.storyboard in Resources */, + BF_47A75C8A7EF15658238E254C846C5C6B /* Main.storyboard in Resources */, + BF_A8A5905BCA8872B2D7B0EF6326B33077 /* MyBundle.bundle in Resources */, + BF_149B8FD8F114C531F675E01FBE814609 /* ResourceFolder in Resources */, + BF_E2D02DDEDD7DC21831F50A6EAA71E528 /* StandaloneAssets.xcassets in Resources */, + BF_D1EF4AECA866B1132F3F01B826B5EE5D /* iMessageApp.app in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 918FF44B84209799C8ECD292189E6D55 /* Resources */ = { + RBP_9291220ECDCB98B69BB31C3E875042EC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3E8A30F173DFFDBDDD0EBDA2D21A0D77 /* Assets.xcassets in Resources */, + BF_9D9B97D239384F4CE6E73852E027B787 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DFB4932D20872BF046F9902EB430C6B6 /* Resources */ = { + RBP_A5B7C086E8F07F5FEE9B99375E375819 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C5DD61FED061701F52A2AE59334C3964 /* Assets.xcassets in Resources */, + BF_D6588CD7B83034816FFD3A7DB10DAD78 /* Assets.xcassets in Resources */, + BF_EA0063B4FC2A0980A746D35A8DF71CED /* MainInterface.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FEFBCD77CD631C182084B94EC52BEE33 /* Resources */ = { + RBP_BA57258FD71062047F5503B4B160FE15 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9338C1374B8F82194B44B6F73075123 /* Assets.xcassets in Resources */, - 2CCCB0657766F9F9527F77A9F42AAF9E /* LaunchScreen.storyboard in Resources */, - 3243ACA306AD909C8186921F288640DB /* Localizable.strings in Resources */, - DB95C341F44FE1E093C948F4F734515B /* Localizable.stringsdict in Resources */, - 3D49538E97F4592012896021971B0166 /* LocalizedStoryboard.storyboard in Resources */, - 7AE6DE3A93E56909084D4F93795B3C93 /* Main.storyboard in Resources */, - 809CDDAA142679CDCFCF376C9CA71C09 /* MyBundle.bundle in Resources */, - BE38983978B6D70795D2924F52F3081D /* ResourceFolder in Resources */, - AA5AF277386012CD6CC015073239E50F /* StandaloneAssets.xcassets in Resources */, - 5A6137039176A4E48CF6B399372D56EA /* iMessageApp.app in Resources */, + BF_51D370314B5DA8E002A908021E459F50 /* Assets.xcassets in Resources */, + BF_52C8E2C5962601534CE6F00B88FDB048 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 06FB4F63AAEECCDD060382A3AF8AEF4B /* Copy Swift Objective-C Interface Header */ = { + SSBP_062CBBF024005F57EECA660F9C7B0C7D /* Strip Unused Architectures from Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Strip Unused Architectures from Frameworks"; + 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"; + }; + SSBP_13B42B84708A6ABC082BE00176F5DCB2 /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"You ran a script\"\n"; + }; + SSBP_1B2C6BA1C514471EF42FB7E03ACD8C83 /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"You ran a script\"\n"; + }; + SSBP_376C0662E4E8416C049A50660864798B /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"You ran a script!\"\n"; + }; + SSBP_4A83147402B05D3C84D21F0487315914 /* Copy Swift Objective-C Interface Header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1489,21 +1548,7 @@ shellPath = /bin/sh; shellScript = "ditto \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n"; }; - 2983C9312429A22DF5437C4020B9937E /* MyScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = MyScript; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"You ran a script\"\n"; - }; - 2F13215A0801F44C3CCF154F3EE02A7B /* Carthage */ = { + SSBP_7F147E7ED45BAAE2186975B7FF9EB08A /* Carthage */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1519,35 +1564,7 @@ shellPath = /bin/sh; shellScript = "carthage copy-frameworks\n"; }; - 69E4B11A07FF06F8306B5646CA2403EF /* MyScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = MyScript; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"do the thing\""; - }; - 70D0BCF93538A104153586A9BF269386 /* MyScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = MyScript; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"You ran a script!\"\n"; - }; - 712CA3288AD8B0F43FAA19930C53500B /* Carthage */ = { + SSBP_7F8DED07519BA4B70C40A9A755844874 /* Carthage */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1563,7 +1580,21 @@ shellPath = /bin/sh; shellScript = "carthage copy-frameworks\n"; }; - 78EF33E6A08B3BB88D8805DC3588843C /* MyScript */ = { + SSBP_831D7D5A30B0F736E1E92F7B5CF9428F /* MyScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = MyScript; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"do the thing\""; + }; + SSBP_B07F447D73408EA48C54A8E7F5B8D575 /* MyScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1577,35 +1608,7 @@ shellPath = /bin/sh; shellScript = "echo \"You ran a script\"\n"; }; - 974A437754992A1B4A30613EC766AE2C /* Strip Unused Architectures from Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Strip Unused Architectures from Frameworks"; - 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"; - }; - ADF413AF548A97CB33898BB4F6211314 /* MyScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = MyScript; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"You ran a script\"\n"; - }; - DABB7DFD3C5DB4EAC8C5D24C79EA4E35 /* MyScript */ = { + SSBP_C8F56E533BE956498E644805330168EB /* MyScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1622,499 +1625,363 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 1411E21883A09388E140C6D123029288 /* Sources */ = { + SBP_0CB30551A2D40126958D8D6DAF6922E2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BD4C8B77EF89CF7F4ED0D1C4713397E4 /* FrameworkFile.swift in Sources */, + BF_E6B3BA0A3A687598FB5CCDF0524E1B10 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1A0DA3851491E727A610A7638ABB5434 /* Sources */ = { + SBP_110D7B4160D965B7964619BF78E01DE2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB8A64197C4C63F208D8D98C4D87C1B2 /* FrameworkFile.swift in Sources */, + BF_76825DD9B3B10103CDAB9D235BDF6A91 /* MessagesViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1C758FAD884F96BE234FBB1BBE295E97 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 766C78D100B581A2A469B47A02A0E6D9 /* AppDelegate.swift in Sources */, - FFA6D03EB711292F77E0BB317C750F5A /* Model.xcdatamodeld in Sources */, - 0A774DBC62F3C7721971E0C95BB2564A /* MoreUnder.swift in Sources */, - 304090AFAC1ED0D09C95B0CB2BEFEB9E /* Standalone.swift in Sources */, - 55E7240008DD5452802A41DA6FC7A16F /* ViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1C8F955BEA261BDB36838B408C2D7D23 /* Sources */ = { + SBP_20DDAC7BCD11ECA8B08695FE5D7314A9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 25185271EDE7FEEC99372505A683359C /* Sources */ = { + SBP_3848ADAF2343866973E57344A1054BE3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 39F00BF22067B72F4FB20F216AFA52DC /* AppDelegate.swift in Sources */, - 277BE1159CD7855C287566F29F8939BA /* Standalone.swift in Sources */, - B98C8E72B61BBDB105CFBC7A22B5E972 /* ViewController.swift in Sources */, + BF_1EC32E6544284999188A140FB5FC6E67 /* TestProjectUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 35714896F7B0D8F151E1A3B4C04AE0DB /* Sources */ = { + SBP_3DD17ED231CE07543581040F32049525 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AD00993C2491D03BD3A1B6E48D685C29 /* MessagesViewController.swift in Sources */, + BF_DBF3047DCE71CB2E7B9AC7367F44F8DB /* StaticLibrary.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 634CFCBFE3760F2A0288F1BF42B66FF9 /* Sources */ = { + SBP_48868408A19D9BBE4A58CA4FAE00C0D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_5C6407EDAC3D88B020BCB46724DC1D14 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_49F3C650EA105D1EF50817673A8DB33A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_A29F8B04C9DD9ADE1EF5AFDAAA0130D2 /* ExtensionDelegate.swift in Sources */, + BF_5336CD16DBDB1654D75AA91B922DEAD6 /* InterfaceController.swift in Sources */, + BF_CD062A97959629BD672893FDAE89A1E9 /* NotificationController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_52AE5DCFB4487297D6889C7F014AD281 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_77C9BB7BED4F5970D02E69312259FE09 /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_645418A0FA6E3F5727685DE191C6B793 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_D0676C98017B6FDD96A733CB851645DE /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_669CBAFD2D7234A2BEDCEAA4949ED575 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_FA28229372AB6236883309181258AF26 /* XPC_Service.m in Sources */, + BF_FD13F69A90FB1D5676B97A8C77D710B4 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_70B2F11AAC526FDB99D68212C2C92CE6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_B2B4B15D6F7B242DBDA39939111282F9 /* TestProjectTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_77EF8BC7FC3D693C9C0C1CB51984F3E2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_021628792D80050372F6E56A6C3D0561 /* AppDelegate.swift in Sources */, + BF_9A74AED05E2F61530BFA0F7D23AF0112 /* Model.xcdatamodeld in Sources */, + BF_FF7EBDFA4462D2983743C84CE99D9714 /* MoreUnder.swift in Sources */, + BF_47FF83A37355E90F93C0F5B2CFBCE317 /* Standalone.swift in Sources */, + BF_F12E44D8E7F617E8A5FD8E1A342E5FAD /* ViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_7EE428F1F0444ACB29B3C5259C04FF6D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_81711FB79375EB743254B809B4E246E0 /* AppDelegate.swift in Sources */, + BF_F7AC9F45ED37FCD5A749FD6F5F4518AF /* Standalone.swift in Sources */, + BF_98DEE7FD578AA439550E0023A2ECE8D0 /* ViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_84E9A8BE77910B67B3F2DCD5916DC498 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_3080067722B357BFC053D89CCDBF5397 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_8990272D7DD45CFBDAB18690861BD4E8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_8610CB66872BC72C1690EBD8D102FBC0 /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_924258C7A9F27B13508604CAF625E0D3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_E228A4D3997297780216722D71AC9FE5 /* StaticLibrary_ObjC.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_9DB756A33A199E4D91CE6E6E2A5A706C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BF_729EB1C88A5E43B2342099D81B301F4D /* FrameworkFile.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + SBP_C18D008976BE0EFD3D3A3C68FB79D271 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 6EA5EBCD13C2DDEB4B9422C07D81B71A /* Sources */ = { + SBP_C469AFC0C383156AF5C80EBBC089D9FC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1DAB513CE479D00840BC5D0698409634 /* FrameworkFile.swift in Sources */, + BF_3811C1771AF5342AD8F9FEB63A3465B5 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8E6FC06C82186DB3FA95E51EFE18711C /* Sources */ = { + SBP_D6209A702C851D0CFD1CC2B225986D45 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + BF_C9D24A56926211130F4E25B5D9972B58 /* StaticLibrary_ObjC.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 910907240480D0AFBF32A79A4008D866 /* Sources */ = { + SBP_DB9B8E1504ED9DD92AE41067C53B5082 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D8E194DE99C1389B4335B7112DEA7DC4 /* ExtensionDelegate.swift in Sources */, - A6CCC432869EB6B8A65A89B565B57EA5 /* InterfaceController.swift in Sources */, - 49C46F18756F4E9EE9E1CC328F79A2AD /* NotificationController.swift in Sources */, + BF_D3D64E2595369BBDEF03E07543AE2779 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A0301004CBF36C0004B23102202FA9FE /* Sources */ = { + SBP_EA528A5DC6D79AA397B25949B07AE70F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4F880A62908F7CD24C87CE5D67B0196 /* FrameworkFile.swift in Sources */, + BF_4D56F3F4D081A77C11325B96DD34D8E1 /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A305A9C4673244353334E95DCDFD735D /* Sources */ = { + SBP_ED63FCA00BD617EFF125ECDF9D24FAD8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A4E000AF88BD17B9A2B08452C17C2EEF /* StaticLibrary.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ADD1A71858A73905360F9EF440895A09 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4EE4F4B638DFB130C8032FB1426CB9F3 /* FrameworkFile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AFF1863F9CDDD4DD0B0EB22A6AD9850A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EBC3AA70BAD516864D119DDEEE2C436D /* FrameworkFile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B07FD4FDF599BF4F54EF8B3381CFF050 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4B73A1BC6DB57DC8D7548C59B109CB49 /* StaticLibrary_ObjC.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C88A74B7BA8B2E80B92E453D04A9688A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6693ECDA5AD8C2A96135B694E16C3199 /* StaticLibrary_ObjC.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D037068D88E7DAEB3A373602EE996609 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F7E9F427669FE7710D0A19AA4E1156F4 /* TestProjectUITests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DB71FFE5444FA615A2092FB2C7BDEFA7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8EA31D26241C81C5B7BF40D4B7070B6A /* StaticLibrary_ObjC.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E32AAD525623BF5008484D641327F1AD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 51FCB6F2D56B68E627A35C53729E423A /* XPC_Service.m in Sources */, - 7AF2CCC3F2ECDC1FE82B2C05BEF75B71 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E74227370CF6081A47B8C2AB02479899 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 68642C69AC9333487FC491E6FA98261E /* TestProjectTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E74DACDAB11D89D5B824405B81E48D89 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F16AD8A4E1A6E1189CE048C03CEA9469 /* FrameworkFile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EBA907A9A32C582C14D2C34324CA3898 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 242BCE1F2307F71F1BB3EAF2ED63875A /* StaticLibrary_ObjC.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FE2EE5AFF99E31C8919F2875F62884E1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2FADF97C0767D01C764933FD041CE39C /* FrameworkFile.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 107877BC5E43BF7DDE7F77EC0A14BF24 /* PBXTargetDependency */ = { + TD_0C5CE0308CB64DB986A853307CCF8A95 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 30FE6802B08DEC0251F565BD100C6552 /* Framework2_iOS */; - targetProxy = 3F55262AEB18533E792A957CE709A5F8 /* PBXContainerItemProxy */; + target = NT_38A9FE87056942A2746E0FF025B52A91 /* App_watchOS */; + targetProxy = CIP_6D60DD975DE7829AEA72BD4098DE13E6 /* PBXContainerItemProxy */; }; - 10B5BED93CB8C9A5B7BB81E996C7F071 /* PBXTargetDependency */ = { + TD_117F878FC368C83443CEC1707531F7F2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 9F21B9C99E75314E51854589C0A2D40C /* App_watchOS */; - targetProxy = 61EAE260C32C57D1ADCEAA01E33B62F0 /* PBXContainerItemProxy */; + target = NT_6AEE12F93D449E249F5348BBF35D3053 /* StaticLibrary_ObjC_iOS */; + targetProxy = CIP_1F8C8F9FAC75236BB2F60C3BCAE41C55 /* PBXContainerItemProxy */; }; - 16156D2E07BFBB09D5921589B483FF23 /* PBXTargetDependency */ = { + TD_205ABD699FA8E05C47D73E8EB2D0F9EF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 24B389B0959F4A6CB05BB732DABDFE40 /* iMessageApp */; - targetProxy = 0BF678D2C5D11E654050E6FD6AF1321C /* PBXContainerItemProxy */; + target = NT_34A020E43FBBD797051205235CD82B70 /* StaticLibrary_ObjC_watchOS */; + targetProxy = CIP_47399FDE0885501C87782313489C95A3 /* PBXContainerItemProxy */; }; - 2EA3B710428DD5AC737E68EA2707702D /* PBXTargetDependency */ = { + TD_266243C3BBC1C83485E1B43C0FFC3626 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = EC0A54038C133DEC055A8FC6B9E86304 /* StaticLibrary_ObjC_iOS */; - targetProxy = FAE0D33AD5DFB0090F183AC2E48BA1D2 /* PBXContainerItemProxy */; + target = NT_6AEE12F93D449E249F5348BBF35D3053 /* StaticLibrary_ObjC_iOS */; + targetProxy = CIP_1AEF07B9F6A9BC9605E82F26AE7BFE15 /* PBXContainerItemProxy */; }; - 3E978D446B3957A557629CD1DF47004B /* PBXTargetDependency */ = { + TD_2A43F973A3E1CF675A967054BA52074B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */; - targetProxy = 931421A32656354E62549752A08EDBF8 /* PBXContainerItemProxy */; + target = NT_5245AB6D3B3CFBC95AEBADF6E0C593B8 /* App_watchOS Extension */; + targetProxy = CIP_5F2FD3F0AED59431B4F98D7238CAA733 /* PBXContainerItemProxy */; }; - 3FFD524CC10F62CA07750D1026106CB3 /* PBXTargetDependency */ = { + TD_35F382102AABCCCEFADCBC201E5B1CE1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */; - targetProxy = EEB2D30EB7369BDB638EBEEF136463C2 /* PBXContainerItemProxy */; + target = NT_15609BCEEB00CBCC4C42110EB0366A6F /* StaticLibrary_ObjC_macOS */; + targetProxy = CIP_64ED071F49DC88F8192387D7A18827F1 /* PBXContainerItemProxy */; }; - 5189C5E269DD98A187BF59169A4FC1D1 /* PBXTargetDependency */ = { + TD_4013C738E59E1CA40B4A982AF74E8604 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = FE8D0077B0ADF688264AFA16A3FC213E /* Framework_iOS */; - targetProxy = 29DD3982DDC8FB1816F3413908D59361 /* PBXContainerItemProxy */; + target = NT_7D108AE86BED8C9CCF52C2646FA4C5DE /* Framework_iOS */; + targetProxy = CIP_DC690C90FF2F615A1EB93D9803F8D905 /* PBXContainerItemProxy */; }; - 586BE274C55FC00DE6BE62A0AAC127F6 /* PBXTargetDependency */ = { + TD_402541000CCC58970431E41C3D928AB8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = CBCC05D0B8E90F960AA198981827667B /* App_watchOS Extension */; - targetProxy = 454E9650A00080FE30274224CC9F46C0 /* PBXContainerItemProxy */; + target = NT_BEB0891E36797FE2214A0A9D516D408D /* App_iOS */; + targetProxy = CIP_73A78E804E93B79E9ED934358CDD7D9D /* PBXContainerItemProxy */; }; - 5E65F165E37E737337177A885B1D8276 /* PBXTargetDependency */ = { + TD_743D7CD7BB700A16A02A7A4A1E02D845 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = EC0A54038C133DEC055A8FC6B9E86304 /* StaticLibrary_ObjC_iOS */; - targetProxy = ED4E74C287B41CF65512AA3E218CCD4A /* PBXContainerItemProxy */; + target = NT_6BD068FAAC6AA35C090C48147B94EC6E /* iMessageApp */; + targetProxy = CIP_5E9F76628F77E820EB9AA60A282D8691 /* PBXContainerItemProxy */; }; - 632C4C9ABCE4E550CC5CC6F87B5C4DBD /* PBXTargetDependency */ = { + TD_79BA73EB5832255541811162BB2B0218 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = F61DEA90F1B7331EE9B26BBA1F66D1F3 /* XPC Service */; - targetProxy = 9B58798122BFEA3C65A8FF0A3351860D /* PBXContainerItemProxy */; + target = NT_D4C3E345E90AF9F6CBE8CF226FCFBCD6 /* StaticLibrary_ObjC_tvOS */; + targetProxy = CIP_1C3D8F2BF099A773651CF8A195466469 /* PBXContainerItemProxy */; }; - 7361EDBA6CC2A0CC04DCB2658DEAA7D3 /* PBXTargetDependency */ = { + TD_846DB03B9778D6C8E81FE52A5A212420 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = A79BE4AD95C20F54B13A8B76DC061CDE /* StaticLibrary_ObjC_tvOS */; - targetProxy = 1466B8370FAB4F9766F799F21EB3E6F8 /* PBXContainerItemProxy */; + target = NT_6A4FC6EE80FB2821AB96D51C3BC8966E /* iMessageExtension */; + targetProxy = CIP_B5B71FB9D5064D7E05E9E44827A87775 /* PBXContainerItemProxy */; }; - 79285886AE41FF04B4E0274CE54C6C60 /* PBXTargetDependency */ = { + TD_94E481CDF62CDA1E9B37D1DA08E5A5AF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = EA82D195375B7CB5C6034F26A1C28D44 /* StaticLibrary_ObjC_watchOS */; - targetProxy = F012DD49D84B1DDE30124D55ED320316 /* PBXContainerItemProxy */; + target = NT_9F72C903B42E1AA3B88F97B917231B15 /* Framework2_iOS */; + targetProxy = CIP_862C50E687ABB75CCDF71F1157709A4D /* PBXContainerItemProxy */; }; - 85A9116EE91FAB1AA6CA20FD4203A941 /* PBXTargetDependency */ = { + TD_98EB63C93477EA15558367FBAB5797CE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */; - targetProxy = CC516AFC796533BF02DD6B96F8DD7E74 /* PBXContainerItemProxy */; + target = NT_BEB0891E36797FE2214A0A9D516D408D /* App_iOS */; + targetProxy = CIP_291A38592460740F400A80DE5DBA9679 /* PBXContainerItemProxy */; }; - 92AF10FC3AC60DB57A91645E9BDB9B2C /* PBXTargetDependency */ = { + TD_B8AB4064784522A5F3760CB1372D1BCD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 15879457507DA34869A0D03EEEBD5DFE /* StaticLibrary_ObjC_macOS */; - targetProxy = 96D6946F3C582A81EDB142746A377EF9 /* PBXContainerItemProxy */; + target = NT_BEB0891E36797FE2214A0A9D516D408D /* App_iOS */; + targetProxy = CIP_4FA1F11884BC4F5DBDFAC1FBEC60AFC1 /* PBXContainerItemProxy */; }; - A0D6CD1CF256FD0AA1C77265A094A814 /* PBXTargetDependency */ = { + TD_B8F32B4B3CC431FE0EC1C4E7D096E3AC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 15879457507DA34869A0D03EEEBD5DFE /* StaticLibrary_ObjC_macOS */; - targetProxy = 8E732CDAED0C28344CAED954EDDEC26C /* PBXContainerItemProxy */; + target = NT_9D53AF351F8DAE25354F2391248DFCCA /* Framework_macOS */; + targetProxy = CIP_CA46A507405C3CBD7579D2C9A3F8719E /* PBXContainerItemProxy */; }; - A835D5FBAD20741BCF95975E1CD63A7A /* PBXTargetDependency */ = { + TD_BBB2D0EDFD9EF8193F1864D1F3D5F97A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = DB85CB6A2C15660854D634EF1B0C1FAD /* App_iOS */; - targetProxy = 09709070DE34AF9CD99E9E5EB9990FEA /* PBXContainerItemProxy */; + target = NT_15609BCEEB00CBCC4C42110EB0366A6F /* StaticLibrary_ObjC_macOS */; + targetProxy = CIP_C82ED1EBAD4D7218ED9694EB7BF4DE74 /* PBXContainerItemProxy */; }; - BCAEBFE2D144CD4E9F4042CB793B6FFB /* PBXTargetDependency */ = { + TD_C762D8FBA80775A921AA5B50422E9349 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 6805881B1B6A80ABD523DAF4AFA493E2 /* Framework_macOS */; - targetProxy = 322420B31CCE201E90F298BE48129574 /* PBXContainerItemProxy */; + target = NT_23509FD082D1F788E6D6431F509B11AF /* XPC Service */; + targetProxy = CIP_BAAD03920C86C2839C3C93FDA5568ECE /* PBXContainerItemProxy */; }; - D976477E0195A8FFD5043C8BBD4B67C4 /* PBXTargetDependency */ = { + TD_D056799E80FFF41247BAE692D01142F0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 8A0FE14A3A3815C1F26B447C6178089C /* iMessageExtension */; - targetProxy = DE00464172E7A41CC51991B9136AA5BD /* PBXContainerItemProxy */; + target = NT_7D108AE86BED8C9CCF52C2646FA4C5DE /* Framework_iOS */; + targetProxy = CIP_A760C88E6F24D3F06081AEBDEB8AE54B /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 466B302E661DE3B3972203B31F4AFED4 /* Localizable.stringsdict */ = { + VG_06DC429EEFBBA25BC3EE1AA1B4062C10 /* MainInterface.storyboard */ = { isa = PBXVariantGroup; children = ( - 6B9588F9AA980468B26837ADE36D0D2E /* Base */, - 2E871C49A75D636E1E87F8904C5BA3D9 /* en */, - ); - name = Localizable.stringsdict; - sourceTree = ""; - }; - 49A30AD670910672DABA8B736EECBAEB /* LocalizedStoryboard.storyboard */ = { - isa = PBXVariantGroup; - children = ( - F56A7C74F4A75492F063A0A5BDBBF65C /* Base */, - DB194C9EF763551CE2D5131407E8CF1C /* en */, - ); - name = LocalizedStoryboard.storyboard; - sourceTree = ""; - }; - 81F7E21FBB8DA98ECF0A51099CDAF2EE /* MainInterface.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 354650483D8F76CB15A0FB0A99D2657F /* Base */, + FR_7C8280C3C5E1D43BBB12A5F0156A8305 /* Base */, ); name = MainInterface.storyboard; sourceTree = ""; }; - 8EAFD105FB449C592C944D3003203AB5 /* Main.storyboard */ = { + VG_14B7B5469AA17939993A2B25E775D391 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - C8822458902508063262BA655921BA2F /* Base */, + FR_7532DD7B78451A5040048474AC4FBCCC /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 9835A83F1E5D8E22848E171BA3C2DBA6 /* LaunchScreen.storyboard */ = { + VG_30676EBEE9BE54AA26CAE69BE744CAE8 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 5FA5EA11F66D659044AB1FB5496EBF25 /* Base */, + FR_C5682A1371F91CBD1254C115F0439F12 /* Base */, ); - name = LaunchScreen.storyboard; + name = Main.storyboard; sourceTree = ""; }; - C358B60A4C6D98BF3CD9B2C0C75FFC31 /* Interface.storyboard */ = { + VG_6542B94EE7DA40CD30BC54DED26C61C7 /* Interface.storyboard */ = { isa = PBXVariantGroup; children = ( - A59DAE760F32225493BDC5D378468EA9 /* Base */, + FR_2649A01C17A7301DD72EA826604ED8AA /* Base */, ); name = Interface.storyboard; sourceTree = ""; }; - E005A2734C32783354AAB8546A12718B /* Localizable.strings */ = { + VG_BE436BDD64E90EFB600D47AC69B49DD3 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - F435E28C9379AF718A5D502BF3B2FB26 /* Base */, - EC5C7923578F1110EE9EE74505530753 /* en */, + FR_62ECE5A3D0F25415CB50A28226B91EBE /* Base */, + FR_11E95FCD1DEB0C8A01A053518C1DAA8E /* en */, ); name = Localizable.strings; sourceTree = ""; }; - FDFD35E7E9845A353B2B0DF8B68296A8 /* Main.storyboard */ = { + VG_C247AA37E9057916EDDC65C7B55E2F38 /* Localizable.stringsdict */ = { isa = PBXVariantGroup; children = ( - 2553AE42F1AAAE25D59E0FE045BA52C2 /* Base */, + FR_4B58A01ABBE8E0A56B7B5A539C9BF5C7 /* Base */, + FR_BCEF8D29C9B93D3160D8D76DD368C8AD /* en */, ); - name = Main.storyboard; + name = Localizable.stringsdict; + sourceTree = ""; + }; + VG_F256536BB07CF3E64C4DD934F75BED9C /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + FR_C73B96CEEE97DE429C638EBD9C2F3D2B /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + VG_FE6D89DA2D7E7F58340D566590FF221C /* LocalizedStoryboard.storyboard */ = { + isa = PBXVariantGroup; + children = ( + FR_A51DE87AC269BC36016F9CAC32B4ECB2 /* Base */, + FR_35B9B5E8A2ED60FBB9CED8AE515B16B5 /* en */, + ); + name = LocalizedStoryboard.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 005BBEE3C0E483C0B46EFCCE3563F2E5 /* 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"; - }; - 017D658B4ABE46C5A30A44E1EB610EEC /* 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"; - }; - 01DBD7FCC87C5676808C8DC642E5076D /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Test Release"; - }; - 033BB6B0853606FB2D2FD4F80238B6C0 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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"; - }; - 042BBE336DA13DF962EA6C453B022AF8 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", - ); - 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"; - }; - 043A0C042785957178A6693CFA0E1AD6 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Test Debug"; - }; - 073C2C693117E1D34E1B0F985E54181E /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Staging Debug"; - }; - 07E1360852ED801B9A2C191311650CB6 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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"; - }; - 096ECE14561204A143946060635175E2 /* Test Debug */ = { + BC_0198386D4EF48A4C053820EEEE1936CB /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; @@ -2131,7 +1998,7 @@ }; name = "Test Debug"; }; - 0A20244EB4E72EC58117F028E72046EC /* Staging Release */ = { + BC_0271561C28AF4A74C6924A2187BC8487 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -2153,108 +2020,44 @@ TARGETED_DEVICE_FAMILY = 4; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Staging Release"; + name = "Test Release"; }; - 0E98CA343910624717406D4EDFE7BB68 /* Staging Release */ = { + BC_032D44BB36CD1AC13FFFAC654631D432 /* 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/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.Framework2-macOS"; - PRODUCT_NAME = Framework2; - SDKROOT = macosx; + 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"; - }; - 129A56DA11ACAC4A31B865C9DCBA1820 /* 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"; - }; - 12CA842D6B2FF31191FE1307FCD9D7EE /* 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"; - }; - 16B8CDB44A6128CAA0F76CADB3C8666F /* 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"; }; - 17DD6C54D892A228DC61C020225C9051 /* Production Release */ = { + BC_057931652E9069AFF23BA573B6564BE5 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Production Release"; + name = "Production Debug"; }; - 17F6FF338B0EDFF7796A8F04E3F3800F /* 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"; - }; - 182E0CC8A3915AEB912F5D1291301A43 /* Production Debug */ = { + BC_079D311B8C64F17C816583A1A4D84F42 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -2273,98 +2076,9 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS"; SDKROOT = macosx; }; - name = "Production Debug"; + name = "Staging Release"; }; - 1A086472EE7B5AD1BCC790833A32EEBD /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Test Debug"; - }; - 1B04852DE1BAC9963EC108C9CF616C68 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", - ); - 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"; - }; - 1B9700E8063BFE2CBE2FB8B1EDB34253 /* 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"; - }; - 1B998C2AF9280CE3625E7DCBA5B62F6E /* 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"; - }; - 1D285F94CF59832C2BA027CD569DDAB7 /* 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"; - }; - 1D9EB22E5DBAB4FA60986D9F7D4EB36B /* Test Release */ = { + BC_0B1CBABAB9579A064729249F5E1B7B84 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -2387,20 +2101,46 @@ TARGETED_DEVICE_FAMILY = 3; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Release"; + name = "Test Debug"; }; - 238AD5E15AEE443741AA30FC7DF9BE4E /* Test Debug */ = { + BC_0B57E3E0E8C194293ABFEEF97F104F30 /* 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"; + }; + BC_0D53E4051E21792867D5FA4A11B751AB /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift"; - SDKROOT = iphoneos; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS"; + PRODUCT_NAME = StaticLibrary_ObjC; + SDKROOT = appletvos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 3; }; - name = "Test Debug"; + name = "Production Release"; }; - 239E8DC605456167C1F5A3E11E89E02E /* Test Release */ = { + BC_0D96F61E117D6A8D2353B0E7CB445AEA /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -2423,101 +2163,27 @@ SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Release"; - }; - 263225267AC9E77B5610B7D31E71CB44 /* 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"; }; - 2B951E215B2D888141E1252E2FA1F2DF /* Production Release */ = { + BC_0E087681CE92CC2069F9E562ECC9FD23 /* 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 = "Production Release"; - }; - 2DD3A646E69429A5AF67450B9CB2FCB2 /* 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"; + MY_SETTING = hello; }; name = "Staging Debug"; }; - 2EABDD2A3CB1E85833E8A1555AE92380 /* Production Debug */ = { + BC_0E104167F96EA087A23DFBE2430D5612 /* 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"; - }; - 336426B8AB782E9CBB9AB6471046BF19 /* 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; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS"; + PRODUCT_NAME = StaticLibrary_ObjC; SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; - VERSIONING_SYSTEM = "apple-generic"; }; - name = "Staging Release"; + name = "Production Debug"; }; - 3B64F4C26A564FBA69A8B5DD22A9CF1E /* Staging Release */ = { + BC_11CBEB05340DE3C8F396B359A9144039 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; @@ -2528,290 +2194,7 @@ }; name = "Staging Release"; }; - 3BAD8F458B7F998E8BF6F3C7D2A8516A /* 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"; - }; - 3BE57E2A55CD16BC51F289949EC85F76 /* 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"; - }; - 3C145C72644EBBA1C6177D17710C9CD2 /* 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"; - }; - 3E086BCE5D760D61BB3D412C9F0B4BDA /* 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"; - }; - 3EC13048478BFF2EF5984AF7F98E93DD /* 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"; - }; - 412CC38BB25D52A84D6951A85EF344DF /* 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"; - }; - 41AE4D3B9E1B4B940169B84E3BA5CCE7 /* 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"; - }; - 4280A141F22CF2FEFA06373AEFFAAC0F /* 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"; - }; - 42E41490B4F137D48214D74A60E82741 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Staging Release"; - }; - 48C7C82163507BFDDBBE9640C56C4384 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - 4B2E7C0E64CC8AE67BAE91B33EAFB6F9 /* 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"; - }; - 4B5E0992A404F791F2CFFAD1C96F95E2 /* 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"; - }; - 4E69BB19B16E547D43AF93A25BCD9F31 /* 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"; - }; - 53FA2A6BC1E12907C7E04A1686CD2235 /* 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"; - }; - 54F359EE934A693B2193AAEC11473AA8 /* 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"; - }; - 56663C3D4D239DB7132EFC6F4BD6931F /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - 5720F6E9771684E5729A08D75426C874 /* 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"; - }; - 591C680E52370290108989EB469E5509 /* Production Debug */ = { + BC_120D6C5C7E4D1D6566CBD71E11C3DF37 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -2834,13 +2217,12 @@ SKIP_INSTALL = YES; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Production Debug"; + name = "Staging Debug"; }; - 5A1D3DA3365EDDAF6EC275BEF2A939B0 /* Staging Release */ = { + BC_1603C1C58A4D6AE1BD0707D13D2C8F44 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2848,60 +2230,21 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", + "$(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-macOS"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS"; PRODUCT_NAME = Framework; - SDKROOT = macosx; + SDKROOT = appletvos; SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Staging Release"; - }; - 5AA86BB667B6BB6A065CDC7A86358C06 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - 5AFEBB1B2CFDA4E69B52143EF4C01713 /* 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"; }; - 5C0EB6B29716576F8BEC3FCC79F4761A /* 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"; - }; - 5E2F1BACE5D532159E4E4CDEA7781A53 /* Staging Debug */ = { + BC_161B10E65E0BE143A17EADFA5EE88B3D /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -2924,72 +2267,7 @@ }; name = "Staging Debug"; }; - 5F2AF4A04FDD6171C4B13DBFE74F77AD /* 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"; - }; - 5F9AF0BD4959D01102D429D68A1AE409 /* 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"; - }; - 600D2124C2A4443FF163E6E3B501E909 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - name = "Production Debug"; - }; - 60521A88A3FF4EDF3DD3A4E909DB4541 /* 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"; - }; - 617BB41EB582FD2294AD3F0EF67FF86C /* Production Debug */ = { + BC_16E1FCDA9DB6E70091B54603E4E6F58B /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -3004,9 +2282,16 @@ TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 3.0; }; + name = "Test Release"; + }; + BC_1841B61F3F85EC24C4AACBC5C025BD08 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; name = "Production Debug"; }; - 65444C57D9A364444BA7003179D5061D /* Staging Release */ = { + BC_19CBA184C0BDC24CE3657C025A8FC279 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -3023,7 +2308,174 @@ }; name = "Staging Release"; }; - 676171EF49F08996E70CF35B0210B3EE /* Staging Release */ = { + BC_19E3B21D0DA59BAF1B99899A35858D52 /* 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_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = "Test Release"; + }; + BC_1CF7F7BC6E19981DCBBFE6FE2D9FCB62 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", + ); + 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"; + }; + BC_1D9A30F2A4E9057FD8A7101D4AA4F47D /* 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"; + }; + BC_209579D4C144FB697FDD46843485CC6A /* 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 = 4.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = "Production Debug"; + }; + BC_22D59B57A805B62A266F803CCDD49C26 /* 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"; + }; + BC_24042033AF9D3DEDAD53ACAF1C2BB0B2 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3032,48 +2484,67 @@ 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; + 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"; + name = "Production Release"; }; - 679FF6873FEB353F21917C19BCC838E8 /* Staging Debug */ = { + BC_27A94FA771ABEE02868BCED0690C89E1 /* 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/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; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS"; + PRODUCT_NAME = Framework2; + SDKROOT = macosx; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; VERSIONING_SYSTEM = "apple-generic"; }; name = "Staging Debug"; }; - 6E76891FB5D6528F7679C4029CEA9DDB /* Staging Release */ = { + BC_291E5C210DD53C3B3A4C6057C2B9652A /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + BC_2D532F03F57D7D107FDAC3EF23DBFBFE /* 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"; + }; + BC_2DB4D72679A12506C6A8B4728F130B7D /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -3083,17 +2554,140 @@ }; name = "Staging Release"; }; - 6FFE1C21D2525DBB6DFB640EA7DC613A /* Staging Debug */ = { + BC_2F352436A75D33C6D3337012367BE90C /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy; + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + BC_3134697E7D6C32A5C4376C581C189D6B /* 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"; + }; + BC_313481FFED1411A2B5969B70EBA94383 /* 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"; + }; + BC_3CCE54849732E01493DDDB7D86E033D4 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; name = "Staging Debug"; }; - 70725C98440FD53BB91443718AC11C49 /* Production Debug */ = { + BC_3D9C1A83637AB10D5FFC5D4F8331091E /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + BC_42C4FEAD23C2FE1A906F4D37F43182AB /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Production Release"; + }; + BC_4346300D78CE0EC28B467470E8C4DB2E /* 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"; + }; + BC_46EDEC047C02E1E271BADF861EFB2F8D /* 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"; + }; + BC_4AC83F754F5BB02C3019E8AE2303E966 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; @@ -3108,9 +2702,118 @@ SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; }; + name = "Production Release"; + }; + BC_4F7A9BAD8AB16D47ECA510689FB5F899 /* 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"; + }; + BC_50C3D866E3B57D83181A8F04E553F557 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; }; - 71D8747E9D932CC57F5C7689CDAB915E /* Staging Debug */ = { + BC_53BBB90244275C55B50604E0DC26809E /* 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"; + }; + BC_541CCB32267A890B3BABCE62FFE461E2 /* 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"; + }; + BC_54F3754420D0F7418AB42235B1D71751 /* 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"; + }; + BC_56B4C0BD8630088AECC29D1D7064530F /* 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"; + }; + BC_57D3973CA01D421550D834AFA79D2B4B /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Test Release"; + }; + BC_58D5B708B08789E2DFD4D60A906AAA6E /* 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"; + }; + BC_5901F7B4A1799821B3061B5EA7C4A033 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -3124,20 +2827,422 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; + name = "Production Debug"; + }; + BC_5951C33138E508D3E6CA672980D5F2B6 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; }; - 76B45660690ECDC9D44E1D9957AF5029 /* Production Debug */ = { + BC_5996DB19FBFE69C54C671E0624798C4B /* 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"; + }; + BC_5A05C344BCA2E54DFF945E68ECC21064 /* 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"; + }; + BC_5B12F047BB0206FED25C955314A29B18 /* 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"; + }; + BC_5BC104FB79C437B79CC9D676B3B964D2 /* 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"; + }; + BC_5CA18B8A4079FC28EF3A05BDC5E4D501 /* 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"; + }; + BC_5CBE4F01DBB084436375039EFEDDE6E4 /* 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; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-macOS"; + PRODUCT_NAME = StaticLibrary_ObjC; SDKROOT = macosx; + SKIP_INSTALL = YES; }; name = "Production Debug"; }; - 78064626756CECDA6038E7E6CF655FCD /* Test Release */ = { + BC_5D33E2C3F29594425D03B339108871CF /* 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"; + }; + BC_5D7B920759B10537602230A4B5520551 /* 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"; + }; + BC_606DC3CBE672B2D9CA4B68FF6F55762D /* 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"; + }; + BC_6396C78E99C21A774B9819DC09D88BD7 /* 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"; + }; + BC_63E4D52E21696EFA858D20EA01500612 /* 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"; + }; + BC_656BA4FF26F3FB2ECFA5F81D7E133C94 /* 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"; + }; + BC_679AB0D3CA0237CCB4B711609C0CB16A /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + BC_6851DF4113AFF271AA5DD6D587181A03 /* 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_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = "Production Release"; + }; + BC_689C05D134F6C4AB2A86666C7C2D1E8F /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Staging Release"; + }; + BC_69E8021CB05224B9CAC27F6AFA1763CA /* 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"; + }; + BC_6A4D0B334934E5E4901A4164AD2DF70A /* 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"; + }; + BC_6D1ED651D660692438EF3196506DC5AD /* 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"; + }; + BC_6EDDF7399F4EE2E8226F9D006C31ACB1 /* 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"; + }; + BC_71D19FC08A12CCAB1A85C7A5320A451A /* 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"; + }; + BC_724E9BA97FC0605F596460587FFD4C61 /* 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"; + }; + BC_7477F8344D6D7313C39D897C1864F1B7 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; @@ -3149,7 +3254,222 @@ }; name = "Test Release"; }; - 787DD7CC61878131127305CB1AB42E45 /* Test Debug */ = { + BC_7527094FD7492E6A964EC95E7378EF22 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + BC_791A2E3F88BE34E647BEE192E06BBA74 /* 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"; + }; + BC_7A2C8B05671807E16D816BD7F0436418 /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + BC_7BA9BA11D163D5F132FE6FFBA4DA1AB8 /* 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"; + }; + BC_7D0687E6BFF4B05D03341A00447B5070 /* 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"; + }; + BC_80331E927C4BB7E48B375DB00FD90281 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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"; + }; + BC_80FA279C7B3455A79612ECAB12C9E8F6 /* 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"; + }; + BC_833320F190FC427049CDF16E1B1AF316 /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Test Release"; + }; + BC_83922E2AEA387FB9ABF402C3F401DBA1 /* 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"; + }; + BC_8433EE3901A89DD2CDDE9F61906433E5 /* 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"; + }; + BC_853248A59437336C149C6DD8E6E4A208 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Production Debug"; + }; + BC_85A9D050B594B6F44602E90470E75818 /* 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"; + }; + BC_8624FCCF5B865B80E0B21BA20FA0FAC5 /* 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"; + }; + BC_865AB65A39A201C7BF448737D287EF85 /* 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"; + }; + BC_874C935D654D12F1F106CBEFBC4D2074 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3172,20 +3492,40 @@ TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Debug"; + name = "Staging Debug"; }; - 797F51DAE74B0206B1FB49EFDC36E882 /* Production Debug */ = { + BC_8895B9B729A8000331A682AF912CA229 /* 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; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Production Debug"; + name = "Staging Debug"; }; - 7989C422622E5F667D5D91F93C12621C /* Test Debug */ = { + BC_88D810589CFF611B0D20C0CB47822274 /* 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"; + }; + BC_89C8C1848F2559C9E46F22CB83CDB25A /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3204,51 +3544,37 @@ TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Debug"; + name = "Staging Release"; }; - 7E3E147996410A7F244FA4C20E212C42 /* Production Release */ = { + BC_904676A8DD86F548E50090FAA97FD9E1 /* 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"; + MY_SETTING = hello; }; name = "Production Release"; }; - 7F42FA78F9209A1EA4BE36ECC88B48DA /* Test Release */ = { + BC_9081CEAEC2FCC555B0BFC28B4EEDF0D6 /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - INFOPLIST_FILE = App_macOS/Info.plist; + 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"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-macOS"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-macOS"; + PRODUCT_NAME = Framework2; SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Release"; + name = "Staging Release"; }; - 812AF666AD151E9D5287EC568E17114F /* Production Debug */ = { + BC_917ABD477C99455FF6BE1A89107FDEC9 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -3257,36 +3583,63 @@ 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"; - }; - 8605D350B1463319F76600AD82025190 /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); - 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"; + 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"; + }; + BC_919006DE8A7D104D16D1D4C0AB2CC241 /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Staging Release"; + }; + BC_9360F45D8F5B06962ACEBF423299C71B /* 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"; + }; + BC_93685F04BC9D8657E5D7B62B22E043AF /* Staging Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = App_iOS; }; - name = "Production Release"; + name = "Staging Release"; }; - 86078CF18D4E8E2A296357BBD43BB418 /* Staging Debug */ = { + BC_96931434222054E6D7469B6B4EC67E87 /* Staging Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -3346,30 +3699,135 @@ }; name = "Staging Debug"; }; - 860C0A667616D8C33213E17E6B7FC967 /* Staging Release */ = { + BC_98CCC502104C412E1F48BB2F610EA45E /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", - ); - INFOPLIST_FILE = App_iOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.project.app; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-Swift"; SDKROOT = iphoneos; + SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; name = "Staging Release"; }; - 88755377456A33C84C2CDA0C44A6A61A /* Production Release */ = { + BC_9B4D15D591EA1FDE03F33A0EE5B01DAB /* 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"; + }; + BC_9CAC5683B65F9EA32F4A78810EAE488B /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + INFOPLIST_FILE = "IMessage MessagesExtension/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"; + }; + BC_9CDD286FAE4CE2FC296246C95A178023 /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + BC_9EA5ADC667D6445EB2976A3CA508E70D /* 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"; + }; + BC_9F1E5E527BE355504381023DED9562C9 /* 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"; + }; + BC_9F549905032A4927CF6B843899EF5775 /* 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"; + }; + BC_A3FC5819178DDC45D4D2249ECCCA158D /* 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"; + }; + BC_A46551B496D75A9F6D5FF83C2308DC79 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -3383,429 +3841,9 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Production Release"; - }; - 8946521E677C9578763AF0CAA5650B6E /* 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"; - }; - 8A20B26D66C3C3E2B0C19F697723BF52 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - "\"Vendor\"", - ); - 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"; - }; - 8A3DFEC561EA277BC662D7722D957AF7 /* 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"; - }; - 8CBB1A4C1C82E758EB6AF90A77EAED82 /* 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"; }; - 8D88F6B294E0A440C7E8DCFCC8FD89C6 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - 8DAE6E9C2FA87A76A1FCCFABD30ADB1C /* 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"; - }; - 8E8AE92D9637D33B3BA21DD3A4819647 /* 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"; - }; - 8EB82130053C36429A3383113E7E4C52 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - 8EBAD5F0051E7CC4CB35D6D849C46F80 /* 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"; - }; - 9163A49EEE507A13BD6BB29DE77C5AEB /* 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 = 4.0; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = "Production Debug"; - }; - 919E11B8D5FA5EE79F9312E6467F574E /* 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"; - }; - 9450C1BF180480F99BCF85B483F6CB9A /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Production Release"; - }; - 953F56182B4014BC2431B0C3BC8C6116 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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"; - }; - 9846B0E883E03113D131FFC4E4BA1F08 /* 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"; - }; - 9945D662313B9CDAC19EE8047DF3F96F /* 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"; - }; - 9AE7569A917E0E01254CCE04B73AF7EF /* 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"; - }; - 9B26DE732F220BC292EADF89DE60A554 /* Test Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C64021D20FD55B89CE1AFE88AE7C1CDD /* 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 = 4.0; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = "Test Debug"; - }; - 9D3303E44AE7082447202EA72DDBE833 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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"; - }; - A05A9454AB25290C357E4C2DDC4164C3 /* 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"; - }; - A245D8EE9B5EE2DC9F08D3E480476D6B /* Staging Release */ = { + BC_A61B5D8B6C38C2B4C738A48343FB4CDA /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -3857,245 +3895,18 @@ }; name = "Staging Release"; }; - A28E48690DF1F007ADE74AF8232F9936 /* Production Release */ = { + BC_ACF9A90E6BEFB16076EE5B78A3711D41 /* 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 = "Production Release"; - }; - A2FF3320D39C5C2078C7B71ECD03AEF0 /* 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_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS"; PRODUCT_NAME = StaticLibrary_ObjC; - SDKROOT = macosx; - SKIP_INSTALL = YES; - }; - name = "Production Debug"; - }; - A3BBDD580918C4146F640B3D5BECDE3A /* 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"; - }; - A6191A82E89AAE95FF0927ADC4CED07C /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - A94D9A8E6B3EC8B43280005AA5CA08C5 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - AB6DE922A459F5FD497E4A88028D774F /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - AC0BADE62931604AA108798EB524D47A /* 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"; - }; - AE20EE3DA3CAF7CF656625BC1104E356 /* 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"; - }; - AEC12413C878641363A9F9D8159AFAFD /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Staging Release"; - }; - B1E2C4D4695C5EF681BF34BD6414FFD9 /* 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"; }; - B524E0A2A955DEAE9EA8A773C63AB9AC /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - MY_SETTING = hello; - }; - name = "Test Release"; - }; - B5ED36F7268D18E542F85A14D09E1740 /* 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"; - }; - B6B5C9184CEE823626CCCC86A8CD9AB0 /* Production Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - B7022F6F63AADF6396ED13F7B439FD4A /* Production Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - B84D4575BDB10CC7877B363EE9AB4333 /* 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"; - }; - B93A0939BE7361F012B34296B0258492 /* 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"; - }; - BAC461FFB8CD5E0FBEF317CF56AE0847 /* Test Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Test Debug"; - }; - BC10D77B329054451FCFC1862EF230EA /* 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"; - }; - BEA623C6A5A8AA7DFF3972CFA7FDB1FF /* Production Release */ = { + BC_AE11EA7D0985D3AD750BDB7F362B6726 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -4116,124 +3927,9 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Production Release"; - }; - C1B80F9BE08D4FB9503CA748D889BCB6 /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Staging Debug"; - }; - C6C03D2CBD5E5EAC3FDBE9BB772D405D /* 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"; - }; - C715D4C7279C44607E66D74085D7E2C3 /* Test Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - 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 = 3.0; - }; - name = "Test Release"; - }; - C964103E2697EFFCBB8E04FAD89BCB2A /* Staging Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - 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"; - }; - CA1133BA3266746EA55DC6CA3BB15C79 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = IMessage/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"; - }; - CCE426FC0F771BD9F1046D237AC09BEA /* 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"; - }; - CF4A979E679D2D7B6180C42079630DF7 /* 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"; }; - D135C764212A868AB1BFA59D08477749 /* Production Release */ = { + BC_B0011E28621230A66DBE3070C59108D4 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -4258,19 +3954,18 @@ }; name = "Production Release"; }; - D298C10A9A216C710978B9EC85B4FAB0 /* Test Release */ = { + BC_B19AA9EDCE45F13CA00B669DADF86395 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { + INFOPLIST_FILE = IMessage/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS"; - PRODUCT_NAME = StaticLibrary_ObjC; + PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp; SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = "Test Release"; + name = "Test Debug"; }; - D30FF0A51CA7720140967225CEB93621 /* Production Release */ = { + BC_B2819DF0E90F3F3341B2B3A828778827 /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; @@ -4285,32 +3980,119 @@ SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; }; - name = "Production Release"; + name = "Production Debug"; }; - D517F3468BE1A7136FA1FCBBEF7555F1 /* Staging Debug */ = { + BC_B290BF236EBF078304DB54D0CE99B85A /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { - INFOPLIST_FILE = IMessage/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp; + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + BC_B2EA5B6CE006C3C8DB5A6AC3A2C78E59 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + MY_SETTING = hello; + }; + name = "Test Debug"; + }; + BC_B3B360DE1D00D5D3DE54D0467886EEDD /* 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"; + }; + BC_B3CC7B17DDF2C081536FC92CF25981BD /* 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"; + }; + BC_B44CB3772859FEECDAFDCD4B2FFA2E26 /* 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"; + }; + BC_B52BB5E51BF8953D7DA1F42BA3803D2E /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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"; + }; + BC_B6F81B24E04D91DFE5F36AAF99FCFA5D /* 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"; }; - D7F70F65A8FD6B7F2190B24FB308C9D9 /* 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"; - }; - D9FDA7C09DC2A6CD9C4249D09843E029 /* Test Release */ = { + BC_BBA77AE6DA089F82907B6DFC338A6F37 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -4332,13 +4114,24 @@ TARGETED_DEVICE_FAMILY = 4; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Release"; + name = "Test Debug"; }; - DA149E9976E5303041A1B63EE671FA94 /* Test Release */ = { + BC_BC88A6EBF48BB9B821C5B8001678AC2E /* 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"; + }; + BC_BFFBE0C278E007152F06241181A3457E /* Production Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -4346,23 +4139,206 @@ 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"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework2-tvOS"; PRODUCT_NAME = Framework2; - SDKROOT = macosx; + SDKROOT = appletvos; SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Test Release"; + name = "Production Debug"; }; - DC7B7968E87668181B3ECAB77307359B /* Production Debug */ = { + BC_C07EA83764F4BDE5F0059DC49805D92B /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { MY_SETTING = hello; }; + name = "Staging Release"; + }; + BC_C38327E8FC090ADC83AA700666F26B0E /* 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"; }; - DCF4BAB4108BB4A76F2BFDF0FC92BB42 /* Production Debug */ = { + BC_C507150F28216FCF1029C0C97677DBE5 /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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"; + }; + BC_C5288877BBCE2FA6BA4D3FACBFF3BA7F /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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"; + }; + BC_C60CBFC5B28D2B8906EAF4D4D3C81597 /* 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"; + }; + BC_C7D3757F2E3D9743FDC0CA97F807919C /* Production Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", + ); + 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"; + }; + BC_C9DCD449062A9160795D3701B9D2286E /* 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"; + }; + BC_CD673788A57DF4BFEB50B4F1581C742E /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = IMessage/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"; + }; + BC_CECBF50DBAC4771C31C83814C20D07B2 /* Test Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", + ); + 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"; + }; + BC_D02EB4360B13F2E445DB48AD85FDFCE6 /* 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"; + }; + BC_D4F031939A239C28219748EFD83D30AA /* 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"; + }; + BC_D4FC53C776F8F2638D1D294F70517658 /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -4380,95 +4356,86 @@ TARGETED_DEVICE_FAMILY = 4; VERSIONING_SYSTEM = "apple-generic"; }; - name = "Production Debug"; + name = "Test Debug"; }; - DDEA2A1A237A241528F5692D8DA284AC /* 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"; - }; - DF95A0DC831A928E81362FACABB65D0C /* Test Release */ = { + BC_DA0BB134B708A4D257F250D3FA757711 /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-tvOS"; + PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-iOS"; PRODUCT_NAME = StaticLibrary_ObjC; - SDKROOT = appletvos; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = "Test Release"; }; - E22E8833641D3779586C0B16FA32A016 /* Staging Debug */ = { + BC_DA5027F5182F7A40FB94FD282B57BC3E /* Staging Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; - INFOPLIST_FILE = "IMessage MessagesExtension/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"; - }; - E3CDCDB9EED4CB38950534D8D9E521B2 /* 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"; - }; - E6B9E89A82F37BBE7118A108CDD2FA96 /* Staging Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", + "\"Vendor\"", ); - 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"; + 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"; }; - E86C0E6E6FD6A5052CFD159F134F7C0C /* Test Release */ = { + BC_DD94802386549D49D781D0BF313007D4 /* 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"; + }; + BC_DF27A9642DF4C47995FB0B0F4F6C2A98 /* 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"; + }; + BC_E254C909463A5ADF59BD226772066ADA /* Test Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -4485,7 +4452,56 @@ }; name = "Test Release"; }; - E8F27F54DBBD16F2E6BDD29ECD13EA30 /* Test Debug */ = { + BC_E52BEBA72F64BEC8F09733B49F7BA392 /* Production Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Production Release"; + }; + BC_E6F51B0AAB0A7B33D902BD20A14E355C /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + name = "Staging Debug"; + }; + BC_E8AE376BBD8C86CFB51C9D5A490FDDBE /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + 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"; + }; + BC_E90B182AC1AF70BB78598DADECF9254B /* Test Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "com.project.StaticLibrary-ObjC-watchOS"; @@ -4496,8 +4512,132 @@ }; name = "Test Debug"; }; - EC28E440C15EE7F1FB7DB5DCE6730C35 /* Test Release */ = { + BC_E9A1D87B4DB80BCC61D6B5F59D81865D /* 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"; + }; + BC_F1A1A29B491BDE527B8095C7420311D9 /* Test Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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 = 3.0; + }; + name = "Test Debug"; + }; + BC_F7D27DC0894036434C159F86616307EF /* 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"; + }; + BC_F81BA31D0E5421AC0DDFB2D799C84E2E /* 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"; + }; + BC_F947CECE4A424652DB631A640F423950 /* Staging Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + 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"; + }; + BC_F9F3A5E30D3C940B7D85E1AE59A6B3D8 /* 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"; + }; + BC_FAA6D28DC24848759E58A2552BD37359 /* 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"; + }; + BC_FBF3614A1E9EDDE43929E81FDBD8B4B8 /* Test Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FR_22A431E337CB22CE70E39135206EDE27 /* config.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_ID_SUFFIX = .test; @@ -4529,37 +4669,34 @@ 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; + 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_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; - VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; - name = "Test Release"; + name = "Test Debug"; }; - EF427E493E485ED823B46796B5706EE0 /* 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"; - }; - F17C47BA1D1F10D90B7B92A641698D4B /* Staging Release */ = { + BC_FF1009503385A37130A5A131E70F0B18 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; @@ -4569,45 +4706,9 @@ SDKROOT = macosx; SKIP_INSTALL = YES; }; - name = "Staging Release"; + name = "Production Release"; }; - F554EE27D3B2F59E7560BC2EA81F0126 /* 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"; - }; - F62A9809FA0E2F5B8F48BDA7460B5385 /* 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"; - }; - F6BF7393A0C1EF6980A53546CE6F7AB9 /* Staging Debug */ = { + BC_FF3600FA7FDB235869A6CB7BBDBD8C86 /* Production Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_IDENTITY = ""; @@ -4618,437 +4719,339 @@ 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_BUNDLE_IDENTIFIER = "com.project.Framework2-watchOS"; PRODUCT_NAME = Framework2; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = "Staging Debug"; - }; - FB96519CA3C8DDAEBFFFE6D0143547C3 /* 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"; - }; - FD6B56D66F61D5D15F85BF3A793A4737 /* 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"; - }; - FF1FD074D08FB642C47833A35CF9A077 /* 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"; }; - FF20BE3E1E930A3CDD0440B465F82FD9 /* 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_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - VALIDATE_PRODUCT = YES; - WATCHOS_DEPLOYMENT_TARGET = 4.0; - }; - name = "Production Release"; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0AA719054B034D653457F3861CE722A9 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = { + CL_0562279D56EF60E8CCC0973D2C663637 /* Build configuration list for PBXNativeTarget "Framework2_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 53FA2A6BC1E12907C7E04A1686CD2235 /* Production Debug */, - D135C764212A868AB1BFA59D08477749 /* Production Release */, - 679FF6873FEB353F21917C19BCC838E8 /* Staging Debug */, - 676171EF49F08996E70CF35B0210B3EE /* Staging Release */, - 3E086BCE5D760D61BB3D412C9F0B4BDA /* Test Debug */, - 1D9EB22E5DBAB4FA60986D9F7D4EB36B /* Test Release */, + BC_F9F3A5E30D3C940B7D85E1AE59A6B3D8 /* Production Debug */, + BC_4346300D78CE0EC28B467470E8C4DB2E /* Production Release */, + BC_DD94802386549D49D781D0BF313007D4 /* Staging Debug */, + BC_89C8C1848F2559C9E46F22CB83CDB25A /* Staging Release */, + BC_54F3754420D0F7418AB42235B1D71751 /* Test Debug */, + BC_3134697E7D6C32A5C4376C581C189D6B /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 0D5965C1A1D5123D687DA32AC9B957F8 /* Build configuration list for PBXProject "Project" */ = { + CL_11BB9F4DF26D98C0A2C8E1668356269F /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9163A49EEE507A13BD6BB29DE77C5AEB /* Production Debug */, - FF20BE3E1E930A3CDD0440B465F82FD9 /* Production Release */, - 86078CF18D4E8E2A296357BBD43BB418 /* Staging Debug */, - A245D8EE9B5EE2DC9F08D3E480476D6B /* Staging Release */, - 9B26DE732F220BC292EADF89DE60A554 /* Test Debug */, - EC28E440C15EE7F1FB7DB5DCE6730C35 /* Test Release */, + BC_032D44BB36CD1AC13FFFAC654631D432 /* Production Debug */, + BC_B0011E28621230A66DBE3070C59108D4 /* Production Release */, + BC_A3FC5819178DDC45D4D2249ECCCA158D /* Staging Debug */, + BC_0B57E3E0E8C194293ABFEEF97F104F30 /* Staging Release */, + BC_0B1CBABAB9579A064729249F5E1B7B84 /* Test Debug */, + BC_1603C1C58A4D6AE1BD0707D13D2C8F44 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_159255858B3EEC02844A3059326A6B93 /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_606DC3CBE672B2D9CA4B68FF6F55762D /* Production Debug */, + BC_9B4D15D591EA1FDE03F33A0EE5B01DAB /* Production Release */, + BC_5CA18B8A4079FC28EF3A05BDC5E4D501 /* Staging Debug */, + BC_98CCC502104C412E1F48BB2F610EA45E /* Staging Release */, + BC_5996DB19FBFE69C54C671E0624798C4B /* Test Debug */, + BC_541CCB32267A890B3BABCE62FFE461E2 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_289609080F2D20D506C8A587BC92807B /* Build configuration list for PBXNativeTarget "Framework2_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_656BA4FF26F3FB2ECFA5F81D7E133C94 /* Production Debug */, + BC_5D7B920759B10537602230A4B5520551 /* Production Release */, + BC_27A94FA771ABEE02868BCED0690C89E1 /* Staging Debug */, + BC_9081CEAEC2FCC555B0BFC28B4EEDF0D6 /* Staging Release */, + BC_B44CB3772859FEECDAFDCD4B2FFA2E26 /* Test Debug */, + BC_22D59B57A805B62A266F803CCDD49C26 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_2E30D27084B352548CCAA3500158519B /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_0E104167F96EA087A23DFBE2430D5612 /* Production Debug */, + BC_6EDDF7399F4EE2E8226F9D006C31ACB1 /* Production Release */, + BC_56B4C0BD8630088AECC29D1D7064530F /* Staging Debug */, + BC_F7D27DC0894036434C159F86616307EF /* Staging Release */, + BC_E90B182AC1AF70BB78598DADECF9254B /* Test Debug */, + BC_ACF9A90E6BEFB16076EE5B78A3711D41 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_333C6C3162FB671343E806257FB2A411 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_B2819DF0E90F3F3341B2B3A828778827 /* Production Debug */, + BC_4AC83F754F5BB02C3019E8AE2303E966 /* Production Release */, + BC_6396C78E99C21A774B9819DC09D88BD7 /* Staging Debug */, + BC_9EA5ADC667D6445EB2976A3CA508E70D /* Staging Release */, + BC_0198386D4EF48A4C053820EEEE1936CB /* Test Debug */, + BC_E9A1D87B4DB80BCC61D6B5F59D81865D /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_3ABBEC1A6EFC98F40894F5E4769650EF /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_3D9C1A83637AB10D5FFC5D4F8331091E /* Production Debug */, + BC_679AB0D3CA0237CCB4B711609C0CB16A /* Production Release */, + BC_9CAC5683B65F9EA32F4A78810EAE488B /* Staging Debug */, + BC_2F352436A75D33C6D3337012367BE90C /* Staging Release */, + BC_7527094FD7492E6A964EC95E7378EF22 /* Test Debug */, + BC_7477F8344D6D7313C39D897C1864F1B7 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_3BB54CFB2F2EFE7302C0B0709BD0AE04 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_5CBE4F01DBB084436375039EFEDDE6E4 /* Production Debug */, + BC_FF1009503385A37130A5A131E70F0B18 /* Production Release */, + BC_53BBB90244275C55B50604E0DC26809E /* Staging Debug */, + BC_F81BA31D0E5421AC0DDFB2D799C84E2E /* Staging Release */, + BC_63E4D52E21696EFA858D20EA01500612 /* Test Debug */, + BC_8433EE3901A89DD2CDDE9F61906433E5 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_674C71F7D7B679C67A944F0110840758 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_FAA6D28DC24848759E58A2552BD37359 /* Production Debug */, + BC_5BC104FB79C437B79CC9D676B3B964D2 /* Production Release */, + BC_9F1E5E527BE355504381023DED9562C9 /* Staging Debug */, + BC_C60CBFC5B28D2B8906EAF4D4D3C81597 /* Staging Release */, + BC_BBA77AE6DA089F82907B6DFC338A6F37 /* Test Debug */, + BC_0271561C28AF4A74C6924A2187BC8487 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_6993244897DFCCF1F61A6136FDBE3C01 /* Build configuration list for PBXNativeTarget "XPC Service" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_9F549905032A4927CF6B843899EF5775 /* Production Debug */, + BC_C9DCD449062A9160795D3701B9D2286E /* Production Release */, + BC_4F7A9BAD8AB16D47ECA510689FB5F899 /* Staging Debug */, + BC_11CBEB05340DE3C8F396B359A9144039 /* Staging Release */, + BC_D4F031939A239C28219748EFD83D30AA /* Test Debug */, + BC_80FA279C7B3455A79612ECAB12C9E8F6 /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_7A3206BF9A92D4552AE40D148897BB3E /* Build configuration list for PBXNativeTarget "Framework_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_5D33E2C3F29594425D03B339108871CF /* Production Debug */, + BC_58D5B708B08789E2DFD4D60A906AAA6E /* Production Release */, + BC_120D6C5C7E4D1D6566CBD71E11C3DF37 /* Staging Debug */, + BC_0D96F61E117D6A8D2353B0E7CB445AEA /* Staging Release */, + BC_5A05C344BCA2E54DFF945E68ECC21064 /* Test Debug */, + BC_6D1ED651D660692438EF3196506DC5AD /* Test Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ""; + }; + CL_85167C2DED9F1F2F7D5162C1DD252426 /* Build configuration list for PBXProject "Project" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC_209579D4C144FB697FDD46843485CC6A /* Production Debug */, + BC_6851DF4113AFF271AA5DD6D587181A03 /* Production Release */, + BC_96931434222054E6D7469B6B4EC67E87 /* Staging Debug */, + BC_A61B5D8B6C38C2B4C738A48343FB4CDA /* Staging Release */, + BC_FBF3614A1E9EDDE43929E81FDBD8B4B8 /* Test Debug */, + BC_19E3B21D0DA59BAF1B99899A35858D52 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Production Debug"; }; - 13FC8BD638A49F585CF46B85EF6E6E4E /* Build configuration list for PBXNativeTarget "App_watchOS" */ = { + CL_89763567DCA601C83E4C78A9917D81AD /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 617BB41EB582FD2294AD3F0EF67FF86C /* Production Debug */, - 17DD6C54D892A228DC61C020225C9051 /* Production Release */, - C1B80F9BE08D4FB9503CA748D889BCB6 /* Staging Debug */, - AEC12413C878641363A9F9D8159AFAFD /* Staging Release */, - BAC461FFB8CD5E0FBEF317CF56AE0847 /* Test Debug */, - C715D4C7279C44607E66D74085D7E2C3 /* Test Release */, + BC_5901F7B4A1799821B3061B5EA7C4A033 /* Production Debug */, + BC_E52BEBA72F64BEC8F09733B49F7BA392 /* Production Release */, + BC_E6F51B0AAB0A7B33D902BD20A14E355C /* Staging Debug */, + BC_689C05D134F6C4AB2A86666C7C2D1E8F /* Staging Release */, + BC_A46551B496D75A9F6D5FF83C2308DC79 /* Test Debug */, + BC_833320F190FC427049CDF16E1B1AF316 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 330B76D4702856DD55067456FD7A4F4A /* Build configuration list for PBXNativeTarget "iMessageExtension" */ = { + CL_91682ADED17A2C81A700A67F5D70BA1F /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B6B5C9184CEE823626CCCC86A8CD9AB0 /* Production Debug */, - B7022F6F63AADF6396ED13F7B439FD4A /* Production Release */, - E22E8833641D3779586C0B16FA32A016 /* Staging Debug */, - 8EB82130053C36429A3383113E7E4C52 /* Staging Release */, - A94D9A8E6B3EC8B43280005AA5CA08C5 /* Test Debug */, - 78064626756CECDA6038E7E6CF655FCD /* Test Release */, + BC_C38327E8FC090ADC83AA700666F26B0E /* Production Debug */, + BC_0D53E4051E21792867D5FA4A11B751AB /* Production Release */, + BC_69E8021CB05224B9CAC27F6AFA1763CA /* Staging Debug */, + BC_9360F45D8F5B06962ACEBF423299C71B /* Staging Release */, + BC_791A2E3F88BE34E647BEE192E06BBA74 /* Test Debug */, + BC_46EDEC047C02E1E271BADF861EFB2F8D /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 4DF366239AC6F6E9EE59EEA525319ABA /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = { + CL_9FEF3E411E281B1820B2B067FC1C1B85 /* Build configuration list for PBXNativeTarget "Framework_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 600D2124C2A4443FF163E6E3B501E909 /* Production Debug */, - 88755377456A33C84C2CDA0C44A6A61A /* Production Release */, - 71D8747E9D932CC57F5C7689CDAB915E /* Staging Debug */, - E6B9E89A82F37BBE7118A108CDD2FA96 /* Staging Release */, - 043A0C042785957178A6693CFA0E1AD6 /* Test Debug */, - 01DBD7FCC87C5676808C8DC642E5076D /* Test Release */, + BC_724E9BA97FC0605F596460587FFD4C61 /* Production Debug */, + BC_D02EB4360B13F2E445DB48AD85FDFCE6 /* Production Release */, + BC_874C935D654D12F1F106CBEFBC4D2074 /* Staging Debug */, + BC_6A4D0B334934E5E4901A4164AD2DF70A /* Staging Release */, + BC_71D19FC08A12CCAB1A85C7A5320A451A /* Test Debug */, + BC_917ABD477C99455FF6BE1A89107FDEC9 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 526C1EB2E50CDBABCB448EE2FDF2E5D8 /* Build configuration list for PBXNativeTarget "XPC Service" */ = { + CL_A55E6C4018D2631D41C660DBF2113765 /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 76B45660690ECDC9D44E1D9957AF5029 /* Production Debug */, - 8EBAD5F0051E7CC4CB35D6D849C46F80 /* Production Release */, - 41AE4D3B9E1B4B940169B84E3BA5CCE7 /* Staging Debug */, - 3B64F4C26A564FBA69A8B5DD22A9CF1E /* Staging Release */, - CF4A979E679D2D7B6180C42079630DF7 /* Test Debug */, - 8946521E677C9578763AF0CAA5650B6E /* Test Release */, + BC_BFFBE0C278E007152F06241181A3457E /* Production Debug */, + BC_24042033AF9D3DEDAD53ACAF1C2BB0B2 /* Production Release */, + BC_88D810589CFF611B0D20C0CB47822274 /* Staging Debug */, + BC_DF27A9642DF4C47995FB0B0F4F6C2A98 /* Staging Release */, + BC_313481FFED1411A2B5969B70EBA94383 /* Test Debug */, + BC_8624FCCF5B865B80E0B21BA20FA0FAC5 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 59C3AA3AEA5802DA17DF9B42615D9B6B /* Build configuration list for PBXNativeTarget "iMessageApp" */ = { + CL_AA475AE6741D5744A91627E7FAF4C986 /* Build configuration list for PBXNativeTarget "iMessageApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - A6191A82E89AAE95FF0927ADC4CED07C /* Production Debug */, - 48C7C82163507BFDDBBE9640C56C4384 /* Production Release */, - D517F3468BE1A7136FA1FCBBEF7555F1 /* Staging Debug */, - CA1133BA3266746EA55DC6CA3BB15C79 /* Staging Release */, - AB6DE922A459F5FD497E4A88028D774F /* Test Debug */, - 8D88F6B294E0A440C7E8DCFCC8FD89C6 /* Test Release */, + BC_50C3D866E3B57D83181A8F04E553F557 /* Production Debug */, + BC_CD673788A57DF4BFEB50B4F1581C742E /* Production Release */, + BC_5951C33138E508D3E6CA672980D5F2B6 /* Staging Debug */, + BC_93685F04BC9D8657E5D7B62B22E043AF /* Staging Release */, + BC_B19AA9EDCE45F13CA00B669DADF86395 /* Test Debug */, + BC_7A2C8B05671807E16D816BD7F0436418 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 5B1322FEBB7A746BD1BF9227D37A7421 /* Build configuration list for PBXNativeTarget "App_iOS" */ = { + CL_B523BC91AF70F483BF998E2BA8DD6669 /* Build configuration list for PBXAggregateTarget "SuperTarget" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1B04852DE1BAC9963EC108C9CF616C68 /* Production Debug */, - BEA623C6A5A8AA7DFF3972CFA7FDB1FF /* Production Release */, - 5E2F1BACE5D532159E4E4CDEA7781A53 /* Staging Debug */, - 860C0A667616D8C33213E17E6B7FC967 /* Staging Release */, - 042BBE336DA13DF962EA6C453B022AF8 /* Test Debug */, - 8A20B26D66C3C3E2B0C19F697723BF52 /* Test Release */, + BC_1841B61F3F85EC24C4AACBC5C025BD08 /* Production Debug */, + BC_904676A8DD86F548E50090FAA97FD9E1 /* Production Release */, + BC_0E087681CE92CC2069F9E562ECC9FD23 /* Staging Debug */, + BC_C07EA83764F4BDE5F0059DC49805D92B /* Staging Release */, + BC_B2EA5B6CE006C3C8DB5A6AC3A2C78E59 /* Test Debug */, + BC_57D3973CA01D421550D834AFA79D2B4B /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 6D4D2839561B5E9CF0D2C239573C2178 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */ = { + CL_C50D7BB75115E8561A0975DE1B65E088 /* Build configuration list for PBXNativeTarget "App_watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - DCF4BAB4108BB4A76F2BFDF0FC92BB42 /* Production Debug */, - 412CC38BB25D52A84D6951A85EF344DF /* Production Release */, - 2DD3A646E69429A5AF67450B9CB2FCB2 /* Staging Debug */, - 336426B8AB782E9CBB9AB6471046BF19 /* Staging Release */, - 54F359EE934A693B2193AAEC11473AA8 /* Test Debug */, - 8DAE6E9C2FA87A76A1FCCFABD30ADB1C /* Test Release */, + BC_853248A59437336C149C6DD8E6E4A208 /* Production Debug */, + BC_42C4FEAD23C2FE1A906F4D37F43182AB /* Production Release */, + BC_3CCE54849732E01493DDDB7D86E033D4 /* Staging Debug */, + BC_919006DE8A7D104D16D1D4C0AB2CC241 /* Staging Release */, + BC_F1A1A29B491BDE527B8095C7420311D9 /* Test Debug */, + BC_16E1FCDA9DB6E70091B54603E4E6F58B /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 7523052A5C96494802A0431E05947F67 /* Build configuration list for PBXLegacyTarget "Legacy" */ = { + CL_C7673A8886407721BA5BFA1B18F184D4 /* Build configuration list for PBXNativeTarget "App_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2EABDD2A3CB1E85833E8A1555AE92380 /* Production Debug */, - A28E48690DF1F007ADE74AF8232F9936 /* Production Release */, - 6FFE1C21D2525DBB6DFB640EA7DC613A /* Staging Debug */, - 6E76891FB5D6528F7679C4029CEA9DDB /* Staging Release */, - FD6B56D66F61D5D15F85BF3A793A4737 /* Test Debug */, - B1E2C4D4695C5EF681BF34BD6414FFD9 /* Test Release */, + BC_C7D3757F2E3D9743FDC0CA97F807919C /* Production Debug */, + BC_1CF7F7BC6E19981DCBBFE6FE2D9FCB62 /* Production Release */, + BC_161B10E65E0BE143A17EADFA5EE88B3D /* Staging Debug */, + BC_DA5027F5182F7A40FB94FD282B57BC3E /* Staging Release */, + BC_AE11EA7D0985D3AD750BDB7F362B6726 /* Test Debug */, + BC_CECBF50DBAC4771C31C83814C20D07B2 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 79A5A52B3AEBCBFB7ED1858548D1282A /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */ = { + CL_D72660834ED9ED4EB0E973ABC256E014 /* Build configuration list for PBXNativeTarget "App_macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - F62A9809FA0E2F5B8F48BDA7460B5385 /* Production Debug */, - BC10D77B329054451FCFC1862EF230EA /* Production Release */, - 12CA842D6B2FF31191FE1307FCD9D7EE /* Staging Debug */, - 5C0EB6B29716576F8BEC3FCC79F4761A /* Staging Release */, - 8CBB1A4C1C82E758EB6AF90A77EAED82 /* Test Debug */, - D298C10A9A216C710978B9EC85B4FAB0 /* Test Release */, + BC_80331E927C4BB7E48B375DB00FD90281 /* Production Debug */, + BC_C5288877BBCE2FA6BA4D3FACBFF3BA7F /* Production Release */, + BC_F947CECE4A424652DB631A640F423950 /* Staging Debug */, + BC_079D311B8C64F17C816583A1A4D84F42 /* Staging Release */, + BC_B52BB5E51BF8953D7DA1F42BA3803D2E /* Test Debug */, + BC_C507150F28216FCF1029C0C97677DBE5 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 837376727FE2CF4AE46785F0E9561ED1 /* Build configuration list for PBXNativeTarget "App_macOS" */ = { + CL_DB66C428B606518C825ECFF73A5EF059 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 182E0CC8A3915AEB912F5D1291301A43 /* Production Debug */, - 07E1360852ED801B9A2C191311650CB6 /* Production Release */, - 9D3303E44AE7082447202EA72DDBE833 /* Staging Debug */, - 033BB6B0853606FB2D2FD4F80238B6C0 /* Staging Release */, - 953F56182B4014BC2431B0C3BC8C6116 /* Test Debug */, - 7F42FA78F9209A1EA4BE36ECC88B48DA /* Test Release */, + BC_9CDD286FAE4CE2FC296246C95A178023 /* Production Debug */, + BC_291E5C210DD53C3B3A4C6057C2B9652A /* Production Release */, + BC_E8AE376BBD8C86CFB51C9D5A490FDDBE /* Staging Debug */, + BC_19CBA184C0BDC24CE3657C025A8FC279 /* Staging Release */, + BC_B290BF236EBF078304DB54D0CE99B85A /* Test Debug */, + BC_E254C909463A5ADF59BD226772066ADA /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 933D4300D58AA7B25E208357C65F2AD3 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */ = { + CL_E92E1636D45B284E44D38EB3EF7C98C9 /* Build configuration list for PBXNativeTarget "Framework2_watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 56663C3D4D239DB7132EFC6F4BD6931F /* Production Debug */, - 8605D350B1463319F76600AD82025190 /* Production Release */, - C964103E2697EFFCBB8E04FAD89BCB2A /* Staging Debug */, - 65444C57D9A364444BA7003179D5061D /* Staging Release */, - 5AA86BB667B6BB6A065CDC7A86358C06 /* Test Debug */, - E86C0E6E6FD6A5052CFD159F134F7C0C /* Test Release */, + BC_B3B360DE1D00D5D3DE54D0467886EEDD /* Production Debug */, + BC_FF3600FA7FDB235869A6CB7BBDBD8C86 /* Production Release */, + BC_85A9D050B594B6F44602E90470E75818 /* Staging Debug */, + BC_865AB65A39A201C7BF448737D287EF85 /* Staging Release */, + BC_D4FC53C776F8F2638D1D294F70517658 /* Test Debug */, + BC_83922E2AEA387FB9ABF402C3F401DBA1 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - 9BA95DBD7B862EE1F43DC68338281D0E /* Build configuration list for PBXNativeTarget "Framework_macOS" */ = { + CL_F6ECF2D45799DBBB48DE9AE80AC280AA /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 591C680E52370290108989EB469E5509 /* Production Debug */, - FF1FD074D08FB642C47833A35CF9A077 /* Production Release */, - E3CDCDB9EED4CB38950534D8D9E521B2 /* Staging Debug */, - 5A1D3DA3365EDDAF6EC275BEF2A939B0 /* Staging Release */, - 17F6FF338B0EDFF7796A8F04E3F3800F /* Test Debug */, - 239E8DC605456167C1F5A3E11E89E02E /* Test Release */, + BC_B3CC7B17DDF2C081536FC92CF25981BD /* Production Debug */, + BC_7D0687E6BFF4B05D03341A00447B5070 /* Production Release */, + BC_B6F81B24E04D91DFE5F36AAF99FCFA5D /* Staging Debug */, + BC_BC88A6EBF48BB9B821C5B8001678AC2E /* Staging Release */, + BC_1D9A30F2A4E9057FD8A7101D4AA4F47D /* Test Debug */, + BC_DA0BB134B708A4D257F250D3FA757711 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; }; - ABBCABD06AD7666C13DD9BAF0C16276E /* Build configuration list for PBXNativeTarget "Framework_iOS" */ = { + CL_F8A83116F913B5DD0538C3680E08BDDB /* Build configuration list for PBXLegacyTarget "Legacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9945D662313B9CDAC19EE8047DF3F96F /* Production Debug */, - 5F9AF0BD4959D01102D429D68A1AE409 /* Production Release */, - 5720F6E9771684E5729A08D75426C874 /* Staging Debug */, - AC0BADE62931604AA108798EB524D47A /* Staging Release */, - 787DD7CC61878131127305CB1AB42E45 /* Test Debug */, - B84D4575BDB10CC7877B363EE9AB4333 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - B2C7678C2E2663B0DB1ED71352D99426 /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_macOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A2FF3320D39C5C2078C7B71ECD03AEF0 /* Production Debug */, - 60521A88A3FF4EDF3DD3A4E909DB4541 /* Production Release */, - 5F2AF4A04FDD6171C4B13DBFE74F77AD /* Staging Debug */, - F17C47BA1D1F10D90B7B92A641698D4B /* Staging Release */, - A05A9454AB25290C357E4C2DDC4164C3 /* Test Debug */, - B93A0939BE7361F012B34296B0258492 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - B792E5189C47CA21F95A329FA1C05715 /* Build configuration list for PBXNativeTarget "Framework2_tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1B998C2AF9280CE3625E7DCBA5B62F6E /* Production Debug */, - 2B951E215B2D888141E1252E2FA1F2DF /* Production Release */, - F6BF7393A0C1EF6980A53546CE6F7AB9 /* Staging Debug */, - 263225267AC9E77B5610B7D31E71CB44 /* Staging Release */, - 3EC13048478BFF2EF5984AF7F98E93DD /* Test Debug */, - CCE426FC0F771BD9F1046D237AC09BEA /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - C6AB800DC544086FBA8F60B46D0000E8 /* Build configuration list for PBXNativeTarget "Framework2_iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 812AF666AD151E9D5287EC568E17114F /* Production Debug */, - 7E3E147996410A7F244FA4C20E212C42 /* Production Release */, - 9AE7569A917E0E01254CCE04B73AF7EF /* Staging Debug */, - 005BBEE3C0E483C0B46EFCCE3563F2E5 /* Staging Release */, - 7989C422622E5F667D5D91F93C12621C /* Test Debug */, - C6C03D2CBD5E5EAC3FDBE9BB772D405D /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CCF68725DCD5EF7FD03872D0B98C32F0 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F554EE27D3B2F59E7560BC2EA81F0126 /* Production Debug */, - 919E11B8D5FA5EE79F9312E6467F574E /* Production Release */, - 8A3DFEC561EA277BC662D7722D957AF7 /* Staging Debug */, - 0A20244EB4E72EC58117F028E72046EC /* Staging Release */, - 9846B0E883E03113D131FFC4E4BA1F08 /* Test Debug */, - D9FDA7C09DC2A6CD9C4249D09843E029 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - CDA4223FB9077220550DAC72871CFB38 /* Build configuration list for PBXNativeTarget "Framework2_macOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DDEA2A1A237A241528F5692D8DA284AC /* Production Debug */, - 1B9700E8063BFE2CBE2FB8B1EDB34253 /* Production Release */, - 8E8AE92D9637D33B3BA21DD3A4819647 /* Staging Debug */, - 0E98CA343910624717406D4EDFE7BB68 /* Staging Release */, - 4B5E0992A404F791F2CFFAD1C96F95E2 /* Test Debug */, - DA149E9976E5303041A1B63EE671FA94 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - D54A0CC77F5631F35C75FEA20D1BA43F /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_watchOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 797F51DAE74B0206B1FB49EFDC36E882 /* Production Debug */, - FB96519CA3C8DDAEBFFFE6D0143547C3 /* Production Release */, - 3BAD8F458B7F998E8BF6F3C7D2A8516A /* Staging Debug */, - 4B2E7C0E64CC8AE67BAE91B33EAFB6F9 /* Staging Release */, - E8F27F54DBBD16F2E6BDD29ECD13EA30 /* Test Debug */, - 5AFEBB1B2CFDA4E69B52143EF4C01713 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - DF19D3419A77EDFF6F8498EFC3E36048 /* Build configuration list for PBXAggregateTarget "SuperTarget" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC7B7968E87668181B3ECAB77307359B /* Production Debug */, - 9450C1BF180480F99BCF85B483F6CB9A /* Production Release */, - 073C2C693117E1D34E1B0F985E54181E /* Staging Debug */, - 42E41490B4F137D48214D74A60E82741 /* Staging Release */, - 1A086472EE7B5AD1BCC790833A32EEBD /* Test Debug */, - B524E0A2A955DEAE9EA8A773C63AB9AC /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - E5E32C1485A6F6887EA6CC53B4584F3E /* Build configuration list for PBXNativeTarget "StaticLibrary_ObjC_tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 16B8CDB44A6128CAA0F76CADB3C8666F /* Production Debug */, - D7F70F65A8FD6B7F2190B24FB308C9D9 /* Production Release */, - 3C145C72644EBBA1C6177D17710C9CD2 /* Staging Debug */, - 129A56DA11ACAC4A31B865C9DCBA1820 /* Staging Release */, - 4280A141F22CF2FEFA06373AEFFAAC0F /* Test Debug */, - DF95A0DC831A928E81362FACABB65D0C /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - F40A414D7A0A13368AC9FB64BA5C73AC /* Build configuration list for PBXNativeTarget "StaticLibrary_Swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AE20EE3DA3CAF7CF656625BC1104E356 /* Production Debug */, - 017D658B4ABE46C5A30A44E1EB610EEC /* Production Release */, - B5ED36F7268D18E542F85A14D09E1740 /* Staging Debug */, - A3BBDD580918C4146F640B3D5BECDE3A /* Staging Release */, - 238AD5E15AEE443741AA30FC7DF9BE4E /* Test Debug */, - EF427E493E485ED823B46796B5706EE0 /* Test Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ""; - }; - FC084246C395F08CB12677620BAF2399 /* Build configuration list for PBXNativeTarget "App_watchOS Extension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 70725C98440FD53BB91443718AC11C49 /* Production Debug */, - D30FF0A51CA7720140967225CEB93621 /* Production Release */, - 1D285F94CF59832C2BA027CD569DDAB7 /* Staging Debug */, - 3BE57E2A55CD16BC51F289949EC85F76 /* Staging Release */, - 096ECE14561204A143946060635175E2 /* Test Debug */, - 4E69BB19B16E547D43AF93A25BCD9F31 /* Test Release */, + BC_057931652E9069AFF23BA573B6564BE5 /* Production Debug */, + BC_5B12F047BB0206FED25C955314A29B18 /* Production Release */, + BC_8895B9B729A8000331A682AF912CA229 /* Staging Debug */, + BC_2DB4D72679A12506C6A8B4728F130B7D /* Staging Release */, + BC_2D532F03F57D7D107FDAC3EF23DBFBFE /* Test Debug */, + BC_7BA9BA11D163D5F132FE6FFBA4DA1AB8 /* Test Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = ""; @@ -5056,19 +5059,19 @@ /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ - 32AE52CAD620F8B92487AA4F5924D0EC /* Model.xcdatamodeld */ = { + VG_EB676136B9F946373D4796800CC00AD4 /* Model.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - FBF4C9FD09B493401414CA2F3086041F /* Model 2.xcdatamodel */, - F04030C0892CAC78F4B4376F938018E3 /* Model 3.xcdatamodel */, - D99F14029800E2D9F2434C4B6D718A5E /* Model.xcdatamodel */, + FR_347062562C9C212A082B1326BBCDC71B /* Model 2.xcdatamodel */, + FR_6643E0FE8DD9AAC71691A739070C6833 /* Model 3.xcdatamodel */, + FR_58A974F0E117C1384FD1B5147E524659 /* Model.xcdatamodel */, ); - currentVersion = FBF4C9FD09B493401414CA2F3086041F /* Model 2.xcdatamodel */; + currentVersion = FR_347062562C9C212A082B1326BBCDC71B /* Model 2.xcdatamodel */; path = Model.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; }; /* End XCVersionGroup section */ }; - rootObject = 48BA824E9883B72747F77581255D9C94 /* Project object */; + rootObject = P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */; } diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme index acf0b9a1..3c8c9251 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -33,7 +33,7 @@ skipped = "NO"> @@ -43,7 +43,7 @@ skipped = "NO"> @@ -53,7 +53,7 @@ @@ -86,7 +86,7 @@ runnableDebuggingMode = "0"> @@ -115,7 +115,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme index 1cf28c94..ff78fb87 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -33,7 +33,7 @@ skipped = "NO"> @@ -43,7 +43,7 @@ skipped = "NO"> @@ -53,7 +53,7 @@ @@ -86,7 +86,7 @@ runnableDebuggingMode = "0"> @@ -115,7 +115,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme index dc623756..57dbf591 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -33,7 +33,7 @@ skipped = "NO"> @@ -43,7 +43,7 @@ skipped = "NO"> @@ -53,7 +53,7 @@ @@ -86,7 +86,7 @@ runnableDebuggingMode = "0"> @@ -115,7 +115,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme index d5d61020..b5bd2d09 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme index fa3f0ee7..a9f290e1 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme @@ -14,7 +14,7 @@ @@ -32,7 +32,7 @@ buildForAnalyzing = "YES"> @@ -50,7 +50,7 @@ @@ -72,7 +72,7 @@ @@ -101,7 +101,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme index 1e73621f..3bed2d8f 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -32,7 +32,7 @@ @@ -57,7 +57,7 @@ runnableDebuggingMode = "0"> @@ -78,7 +78,7 @@ runnableDebuggingMode = "0"> diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 660a0d38..31bede0f 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -262,7 +262,7 @@ class ProjectGeneratorTests: XCTestCase { throw failure("Couldn't find UITest Target") } - //try expect(targetAttributes[uiTestTarget.reference]?["TestTargetID"] as? String) == appTarget.reference.value + try expect(targetAttributes[uiTestTarget]?["TestTargetID"] as? String) != nil try expect(targetAttributes[uiTestTarget]?["ProvisioningStyle"] as? String) == "Manual" try expect(targetAttributes[appTarget]?["ProvisioningStyle"] as? String) == "Automatic" try expect(targetAttributes[appTarget]?["DevelopmentTeam"] as? String) == "123" From a26b2d382a9871ae91709a7698abc42f00154054 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Wed, 10 Oct 2018 20:19:37 +1100 Subject: [PATCH 30/77] fix warnings --- Tests/XcodeGenKitTests/ProjectGeneratorTests.swift | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 31bede0f..7c77635b 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -262,7 +262,7 @@ class ProjectGeneratorTests: XCTestCase { throw failure("Couldn't find UITest Target") } - try expect(targetAttributes[uiTestTarget]?["TestTargetID"] as? String) != nil + try expect((targetAttributes[uiTestTarget]?["TestTargetID"] as? PBXNativeTarget)?.name) == app.name try expect(targetAttributes[uiTestTarget]?["ProvisioningStyle"] as? String) == "Manual" try expect(targetAttributes[appTarget]?["ProvisioningStyle"] as? String) == "Automatic" try expect(targetAttributes[appTarget]?["DevelopmentTeam"] as? String) == "123" @@ -939,10 +939,6 @@ class ProjectGeneratorTests: XCTestCase { try expect(xcodeProject.sharedData?.schemes.count) == 2 - guard let nativeTarget = xcodeProject.pbxproj.nativeTargets - .first(where: { $0.name == app.name }) else { - throw failure("Target not found") - } guard let xcscheme = xcodeProject.sharedData?.schemes .first(where: { $0.name == "\(target.name) Test" }) else { throw failure("Scheme not found") @@ -951,7 +947,7 @@ class ProjectGeneratorTests: XCTestCase { throw failure("Build Action entry not found") } - // FIXME: try expect(buildActionEntry.buildableReference.blueprintIdentifier) == nativeTarget + try expect(buildActionEntry.buildableReference.blueprintIdentifier.count > 0) == true try expect(xcscheme.launchAction?.buildConfiguration) == "Test Debug" try expect(xcscheme.testAction?.buildConfiguration) == "Test Debug" From e17bf7d0f2e6d395a46b7ab73099dee27d85db28 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 11 Oct 2018 21:01:33 +1100 Subject: [PATCH 31/77] update xcodeproj --- Package.resolved | 14 +++++++------- Package.swift | 2 +- Sources/XcodeGen/main.swift | 3 +-- Sources/XcodeGenKit/SettingsBuilder.swift | 3 +-- Tests/XcodeGenKitTests/PerformanceTests.swift | 5 ++--- Tests/XcodeGenKitTests/ProjectFixtureTests.swift | 3 +-- 6 files changed, 13 insertions(+), 17 deletions(-) diff --git a/Package.resolved b/Package.resolved index dc529f00..77a558f8 100644 --- a/Package.resolved +++ b/Package.resolved @@ -56,21 +56,21 @@ } }, { - "package": "SwiftPM", - "repositoryURL": "https://github.com/apple/swift-package-manager", + "package": "SwiftShell", + "repositoryURL": "https://github.com/kareman/SwiftShell", "state": { "branch": null, - "revision": "235aacc514cb81a6881364b0fedcb3dd083228f3", - "version": "0.3.0" + "revision": "beebe43c986d89ea5359ac3adcb42dac94e5e08a", + "version": "4.1.2" } }, { "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": null, - "revision": "ed33abf5f983232d5a27ada48d120ad7564a3087", - "version": "6.1.0" + "branch": "master", + "revision": "7a32fa0ebf0c6120ed8a7de03a632c2a10bbe243", + "version": null } }, { diff --git a/Package.swift b/Package.swift index 31d86154..9c933b68 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.1.0"), + .package(url: "https://github.com/tuist/xcodeproj.git", .branch("master")), ], targets: [ .target(name: "XcodeGen", dependencies: [ diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index 70c91d98..9d732054 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -1,4 +1,3 @@ -import Basic import Commander import Foundation import JSONUtilities @@ -55,7 +54,7 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { if projectFile.exists { try projectFile.copy(tempPath) } - try xcodeProject.write(path: AbsolutePath(tempPath.absolute().string), override: true) + try xcodeProject.write(path: tempPath, override: true) try? projectFile.delete() try tempPath.copy(projectFile) try? tempPath.delete() diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index 2203dd5c..d63cf4f2 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -1,4 +1,3 @@ -import Basic import Foundation import JSONUtilities import PathKit @@ -126,7 +125,7 @@ extension Project { if let cached = configFileSettings[configFilePath.string] { return cached.value } else { - guard let configFile = try? XCConfig(path: AbsolutePath(configFilePath.absolute().string)) else { + guard let configFile = try? XCConfig(path: configFilePath) else { configFileSettings[configFilePath.string] = .nothing return nil } diff --git a/Tests/XcodeGenKitTests/PerformanceTests.swift b/Tests/XcodeGenKitTests/PerformanceTests.swift index 0f34a0d5..11058593 100644 --- a/Tests/XcodeGenKitTests/PerformanceTests.swift +++ b/Tests/XcodeGenKitTests/PerformanceTests.swift @@ -4,7 +4,6 @@ import Foundation import XCTest import ProjectSpec import PathKit -import Basic class GeneratedPerformanceTests: XCTestCase { @@ -23,7 +22,7 @@ class GeneratedPerformanceTests: XCTestCase { let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() self.measure { - try! xcodeProject.write(path: AbsolutePath(project.projectPath.absolute().string)) + try! xcodeProject.write(path: project.projectPath) } } } @@ -51,7 +50,7 @@ class FixturePerformanceTests: XCTestCase { let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() self.measure { - try! xcodeProject.write(path: AbsolutePath(project.projectPath.absolute().string)) + try! xcodeProject.write(path: project.projectPath) } } } diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index 6e5d94b0..6a0fae4f 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -4,7 +4,6 @@ import Spectre import XcodeGenKit import xcodeproj import XCTest -import Basic class ProjectFixtureTests: XCTestCase { @@ -63,7 +62,7 @@ fileprivate func generateXcodeProject(specPath: Path, file: String = #file, line let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() - try xcodeProject.write(path: AbsolutePath(project.projectPath.absolute().string), override: true) + try xcodeProject.write(path: project.projectPath, override: true) return xcodeProject } From 0c02e0973eea72c157aa1ab64c7c7540b6563a80 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 11 Oct 2018 23:04:26 +1100 Subject: [PATCH 32/77] invalidate references when running performance tests --- Tests/XcodeGenKitTests/PerformanceTests.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/XcodeGenKitTests/PerformanceTests.swift b/Tests/XcodeGenKitTests/PerformanceTests.swift index 11058593..6ecaec3d 100644 --- a/Tests/XcodeGenKitTests/PerformanceTests.swift +++ b/Tests/XcodeGenKitTests/PerformanceTests.swift @@ -22,6 +22,7 @@ class GeneratedPerformanceTests: XCTestCase { let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() self.measure { + xcodeProject.pbxproj.invalidateUUIDs() try! xcodeProject.write(path: project.projectPath) } } @@ -50,6 +51,7 @@ class FixturePerformanceTests: XCTestCase { let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() self.measure { + xcodeProject.pbxproj.invalidateUUIDs() try! xcodeProject.write(path: project.projectPath) } } From 65d82bece61dd3dfde9a40d5bf234a6cb17d18f3 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 12 Oct 2018 00:07:21 +1100 Subject: [PATCH 33/77] improve performance by not sorting files that are later sorted --- Sources/XcodeGenKit/PBXProjGenerator.swift | 6 +++--- Sources/XcodeGenKit/SourceGenerator.swift | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index a441c58f..68100097 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -389,6 +389,7 @@ public class PBXProjGenerator { let carthageDependencies = getAllCarthageDependencies(target: target) let sourceFiles = try sourceGenerator.getAllSourceFiles(targetType: target.type, sources: target.sources) + .sorted { $0.path.lastComponent < $1.path.lastComponent } var plistPath: Path? var searchForPlist = true @@ -572,14 +573,13 @@ public class PBXProjGenerator { var buildPhases: [PBXBuildPhase] = [] func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXBuildFile] { - let files = sourceFiles + return sourceFiles .reduce(into: [SourceFile]()) { output, sourceFile in if !output.contains(where: { $0.fileReference === sourceFile.fileReference }) { output.append(sourceFile) } } - .sorted { $0.path.lastComponent < $1.path.lastComponent } - return files.map { addObject($0.buildFile) } + .map { addObject($0.buildFile) } } func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [PBXBuildFile] { diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index 59e0e83b..cf2f23c0 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -308,15 +308,12 @@ class SourceGenerator { let directories = children .filter { $0.isDirectory && $0.extension == nil && $0.extension != "lproj" } - .sorted { $0.lastComponent < $1.lastComponent } let filePaths = children .filter { $0.isFile || $0.extension != nil && $0.extension != "lproj" } - .sorted { $0.lastComponent < $1.lastComponent } let localisedDirectories = children .filter { $0.extension == "lproj" } - .sorted { $0.lastComponent < $1.lastComponent } var groupChildren: [PBXFileElement] = filePaths.map { getFileReference(path: $0, inPath: path) } var allSourceFiles: [SourceFile] = filePaths.map { From 3bb7f97aa72f41aa754fbcb8f9c983c82849b718 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 12 Oct 2018 19:10:59 +1100 Subject: [PATCH 34/77] update xcodeproj --- Package.resolved | 6 +++--- Package.swift | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Package.resolved b/Package.resolved index 77a558f8..2336d7c9 100644 --- a/Package.resolved +++ b/Package.resolved @@ -68,9 +68,9 @@ "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": "master", - "revision": "7a32fa0ebf0c6120ed8a7de03a632c2a10bbe243", - "version": null + "branch": null, + "revision": "869ae3f417b0fb545e454ead36e2e13f157265a2", + "version": "6.2.0" } }, { diff --git a/Package.swift b/Package.swift index 9c933b68..0be7a994 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", .branch("master")), + .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.2.0"), ], targets: [ .target(name: "XcodeGen", dependencies: [ From b1b7901f1e30f1d2277efc906ca8bc8e8cd34284 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 14 Oct 2018 21:31:43 +1100 Subject: [PATCH 35/77] don't generate duplicate product file references for cross platform targets --- Sources/ProjectSpec/Target.swift | 11 +++++++---- Sources/XcodeGenKit/PBXProjGenerator.swift | 10 +++++----- .../TestProject/Project.xcodeproj/project.pbxproj | 9 --------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index 4cdb7b88..f4118c3c 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -39,14 +39,14 @@ public struct Target: ProjectTarget { public var legacy: LegacyTarget? public var deploymentTarget: Version? public var attributes: [String: Any] - internal var productName: String? + public var productName: String public var isLegacy: Bool { return legacy != nil } public var filename: String { - var filename = productName ?? name + var filename = productName if let fileExtension = type.fileExtension { filename += ".\(fileExtension)" } @@ -57,6 +57,7 @@ public struct Target: ProjectTarget { name: String, type: PBXProductType, platform: Platform, + productName: String? = nil, deploymentTarget: Version? = nil, settings: Settings = .empty, configFiles: [String: String] = [:], @@ -76,6 +77,7 @@ public struct Target: ProjectTarget { self.type = type self.platform = platform self.deploymentTarget = deploymentTarget + self.productName = productName ?? name self.settings = settings self.configFiles = configFiles self.sources = sources @@ -230,8 +232,9 @@ extension LegacyTarget: JSONObjectConvertible { extension Target: NamedJSONDictionaryConvertible { public init(name: String, jsonDictionary: JSONDictionary) throws { - self.name = jsonDictionary.json(atKeyPath: "name") ?? name - productName = jsonDictionary.json(atKeyPath: "productName") + let resolvedName: String = jsonDictionary.json(atKeyPath: "name") ?? name + self.name = resolvedName + self.productName = jsonDictionary.json(atKeyPath: "productName") ?? resolvedName let typeString: String = try jsonDictionary.json(atKeyPath: "type") if let type = PBXProductType(string: typeString) { self.type = type diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 68100097..be7072f1 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -123,7 +123,7 @@ public class PBXProjGenerator { lastKnownFileType = fileType } - if !target.isLegacy { + if !target.isLegacy && targetFileReferences[target.productName] == nil { let fileReference = addObject( PBXFileReference( sourceTree: .buildProductsDir, @@ -134,7 +134,7 @@ public class PBXProjGenerator { ) ) - targetFileReferences[target.name] = fileReference + targetFileReferences[target.productName] = fileReference } } @@ -441,7 +441,7 @@ public class PBXProjGenerator { guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue } - let dependencyFileReference = targetFileReferences[dependencyTargetName]! + let dependencyFileReference = targetFileReferences[dependencyTarget.productName]! let dependecyLinkage = dependencyTarget.defaultLinkage let link = dependency.link ?? ( @@ -449,7 +449,7 @@ public class PBXProjGenerator { || (dependecyLinkage == .static && target.type.isExecutable) ) if link { - let dependencyFile = targetFileReferences[dependencyTargetName]! + let dependencyFile = targetFileReferences[dependencyTarget.productName]! let buildFile = addObject( PBXBuildFile(file: dependencyFile, settings: getDependencyFrameworkSettings(dependency: dependency)) ) @@ -569,7 +569,7 @@ public class PBXProjGenerator { } } - let fileReference = targetFileReferences[target.name] + let fileReference = targetFileReferences[target.productName] var buildPhases: [PBXBuildPhase] = [] func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXBuildFile] { diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index eb94ceaf..10501eab 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -775,19 +775,10 @@ FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */, FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */, FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, - FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, - FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, - FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, - FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, - FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, - FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */, FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */, FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, - FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, - FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, - FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */, FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */, ); From eb38020f9bd6f31d31d2085cdc4f2c9a6903312d Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 14 Oct 2018 21:49:51 +1100 Subject: [PATCH 36/77] update JSONUtilities --- Package.resolved | 4 ++-- Package.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Package.resolved b/Package.resolved index 2336d7c9..bf25ace5 100644 --- a/Package.resolved +++ b/Package.resolved @@ -24,8 +24,8 @@ "repositoryURL": "https://github.com/yonaskolb/JSONUtilities.git", "state": { "branch": null, - "revision": "d9f957b1b2a078c93f96c723040d4cbffcb7d3f9", - "version": "4.0.2" + "revision": "db238f4858ac2ac3fff228b5b71ce90488a6a9b3", + "version": "4.1.0" } }, { diff --git a/Package.swift b/Package.swift index 0be7a994..9f44a5c4 100644 --- a/Package.swift +++ b/Package.swift @@ -13,7 +13,7 @@ let package = Package( .package(url: "https://github.com/kylef/PathKit.git", from: "0.9.0"), .package(url: "https://github.com/kylef/Commander.git", from: "0.8.0"), .package(url: "https://github.com/jpsim/Yams.git", from: "1.0.0"), - .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.0.0"), + .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.1.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"), .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.2.0"), From 7c4623d6cfaef9fcf0daac4a3e575f5a1245e686 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 14 Oct 2018 21:50:05 +1100 Subject: [PATCH 37/77] compile fixture in Swift 4.1 --- .circleci/config.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index f1edcc7f..14b4cb35 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,13 @@ version: 2 jobs: + macOS_swift_4.1: + macos: + xcode: "9.4.0" + steps: + - checkout + - run: + name: Build Test Project + command: ./build-fixtures.sh macOS_swift_4.2: macos: xcode: "10.0.0" @@ -24,4 +32,5 @@ workflows: version: 2 workflow: jobs: + - macOS_swift_4.1 - macOS_swift_4.2 From fd968b0e50d391bb16ca68dd20262b0ac9fabb0c Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 14 Oct 2018 22:08:53 +1100 Subject: [PATCH 38/77] updated changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b6fb0e3..971f6feb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ #### Added - Added `weak` Weak linking setting for dependencies [411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen +#### Changed +- Performance improvements for large projects [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb +- Upgraded to xcodeproj 6 [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb +- Upgraded to Swift 4.2 [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb ## 1.11.2 From 65b8a7431160d661cd5316a31526575165b95eb9 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 14 Oct 2018 22:42:51 +1100 Subject: [PATCH 39/77] update changelog --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 971f6feb..45cde580 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,14 @@ - Added `weak` Weak linking setting for dependencies [411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen #### Changed -- Performance improvements for large projects [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb +- Performance improvements for large projects [388](https://github.com/yonaskolb/XcodeGen/pull/388) [417](https://github.com/yonaskolb/XcodeGen/pull/417) [416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione - Upgraded to xcodeproj 6 [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb - Upgraded to Swift 4.2 [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb +- Remove iOS codesigning sdk restriction in setting preset [414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb + +#### Fixed +- Fixed code signing issues [414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb +- Fixed `TargetSource.headerVisibility` not being set in initializer [419](https://github.com/yonaskolb/XcodeGen/pull/419) @jerrymarino ## 1.11.2 From c8ce6a52a5d7d4918a21276c5ab4b8d056a4e1f7 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 15 Oct 2018 22:55:59 +1100 Subject: [PATCH 40/77] fix cross platform targets --- Package.resolved | 6 +- Package.swift | 2 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 24 ++- .../Project.xcodeproj/project.pbxproj | 166 ++++++++++-------- 4 files changed, 111 insertions(+), 87 deletions(-) diff --git a/Package.resolved b/Package.resolved index bf25ace5..e5c80559 100644 --- a/Package.resolved +++ b/Package.resolved @@ -68,9 +68,9 @@ "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": null, - "revision": "869ae3f417b0fb545e454ead36e2e13f157265a2", - "version": "6.2.0" + "branch": "id_conflicts", + "revision": "7f382d029fcf01bfd62ec1658f0fdf1d9aafcbb1", + "version": null } }, { diff --git a/Package.swift b/Package.swift index 9f44a5c4..bd33808e 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.1.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.2.0"), + .package(url: "https://github.com/tuist/xcodeproj.git", .branch("id_conflicts")), ], targets: [ .target(name: "XcodeGen", dependencies: [ diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index be7072f1..2905ac84 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -123,7 +123,7 @@ public class PBXProjGenerator { lastKnownFileType = fileType } - if !target.isLegacy && targetFileReferences[target.productName] == nil { + if !target.isLegacy { let fileReference = addObject( PBXFileReference( sourceTree: .buildProductsDir, @@ -133,8 +133,9 @@ public class PBXProjGenerator { includeInIndex: false ) ) + fileReference.identifier = target.name - targetFileReferences[target.productName] = fileReference + targetFileReferences[target.name] = fileReference } } @@ -370,10 +371,14 @@ public class PBXProjGenerator { let sortOrder1 = child1.getSortOrder(groupSortPosition: project.options.groupSortPosition) let sortOrder2 = child2.getSortOrder(groupSortPosition: project.options.groupSortPosition) - if sortOrder1 == sortOrder2 { - return child1.nameOrPath.localizedStandardCompare(child2.nameOrPath) == .orderedAscending - } else { + if sortOrder1 != sortOrder2 { return sortOrder1 < sortOrder2 + } else { + if child1.nameOrPath != child2.nameOrPath { + return child1.nameOrPath.localizedStandardCompare(child2.nameOrPath) == .orderedAscending + } else { + return child1.identifier ?? "" < child2.identifier ?? "" + } } } group.children = children.filter { $0 != group } @@ -441,7 +446,7 @@ public class PBXProjGenerator { guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue } - let dependencyFileReference = targetFileReferences[dependencyTarget.productName]! + let dependencyFileReference = targetFileReferences[dependencyTarget.name]! let dependecyLinkage = dependencyTarget.defaultLinkage let link = dependency.link ?? ( @@ -449,7 +454,7 @@ public class PBXProjGenerator { || (dependecyLinkage == .static && target.type.isExecutable) ) if link { - let dependencyFile = targetFileReferences[dependencyTarget.productName]! + let dependencyFile = targetFileReferences[dependencyTarget.name]! let buildFile = addObject( PBXBuildFile(file: dependencyFile, settings: getDependencyFrameworkSettings(dependency: dependency)) ) @@ -569,7 +574,6 @@ public class PBXProjGenerator { } } - let fileReference = targetFileReferences[target.productName] var buildPhases: [PBXBuildPhase] = [] func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXBuildFile] { @@ -835,13 +839,15 @@ public class PBXProjGenerator { let targetObject = targetObjects[target.name]! + let targetFileReference = targetFileReferences[target.name] + targetObject.name = target.name targetObject.buildConfigurationList = buildConfigList targetObject.buildPhases = buildPhases targetObject.dependencies = dependencies targetObject.productName = target.name targetObject.buildRules = buildRules - targetObject.product = fileReference + targetObject.product = targetFileReference if !target.isLegacy { targetObject.productType = target.type } diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 10501eab..b21a0ae5 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -24,8 +24,10 @@ /* Begin PBXBuildFile section */ BF_021628792D80050372F6E56A6C3D0561 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_B993F75B001AB1C272CE83CACC06F0E5 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_0378AD9857D61219363F74B2FA308B5A /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */; }; BF_0A6C302954FF03411D6F2704ECF5C738 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_0B3CE605B6243480C374176E01B1BB12 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; + BF_0BBC6762FFFC3394DCB0570CCEFB1970 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_0570C52FB0BC489485EAF0CE7B7119A1 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_149B8FD8F114C531F675E01FBE814609 /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = FR_1B0304C0E4DC73614BAA550E4A80D41C /* ResourceFolder */; }; BF_19C973A29D9994B1E0655B1AFC5528AD /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_6542B94EE7DA40CD30BC54DED26C61C7 /* Interface.storyboard */; }; BF_1C8AAB7468188315681C0879591969B4 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; @@ -35,28 +37,27 @@ BF_30024D558743C8ABC415D87431CDC13C /* SomeFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_3080067722B357BFC053D89CCDBF5397 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_33EA0F8B2ADA2D24A683FCD8D6235B10 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF_36BCFE51A59D5EAE19684491C9F5427F /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_1C00E09FA3D2CDB962FE8D5584853E0D /* StaticLibrary_ObjC.a */; }; BF_3811C1771AF5342AD8F9FEB63A3465B5 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_390908C547D6F8520DF9AA0CC5A98EB1 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_3B680DD27CFCD491675F1BF257A95A24 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_42222C3F9126FFCC21BA88AD21CFD964 /* iMessageExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - BF_42944378315033432F76246C09E5A4DB /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + BF_42C8B667C3B7417C14B063AF0F16C1A6 /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_36044227861B95AC5060E7D063BED65A /* StaticLibrary_ObjC.a */; }; BF_47A75C8A7EF15658238E254C846C5C6B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_30676EBEE9BE54AA26CAE69BE744CAE8 /* Main.storyboard */; }; BF_47FBEFEA08B9642C1F711EDA77FC8C89 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_FE6D89DA2D7E7F58340D566590FF221C /* LocalizedStoryboard.storyboard */; }; BF_47FF83A37355E90F93C0F5B2CFBCE317 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */; }; BF_4D56F3F4D081A77C11325B96DD34D8E1 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_4EBBAD70FA73DDC89BD933866B90DD08 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_4FC40CAFC1CFAD431215635FE1A0ED86 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_51D370314B5DA8E002A908021E459F50 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_A55A35F549FD72775C37ED05342812AA /* Assets.xcassets */; }; BF_527E94EECC2501E12D28790BF9318FD3 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; BF_52C8E2C5962601534CE6F00B88FDB048 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_14B7B5469AA17939993A2B25E775D391 /* Main.storyboard */; }; BF_5336CD16DBDB1654D75AA91B922DEAD6 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_CC3A24A5C8E1815346752C5AB0745176 /* InterfaceController.swift */; }; BF_569CC068CD4B7BCE35E974D7B61566DB /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF_587563F1FBA507305EC4AD895394002E /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; }; + BF_59E5DB880E7823E6BC1D62FAF99E5758 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_30E7940EF436086816B40DAC068BD238 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_5C6407EDAC3D88B020BCB46724DC1D14 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; - BF_63672615CB7B136F2706924EC460710A /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_65835F9276FF0DB8E27D098367F9D03C /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = VG_C247AA37E9057916EDDC65C7B55E2F38 /* Localizable.stringsdict */; }; BF_67219751DE020023F9D6068EDCCDC445 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_4EB4AAACD714C13E5BC894C71B954299 /* SomeXPCService.xpc */; }; - BF_6EF6DB8898CD050E19303DC481EEFDC5 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_6AA4D902E371C0F078917EB44F966B16 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_545DDE4AB557C8FAAD87775CD4271BDF /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_6E2D4086A22C12D516A06AE66DC48D16 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_099E2C49D4A0B799E78B39C47FBEADF7 /* Framework.framework */; }; BF_6FA9DA8B67663BAD9E11C1CEBD3BAC43 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; BF_703163C1C547AD6EF09BEA5F5F5ED49C /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; BF_729EB1C88A5E43B2342099D81B301F4D /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; @@ -64,7 +65,6 @@ BF_77C9BB7BED4F5970D02E69312259FE09 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; BF_7C9646667C0D479544A2207DEE3E930B /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_81711FB79375EB743254B809B4E246E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_4DB225C7FF39C16EEFD9A1A5595FCDBC /* AppDelegate.swift */; }; - BF_81C29A47481BF6D67B4CB3F6C836A57E /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; }; BF_8610CB66872BC72C1690EBD8D102FBC0 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_86F2552DA1E230901EC4CB1A40399019 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; }; BF_8765851BF5D99B10C220DDD57B968B10 /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -75,15 +75,14 @@ BF_98DEE7FD578AA439550E0023A2ECE8D0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_25BDF725104C5E280D45CBF33F54C72C /* ViewController.swift */; }; BF_9A74AED05E2F61530BFA0F7D23AF0112 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = VG_EB676136B9F946373D4796800CC00AD4 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; BF_9D9B97D239384F4CE6E73852E027B787 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_B537FEE8515090D3BA0F5CFF3BC76BB1 /* Assets.xcassets */; }; - BF_A038D29BE93A9CF1654D2B7392845AEA /* StaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; }; BF_A29F8B04C9DD9ADE1EF5AFDAAA0130D2 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_DBB69305458B16774C88720CDD3978E5 /* ExtensionDelegate.swift */; }; - BF_A314322BB45C75B7EE401C539B1120C5 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; }; BF_A8A5905BCA8872B2D7B0EF6326B33077 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FR_291D6D09ACADC420638E83BEE89DFFEB /* MyBundle.bundle */; }; BF_ABA4EA32A6DB022806126D9C1418BBA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_ED407ECED0DF010B1E787D238EA91A5D /* Assets.xcassets */; }; BF_AC2CE59D56846478FDFBB376FF9F9DC0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG_BE436BDD64E90EFB600D47AC69B49DD3 /* Localizable.strings */; }; BF_B2B4B15D6F7B242DBDA39939111282F9 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_D7B45FAEE40EE622B4FA9192609F9717 /* TestProjectTests.swift */; }; BF_B5446C54E942A18E025D2061A88004A4 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */; }; BF_B57F9691AD12CA8AE5528A2BAB9E4A43 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_F256536BB07CF3E64C4DD934F75BED9C /* LaunchScreen.storyboard */; }; + BF_B69A0C5F1A19F65CA603F58247A8CD41 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_1EA1EAB0CB9BD96BC550879E58911B12 /* Framework2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_B6E31790D07B981E52CD5BC9049FE303 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_B8E824A58BFE0B81E16BB26087FDC8B4 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; }; BF_BD2537A230BFC8A86681F0AF34C929DA /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_8B770F475242D91FC20289A3B35CD165 /* Result.framework */; }; @@ -91,27 +90,28 @@ BF_C5EA496FE2EDF51C92DC55FD552472E5 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; BF_C9D24A56926211130F4E25B5D9972B58 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; BF_CD062A97959629BD672893FDAE89A1E9 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_BB49B398F9291781A60DA963A0BF168C /* NotificationController.swift */; }; - BF_CF8F05DAB384E10C59B65F4D0F51C109 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_D0676C98017B6FDD96A733CB851645DE /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; - BF_D1EF4AECA866B1132F3F01B826B5EE5D /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + BF_D0D1D142403C75D11757CB7092E8D035 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_1FA381C639CE4923ED6845790A5DF9D2 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_D3D64E2595369BBDEF03E07543AE2779 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_D4A5544EDEE7F80A1F9DF1D0684CAFBB /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; BF_D6588CD7B83034816FFD3A7DB10DAD78 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */; }; - BF_D9111FF58DCAA51B7251F882EC418E67 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_D7E271A6820E0A908736F44F99341DE1 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_DA12D48C9BCEC64D55B87CE8703432BE /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; BF_DBF3047DCE71CB2E7B9AC7367F44F8DB /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_CCC97AF230188CAF9B4A66324891CCAD /* StaticLibrary.swift */; }; BF_E228A4D3997297780216722D71AC9FE5 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; BF_E2D02DDEDD7DC21831F50A6EAA71E528 /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_C6A9DE885CAF350F6C9D0AC6F7324CD3 /* StandaloneAssets.xcassets */; }; BF_E35C9C198B45406E64439FF96C17F056 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_E6B3BA0A3A687598FB5CCDF0524E1B10 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; - BF_E6D3B938E2ED4C5339D11D340D3809EF /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_EA0063B4FC2A0980A746D35A8DF71CED /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_06DC429EEFBBA25BC3EE1AA1B4062C10 /* MainInterface.storyboard */; }; BF_EBC45940911A4942BA04AE1285BF3802 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */; }; BF_EC0616A0D18A2F723D2AF50287C43669 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_ED8BB47A2229EC3BEE544608267FB82D /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; BF_F12E44D8E7F617E8A5FD8E1A342E5FAD /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_752FB5DFFBC490CFB9742549A0C48527 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; }; + BF_F3D57DA3E1F8A539BDD72E02A8C23FC6 /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = FR_3305E7E3B08D04C667D02BD29D3A45A9 /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_F6A0FC1F0C9A4EC13BCCBB764D716C3F /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_F6FBB97A7DE0F6D06661A00E3B22E8CF /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_099E2C49D4A0B799E78B39C47FBEADF7 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_F7AC9F45ED37FCD5A749FD6F5F4518AF /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */; }; + BF_F8D73622DA7CFF30DB9AD17C08C63655 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_1EA1EAB0CB9BD96BC550879E58911B12 /* Framework2.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; BF_F9E44FE6ECBD936A8C762D425DDBA37C /* Result.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_FA28229372AB6236883309181258AF26 /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_7F4496C534F2DF8C4FB9A8D52414990B /* XPC_Service.m */; }; BF_FA5F3C87A2571E0F39637D118B6C6F8F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_B243640A6F73B3F3D33ABD05ABDBC26B /* Assets.xcassets */; }; @@ -266,8 +266,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - BF_6EF6DB8898CD050E19303DC481EEFDC5 /* Framework2.framework in Embed Frameworks */, - BF_63672615CB7B136F2706924EC460710A /* Framework.framework in Embed Frameworks */, + BF_B69A0C5F1A19F65CA603F58247A8CD41 /* Framework2.framework in Embed Frameworks */, + BF_D7E271A6820E0A908736F44F99341DE1 /* Framework.framework in Embed Frameworks */, BF_30024D558743C8ABC415D87431CDC13C /* SomeFramework.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -301,7 +301,7 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - BF_E6D3B938E2ED4C5339D11D340D3809EF /* App_watchOS Extension.appex in Embed App Extensions */, + BF_6AA4D902E371C0F078917EB44F966B16 /* App_watchOS Extension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -334,7 +334,7 @@ dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; dstSubfolderSpec = 16; files = ( - BF_CF8F05DAB384E10C59B65F4D0F51C109 /* App_watchOS.app in Embed Watch Content */, + BF_59E5DB880E7823E6BC1D62FAF99E5758 /* App_watchOS.app in Embed Watch Content */, ); name = "Embed Watch Content"; runOnlyForDeploymentPostprocessing = 0; @@ -345,7 +345,7 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - BF_42222C3F9126FFCC21BA88AD21CFD964 /* iMessageExtension.appex in Embed App Extensions */, + BF_0BBC6762FFFC3394DCB0570CCEFB1970 /* iMessageExtension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -356,7 +356,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - BF_4FC40CAFC1CFAD431215635FE1A0ED86 /* Framework.framework in Embed Frameworks */, + BF_F6FBB97A7DE0F6D06661A00E3B22E8CF /* Framework.framework in Embed Frameworks */, BF_8765851BF5D99B10C220DDD57B968B10 /* Result.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -379,7 +379,7 @@ dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; dstSubfolderSpec = 16; files = ( - BF_D9111FF58DCAA51B7251F882EC418E67 /* XPC Service.xpc in CopyFiles */, + BF_D0D1D142403C75D11757CB7092E8D035 /* XPC Service.xpc in CopyFiles */, BF_67219751DE020023F9D6068EDCCDC445 /* SomeXPCService.xpc in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -398,42 +398,49 @@ /* Begin PBXFileReference section */ FR_05405007CB77B2E003B19B89401C12AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_0570C52FB0BC489485EAF0CE7B7119A1 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; FR_07C0A7866967FA47B3F2777BF4AB694A /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = ""; }; FR_0823766D9A1DAB5D3F9CC04A9B35FA3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_099E2C49D4A0B799E78B39C47FBEADF7 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_0A30B76CD8B0A84B8C488FABC16C4682 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_11478908A963CED036DABEF21D85DF01 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_11E95FCD1DEB0C8A01A053518C1DAA8E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - FR_1672C218968DD6996F05E3C7688F0718 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_1B0304C0E4DC73614BAA550E4A80D41C /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; }; - FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_1C00E09FA3D2CDB962FE8D5584853E0D /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_1EA1EAB0CB9BD96BC550879E58911B12 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_1FA381C639CE4923ED6845790A5DF9D2 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; FR_22A431E337CB22CE70E39135206EDE27 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; + FR_257D977B4221AB25C1EC0ACD6128A89B /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FR_25BDF725104C5E280D45CBF33F54C72C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; }; FR_2649A01C17A7301DD72EA826604ED8AA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; FR_291D6D09ACADC420638E83BEE89DFFEB /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MyBundle.bundle; sourceTree = ""; }; FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SomeFramework.framework; path = Vendor/SomeFramework.framework; sourceTree = ""; }; + FR_30E7940EF436086816B40DAC068BD238 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_3305E7E3B08D04C667D02BD29D3A45A9 /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; FR_347062562C9C212A082B1326BBCDC71B /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 2.xcdatamodel"; sourceTree = ""; }; FR_35B9B5E8A2ED60FBB9CED8AE515B16B5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; }; + FR_36044227861B95AC5060E7D063BED65A /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_3744DA35690747A918CC896E2354C59D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_3B4065B548BFD8CFB3D1153F7106DDA3 /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; }; + FR_3B708FF662F6F7D8E4FABBB1B3F33604 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; }; FR_3ED99EEAF978C071491E281B8EAFD249 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_41E1155D8A7FDD97B783A1D5B3AD2C5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_426E58636FD3B81A8F45788D3E65BC50 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_4B58A01ABBE8E0A56B7B5A539C9BF5C7 /* Base */ = {isa = PBXFileReference; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; }; FR_4DB225C7FF39C16EEFD9A1A5595FCDBC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; FR_4EB4AAACD714C13E5BC894C71B954299 /* SomeXPCService.xpc */ = {isa = PBXFileReference; path = SomeXPCService.xpc; sourceTree = ""; }; - FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_545DDE4AB557C8FAAD87775CD4271BDF /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "App_watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; FR_58A974F0E117C1384FD1B5147E524659 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; - FR_5B3188BDA6DB0560398A483646F17AE4 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_5A840A83C22F13EBFE051C061E549F95 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_5CFDEA59B939FA9F3CA4F775B9E6AD2B /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = ""; }; FR_5E4B4E53251DE2294715A48CC249EBFD /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = ""; }; FR_5FEC20FF753341FD0483E2E4C622DB05 /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = ""; }; FR_62ECE5A3D0F25415CB50A28226B91EBE /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + FR_640ADF15D2B92FDC35556B2E0934C21C /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_654475F320EF1630562C841CA8B6938A /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_6643E0FE8DD9AAC71691A739070C6833 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; FR_752FB5DFFBC490CFB9742549A0C48527 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; FR_7532DD7B78451A5040048474AC4FBCCC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -442,16 +449,17 @@ FR_7F4496C534F2DF8C4FB9A8D52414990B /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = ""; }; FR_81A08F81FED7C42DC346B9611ECD21AA /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = ""; }; FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; }; + FR_89162821C7F86126DC7F165E93E0DD23 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; FR_8B770F475242D91FC20289A3B35CD165 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; - FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */ = {isa = PBXFileReference; includeInIndex = 0; path = "XPC Service.xpc"; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_9403DF729F7FE2E6B823C1DACE1E6214 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; FR_98BB4C8D33EB0E666C136ACD08B21EB3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_9B4B00A3CDADD50167B2393562AEBAB2 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + FR_A0DA89632C14F8DF99F15196E6EBB7D5 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_A51DE87AC269BC36016F9CAC32B4ECB2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; }; FR_A55A35F549FD72775C37ED05342812AA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; }; + FR_ABEBA07AEF9FB6D7F5B6D94FD76FF330 /* StaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = StaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; FR_AC5B2FCE520D5306B254D5857E15B6CB /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = ""; }; FR_B243640A6F73B3F3D33ABD05ABDBC26B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_B537FEE8515090D3BA0F5CFF3BC76BB1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -468,15 +476,16 @@ FR_CCC97AF230188CAF9B4A66324891CCAD /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = ""; }; FR_CEAE8D9C3F3920D6EADE5455C188EAAE /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = ""; }; + FR_D5FDE9E6362055E854CE1D3980716A4C /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_D7B45FAEE40EE622B4FA9192609F9717 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; }; FR_DACDD51068A6E1B7D2470F3E27E5EB2C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FR_DBB69305458B16774C88720CDD3978E5 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; FR_DBD29CA78CDBBEF69B2C39C6D23BBDA1 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_E3314150DA4CEFF65D69CF7DB678E845 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_EBD99C110BD7AE780C87A31CF2E4E7DB /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FR_ED407ECED0DF010B1E787D238EA91A5D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FR_F18AD4408D0A35A0B9EAE353E8087CDE /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_F5353B71B99044C8C37D7601A8107195 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; }; FR_F5436E663145426483F206F8A61400BC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; FR_F861CF6DF133AAD164CBE6DF2C7CEBFF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -487,10 +496,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_42944378315033432F76246C09E5A4DB /* Framework2.framework in Frameworks */, - BF_A314322BB45C75B7EE401C539B1120C5 /* Framework.framework in Frameworks */, + BF_F8D73622DA7CFF30DB9AD17C08C63655 /* Framework2.framework in Frameworks */, + BF_0378AD9857D61219363F74B2FA308B5A /* Framework.framework in Frameworks */, BF_B8E824A58BFE0B81E16BB26087FDC8B4 /* Result.framework in Frameworks */, - BF_A038D29BE93A9CF1654D2B7392845AEA /* StaticLibrary_ObjC.a in Frameworks */, + BF_42C8B667C3B7417C14B063AF0F16C1A6 /* StaticLibrary_ObjC.a in Frameworks */, BF_93A4E1A93C7DB4289E526466D547E55E /* SomeFramework.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -515,9 +524,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF_81C29A47481BF6D67B4CB3F6C836A57E /* Framework.framework in Frameworks */, + BF_6E2D4086A22C12D516A06AE66DC48D16 /* Framework.framework in Frameworks */, BF_230439786C4C6849F488A5FADC6A42A5 /* Result.framework in Frameworks */, - BF_587563F1FBA507305EC4AD895394002E /* StaticLibrary_ObjC.a in Frameworks */, + BF_36BCFE51A59D5EAE19684491C9F5427F /* StaticLibrary_ObjC.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -768,19 +777,28 @@ G_B0D2DFD450BCF614AA46E474644F2CE3 /* Products */ = { isa = PBXGroup; children = ( - FR_5B3188BDA6DB0560398A483646F17AE4 /* App_iOS_Tests.xctest */, - FR_9403DF729F7FE2E6B823C1DACE1E6214 /* App_iOS_UITests.xctest */, - FR_1672C218968DD6996F05E3C7688F0718 /* App_iOS.app */, - FR_F18AD4408D0A35A0B9EAE353E8087CDE /* App_macOS.app */, - FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */, - FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */, - FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */, - FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */, - FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */, - FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */, - FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */, - FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */, - FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */, + FR_EBD99C110BD7AE780C87A31CF2E4E7DB /* App_iOS_Tests.xctest */, + FR_257D977B4221AB25C1EC0ACD6128A89B /* App_iOS_UITests.xctest */, + FR_89162821C7F86126DC7F165E93E0DD23 /* App_iOS.app */, + FR_640ADF15D2B92FDC35556B2E0934C21C /* App_macOS.app */, + FR_545DDE4AB557C8FAAD87775CD4271BDF /* App_watchOS Extension.appex */, + FR_30E7940EF436086816B40DAC068BD238 /* App_watchOS.app */, + FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */, + FR_099E2C49D4A0B799E78B39C47FBEADF7 /* Framework.framework */, + FR_D5FDE9E6362055E854CE1D3980716A4C /* Framework.framework */, + FR_654475F320EF1630562C841CA8B6938A /* Framework.framework */, + FR_1EA1EAB0CB9BD96BC550879E58911B12 /* Framework2.framework */, + FR_0A30B76CD8B0A84B8C488FABC16C4682 /* Framework2.framework */, + FR_3B708FF662F6F7D8E4FABBB1B3F33604 /* Framework2.framework */, + FR_A0DA89632C14F8DF99F15196E6EBB7D5 /* Framework2.framework */, + FR_3305E7E3B08D04C667D02BD29D3A45A9 /* iMessageApp.app */, + FR_0570C52FB0BC489485EAF0CE7B7119A1 /* iMessageExtension.appex */, + FR_36044227861B95AC5060E7D063BED65A /* StaticLibrary_ObjC.a */, + FR_1C00E09FA3D2CDB962FE8D5584853E0D /* StaticLibrary_ObjC.a */, + FR_5A840A83C22F13EBFE051C061E549F95 /* StaticLibrary_ObjC.a */, + FR_ABEBA07AEF9FB6D7F5B6D94FD76FF330 /* StaticLibrary_ObjC.a */, + FR_426E58636FD3B81A8F45788D3E65BC50 /* StaticLibrary_Swift.a */, + FR_1FA381C639CE4923ED6845790A5DF9D2 /* XPC Service.xpc */, ); name = Products; sourceTree = ""; @@ -964,7 +982,7 @@ ); name = StaticLibrary_ObjC_macOS; productName = StaticLibrary_ObjC_macOS; - productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productReference = FR_1C00E09FA3D2CDB962FE8D5584853E0D /* StaticLibrary_ObjC.a */; productType = "com.apple.product-type.library.static"; }; NT_193BAF154270D1C21E269EDF2A1BD3F6 /* App_iOS_Tests */ = { @@ -981,7 +999,7 @@ ); name = App_iOS_Tests; productName = App_iOS_Tests; - productReference = FR_5B3188BDA6DB0560398A483646F17AE4 /* App_iOS_Tests.xctest */; + productReference = FR_EBD99C110BD7AE780C87A31CF2E4E7DB /* App_iOS_Tests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; NT_23509FD082D1F788E6D6431F509B11AF /* XPC Service */ = { @@ -996,7 +1014,7 @@ ); name = "XPC Service"; productName = "XPC Service"; - productReference = FR_8FCFCDD6A5A7292C72787E2FC0A36294 /* XPC Service.xpc */; + productReference = FR_1FA381C639CE4923ED6845790A5DF9D2 /* XPC Service.xpc */; productType = "com.apple.product-type.xpc-service"; }; NT_2940463C85DCD0660288786BC66F2C4C /* StaticLibrary_Swift */ = { @@ -1012,7 +1030,7 @@ ); name = StaticLibrary_Swift; productName = StaticLibrary_Swift; - productReference = FR_5465435FA4A3763830C566514B358969 /* StaticLibrary_Swift.a */; + productReference = FR_426E58636FD3B81A8F45788D3E65BC50 /* StaticLibrary_Swift.a */; productType = "com.apple.product-type.library.static"; }; NT_34A020E43FBBD797051205235CD82B70 /* StaticLibrary_ObjC_watchOS */ = { @@ -1028,7 +1046,7 @@ ); name = StaticLibrary_ObjC_watchOS; productName = StaticLibrary_ObjC_watchOS; - productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productReference = FR_ABEBA07AEF9FB6D7F5B6D94FD76FF330 /* StaticLibrary_ObjC.a */; productType = "com.apple.product-type.library.static"; }; NT_38A9FE87056942A2746E0FF025B52A91 /* App_watchOS */ = { @@ -1048,7 +1066,7 @@ ); name = App_watchOS; productName = App_watchOS; - productReference = FR_0DDA6B4CCFF0DEB79BE16E3F72B95C7F /* App_watchOS.app */; + productReference = FR_30E7940EF436086816B40DAC068BD238 /* App_watchOS.app */; productType = "com.apple.product-type.application.watchapp2"; }; NT_5245AB6D3B3CFBC95AEBADF6E0C593B8 /* App_watchOS Extension */ = { @@ -1065,7 +1083,7 @@ ); name = "App_watchOS Extension"; productName = "App_watchOS Extension"; - productReference = FR_09608EA4613E62B3088BBA06F08E00E9 /* App_watchOS Extension.appex */; + productReference = FR_545DDE4AB557C8FAAD87775CD4271BDF /* App_watchOS Extension.appex */; productType = "com.apple.product-type.watchkit2-extension"; }; NT_66B6A18138FD1FB5ECF3FC67B20FF3D3 /* Framework2_tvOS */ = { @@ -1081,7 +1099,7 @@ ); name = Framework2_tvOS; productName = Framework2_tvOS; - productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productReference = FR_3B708FF662F6F7D8E4FABBB1B3F33604 /* Framework2.framework */; productType = "com.apple.product-type.framework"; }; NT_6A4FC6EE80FB2821AB96D51C3BC8966E /* iMessageExtension */ = { @@ -1097,7 +1115,7 @@ ); name = iMessageExtension; productName = iMessageExtension; - productReference = FR_586C1089A4869FFCB50BE6A26B0FA1E7 /* iMessageExtension.appex */; + productReference = FR_0570C52FB0BC489485EAF0CE7B7119A1 /* iMessageExtension.appex */; productType = "com.apple.product-type.app-extension.messages"; }; NT_6A7B08EB167FD3A759C339FDBED7E019 /* Framework_watchOS */ = { @@ -1116,7 +1134,7 @@ ); name = Framework_watchOS; productName = Framework_watchOS; - productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productReference = FR_654475F320EF1630562C841CA8B6938A /* Framework.framework */; productType = "com.apple.product-type.framework"; }; NT_6AEE12F93D449E249F5348BBF35D3053 /* StaticLibrary_ObjC_iOS */ = { @@ -1132,7 +1150,7 @@ ); name = StaticLibrary_ObjC_iOS; productName = StaticLibrary_ObjC_iOS; - productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productReference = FR_36044227861B95AC5060E7D063BED65A /* StaticLibrary_ObjC.a */; productType = "com.apple.product-type.library.static"; }; NT_6BD068FAAC6AA35C090C48147B94EC6E /* iMessageApp */ = { @@ -1150,7 +1168,7 @@ ); name = iMessageApp; productName = iMessageApp; - productReference = FR_1E05BB66BFD5629EAFDC86A4E869F864 /* iMessageApp.app */; + productReference = FR_3305E7E3B08D04C667D02BD29D3A45A9 /* iMessageApp.app */; productType = "com.apple.product-type.application.messages"; }; NT_7D108AE86BED8C9CCF52C2646FA4C5DE /* Framework_iOS */ = { @@ -1169,7 +1187,7 @@ ); name = Framework_iOS; productName = Framework_iOS; - productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productReference = FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; NT_87DF09E78830E7EB3C00B6134A2D5A5D /* Framework2_macOS */ = { @@ -1185,7 +1203,7 @@ ); name = Framework2_macOS; productName = Framework2_macOS; - productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productReference = FR_0A30B76CD8B0A84B8C488FABC16C4682 /* Framework2.framework */; productType = "com.apple.product-type.framework"; }; NT_9D53AF351F8DAE25354F2391248DFCCA /* Framework_macOS */ = { @@ -1204,7 +1222,7 @@ ); name = Framework_macOS; productName = Framework_macOS; - productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productReference = FR_099E2C49D4A0B799E78B39C47FBEADF7 /* Framework.framework */; productType = "com.apple.product-type.framework"; }; NT_9F72C903B42E1AA3B88F97B917231B15 /* Framework2_iOS */ = { @@ -1220,7 +1238,7 @@ ); name = Framework2_iOS; productName = Framework2_iOS; - productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productReference = FR_1EA1EAB0CB9BD96BC550879E58911B12 /* Framework2.framework */; productType = "com.apple.product-type.framework"; }; NT_A3933B4002C44B46F34B238F654D1362 /* Framework2_watchOS */ = { @@ -1236,7 +1254,7 @@ ); name = Framework2_watchOS; productName = Framework2_watchOS; - productReference = FR_20EF6A69E91EC1859026CEBF5AD33FC2 /* Framework2.framework */; + productReference = FR_A0DA89632C14F8DF99F15196E6EBB7D5 /* Framework2.framework */; productType = "com.apple.product-type.framework"; }; NT_B91A6EACD6F5192FECA2E95FD531D0CA /* App_macOS */ = { @@ -1258,7 +1276,7 @@ ); name = App_macOS; productName = App_macOS; - productReference = FR_F18AD4408D0A35A0B9EAE353E8087CDE /* App_macOS.app */; + productReference = FR_640ADF15D2B92FDC35556B2E0934C21C /* App_macOS.app */; productType = "com.apple.product-type.application"; }; NT_BEB0891E36797FE2214A0A9D516D408D /* App_iOS */ = { @@ -1286,7 +1304,7 @@ ); name = App_iOS; productName = App_iOS; - productReference = FR_1672C218968DD6996F05E3C7688F0718 /* App_iOS.app */; + productReference = FR_89162821C7F86126DC7F165E93E0DD23 /* App_iOS.app */; productType = "com.apple.product-type.application"; }; NT_D4BAEEEC88124103C8DFF41FCE206DCE /* App_iOS_UITests */ = { @@ -1303,7 +1321,7 @@ ); name = App_iOS_UITests; productName = App_iOS_UITests; - productReference = FR_9403DF729F7FE2E6B823C1DACE1E6214 /* App_iOS_UITests.xctest */; + productReference = FR_257D977B4221AB25C1EC0ACD6128A89B /* App_iOS_UITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; NT_D4C3E345E90AF9F6CBE8CF226FCFBCD6 /* StaticLibrary_ObjC_tvOS */ = { @@ -1319,7 +1337,7 @@ ); name = StaticLibrary_ObjC_tvOS; productName = StaticLibrary_ObjC_tvOS; - productReference = FR_0EDA4C9F9810C805C447660BF181FFF9 /* StaticLibrary_ObjC.a */; + productReference = FR_5A840A83C22F13EBFE051C061E549F95 /* StaticLibrary_ObjC.a */; productType = "com.apple.product-type.library.static"; }; NT_FA652FEB38562C3A5C93D5EC7ED09776 /* Framework_tvOS */ = { @@ -1338,7 +1356,7 @@ ); name = Framework_tvOS; productName = Framework_tvOS; - productReference = FR_F25AB3F5F1D72653F078DF0E063DC9A5 /* Framework.framework */; + productReference = FR_D5FDE9E6362055E854CE1D3980716A4C /* Framework.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -1434,7 +1452,7 @@ BF_A8A5905BCA8872B2D7B0EF6326B33077 /* MyBundle.bundle in Resources */, BF_149B8FD8F114C531F675E01FBE814609 /* ResourceFolder in Resources */, BF_E2D02DDEDD7DC21831F50A6EAA71E528 /* StandaloneAssets.xcassets in Resources */, - BF_D1EF4AECA866B1132F3F01B826B5EE5D /* iMessageApp.app in Resources */, + BF_F3D57DA3E1F8A539BDD72E02A8C23FC6 /* iMessageApp.app in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 0abae511da87a64733b06895b4b7ecf10942af55 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Mon, 15 Oct 2018 23:27:35 +1100 Subject: [PATCH 41/77] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45cde580..54e25880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## Master #### Added -- Added `weak` Weak linking setting for dependencies [411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen +- Added `weak` linking setting for dependencies [411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen #### Changed - Performance improvements for large projects [388](https://github.com/yonaskolb/XcodeGen/pull/388) [417](https://github.com/yonaskolb/XcodeGen/pull/417) [416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione From 0fcb3dcc78a74d271cca9f09fecb96f5b656655f Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 16 Oct 2018 21:35:31 +1100 Subject: [PATCH 42/77] use context --- Package.resolved | 2 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 11 +++++------ Sources/XcodeGenKit/SourceGenerator.swift | 2 -- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/Package.resolved b/Package.resolved index e5c80559..4e21b93c 100644 --- a/Package.resolved +++ b/Package.resolved @@ -69,7 +69,7 @@ "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { "branch": "id_conflicts", - "revision": "7f382d029fcf01bfd62ec1658f0fdf1d9aafcbb1", + "revision": "7b71bda001e28790e82c61c65f9b2e32e632d625", "version": null } }, diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 2905ac84..2539a22c 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -32,8 +32,9 @@ public class PBXProjGenerator { } } - func addObject(_ object: T) -> T { + func addObject(_ object: T, context: String? = nil) -> T { pbxProj.add(object: object) + object.context = context return object } @@ -131,9 +132,9 @@ public class PBXProjGenerator { lastKnownFileType: lastKnownFileType, path: target.filename, includeInIndex: false - ) + ), + context: target.name ) - fileReference.identifier = target.name targetFileReferences[target.name] = fileReference } @@ -377,7 +378,7 @@ public class PBXProjGenerator { if child1.nameOrPath != child2.nameOrPath { return child1.nameOrPath.localizedStandardCompare(child2.nameOrPath) == .orderedAscending } else { - return child1.identifier ?? "" < child2.identifier ?? "" + return child1.context ?? "" < child2.context ?? "" } } } @@ -389,8 +390,6 @@ public class PBXProjGenerator { } func generateTarget(_ target: Target) throws { - - sourceGenerator.targetName = target.name let carthageDependencies = getAllCarthageDependencies(target: target) let sourceFiles = try sourceGenerator.getAllSourceFiles(targetType: target.type, sources: target.sources) diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index cf2f23c0..a99e5ded 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -24,8 +24,6 @@ class SourceGenerator { ".DS_Store", ] - var targetName: String = "" - private(set) var knownRegions: Set = [] init(project: Project, addObjectClosure: @escaping (PBXObject) -> Void) { From 71e25f8c8c36781fb6ed52ac2abe59004468c6d9 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 18 Oct 2018 22:51:36 +1100 Subject: [PATCH 43/77] update xcodeproj to 6.3.0 --- Package.resolved | 6 +++--- Package.swift | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Package.resolved b/Package.resolved index 4e21b93c..8a451073 100644 --- a/Package.resolved +++ b/Package.resolved @@ -68,9 +68,9 @@ "package": "xcodeproj", "repositoryURL": "https://github.com/tuist/xcodeproj.git", "state": { - "branch": "id_conflicts", - "revision": "7b71bda001e28790e82c61c65f9b2e32e632d625", - "version": null + "branch": null, + "revision": "23da51abd3de3bedaad59a0afbb150b48504b5b0", + "version": "6.3.0" } }, { diff --git a/Package.swift b/Package.swift index bd33808e..a8688b98 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( .package(url: "https://github.com/yonaskolb/JSONUtilities.git", from: "4.1.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"), - .package(url: "https://github.com/tuist/xcodeproj.git", .branch("id_conflicts")), + .package(url: "https://github.com/tuist/xcodeproj.git", from: "6.3.0"), ], targets: [ .target(name: "XcodeGen", dependencies: [ From 6ee0c269441fd3b68164708e523fc2cd46d3553d Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 18 Oct 2018 23:06:33 +1100 Subject: [PATCH 44/77] update changelog link format --- CHANGELOG.md | 360 +++++++++++++++++++++++++-------------------------- 1 file changed, 180 insertions(+), 180 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54e25880..1c2e35b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,30 +3,30 @@ ## Master #### Added -- Added `weak` linking setting for dependencies [411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen +- Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen #### Changed -- Performance improvements for large projects [388](https://github.com/yonaskolb/XcodeGen/pull/388) [417](https://github.com/yonaskolb/XcodeGen/pull/417) [416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione -- Upgraded to xcodeproj 6 [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb -- Upgraded to Swift 4.2 [388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb -- Remove iOS codesigning sdk restriction in setting preset [414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb +- Performance improvements for large projects [#388](https://github.com/yonaskolb/XcodeGen/pull/388) [#417](https://github.com/yonaskolb/XcodeGen/pull/417) [#416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione +- Upgraded to xcodeproj 6 [#388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb +- Upgraded to Swift 4.2 [#388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb +- Remove iOS codesigning sdk restriction in setting preset [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb #### Fixed -- Fixed code signing issues [414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb -- Fixed `TargetSource.headerVisibility` not being set in initializer [419](https://github.com/yonaskolb/XcodeGen/pull/419) @jerrymarino +- Fixed code signing issues [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb +- Fixed `TargetSource.headerVisibility` not being set in initializer [#419](https://github.com/yonaskolb/XcodeGen/pull/419) @jerrymarino ## 1.11.2 If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project will not be deterministic. This will be fixed in an upcoming release with an update to xcodeproj 6.0 #### Fixed -- Fixed release builds in Swift 4.2 [404](https://github.com/yonaskolb/XcodeGen/pull/404) @pepibumur -- Fixed default settings for macOS unit-tests [387](https://github.com/yonaskolb/XcodeGen/pull/387) @frankdilo -- Fixed Copy Headers phase ordering for Xcode 10 [401](https://github.com/yonaskolb/XcodeGen/pull/401) @brentleyjones -- Fixed generated schemes on aggregate targets [394](https://github.com/yonaskolb/XcodeGen/pull/394) @vgorloff +- Fixed release builds in Swift 4.2 [#404](https://github.com/yonaskolb/XcodeGen/pull/404) @pepibumur +- Fixed default settings for macOS unit-tests [#387](https://github.com/yonaskolb/XcodeGen/pull/387) @frankdilo +- Fixed Copy Headers phase ordering for Xcode 10 [#401](https://github.com/yonaskolb/XcodeGen/pull/401) @brentleyjones +- Fixed generated schemes on aggregate targets [#394](https://github.com/yonaskolb/XcodeGen/pull/394) @vgorloff #### Changed -- Added `en` as default value for knownRegions [390](https://github.com/yonaskolb/XcodeGen/pull/390) @Saik0s +- Added `en` as default value for knownRegions [#390](https://github.com/yonaskolb/XcodeGen/pull/390) @Saik0s - Update `PathKit`, `Spectre`, `Yams` and `xcodeproj` dependencies [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.11.1...1.11.2) @@ -34,43 +34,43 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 1.11.1 #### Fixed -- Fixed `FRAMEWORK_SEARCH_PATHS` for `framework` dependency paths with spaces [382](https://github.com/yonaskolb/XcodeGen/pull/382) @brentleyjones -- Fixed aggregate targets not being found with `transitivelyLinkDependencies` [383](https://github.com/yonaskolb/XcodeGen/pull/383) @brentleyjones +- Fixed `FRAMEWORK_SEARCH_PATHS` for `framework` dependency paths with spaces [#382](https://github.com/yonaskolb/XcodeGen/pull/382) @brentleyjones +- Fixed aggregate targets not being found with `transitivelyLinkDependencies` [#383](https://github.com/yonaskolb/XcodeGen/pull/383) @brentleyjones [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.11.0...1.11.1) ## 1.11.0 #### Added -- Added `showEnvVars` to build scripts to disable printing the environment [351](https://github.com/yonaskolb/XcodeGen/pull/351) @keith -- Added `requiresObjCLinking` to `target` [354](https://github.com/yonaskolb/XcodeGen/pull/354) @brentleyjones -- Added `targetTemplates` [355](https://github.com/yonaskolb/XcodeGen/pull/355) @yonaskolb -- Added `aggregateTargets` [353](https://github.com/yonaskolb/XcodeGen/pull/353) [381](https://github.com/yonaskolb/XcodeGen/pull/381) @yonaskolb -- Added `options.groupSortPosition` [356](https://github.com/yonaskolb/XcodeGen/pull/356) @yonaskolb -- Added ability to specify `copyFiles` build phase for sources [345](https://github.com/yonaskolb/XcodeGen/pull/345) @brentleyjones -- Added ability to specify a `minimumXcodeGenVersion` [349](https://github.com/yonaskolb/XcodeGen/pull/349) @brentleyjones -- Added `customArchiveName` and `revealArchiveInOrganizer` to `archive` [367](https://github.com/yonaskolb/XcodeGen/pull/367) @sxua +- Added `showEnvVars` to build scripts to disable printing the environment [#351](https://github.com/yonaskolb/XcodeGen/pull/351) @keith +- Added `requiresObjCLinking` to `target` [#354](https://github.com/yonaskolb/XcodeGen/pull/354) @brentleyjones +- Added `targetTemplates` [#355](https://github.com/yonaskolb/XcodeGen/pull/355) @yonaskolb +- Added `aggregateTargets` [#353](https://github.com/yonaskolb/XcodeGen/pull/353) [#381](https://github.com/yonaskolb/XcodeGen/pull/381) @yonaskolb +- Added `options.groupSortPosition` [#356](https://github.com/yonaskolb/XcodeGen/pull/356) @yonaskolb +- Added ability to specify `copyFiles` build phase for sources [#345](https://github.com/yonaskolb/XcodeGen/pull/345) @brentleyjones +- Added ability to specify a `minimumXcodeGenVersion` [#349](https://github.com/yonaskolb/XcodeGen/pull/349) @brentleyjones +- Added `customArchiveName` and `revealArchiveInOrganizer` to `archive` [#367](https://github.com/yonaskolb/XcodeGen/pull/367) @sxua #### Fixed -- Sort files using localizedStandardCompare [341](https://github.com/yonaskolb/XcodeGen/pull/341) @rohitpal440 -- Use the latest `xcdatamodel` when sorted by version [341](https://github.com/yonaskolb/XcodeGen/pull/341) @rohitpal440 -- Fixed compiler flags being set on non source files in mixed build phase target sources [347](https://github.com/yonaskolb/XcodeGen/pull/347) @brentleyjones -- Fixed `options.xcodeVersion` not being parsed [348](https://github.com/yonaskolb/XcodeGen/pull/348) @brentleyjones -- Fixed non-application targets using `carthage copy-frameworks` [361](https://github.com/yonaskolb/XcodeGen/pull/361) @brentleyjones -- Set `xcdatamodel` based on `xccurrentversion` if available [364](https://github.com/yonaskolb/XcodeGen/pull/364) @rpassis -- XPC Services are now correctly copied [368](https://github.com/yonaskolb/XcodeGen/pull/368) @brentley -- Fixed `.metal` files being added to resources [380](https://github.com/yonaskolb/XcodeGen/pull/380) @vgorloff +- Sort files using localizedStandardCompare [#341](https://github.com/yonaskolb/XcodeGen/pull/341) @rohitpal440 +- Use the latest `xcdatamodel` when sorted by version [#341](https://github.com/yonaskolb/XcodeGen/pull/341) @rohitpal440 +- Fixed compiler flags being set on non source files in mixed build phase target sources [#347](https://github.com/yonaskolb/XcodeGen/pull/347) @brentleyjones +- Fixed `options.xcodeVersion` not being parsed [#348](https://github.com/yonaskolb/XcodeGen/pull/348) @brentleyjones +- Fixed non-application targets using `carthage copy-frameworks` [#361](https://github.com/yonaskolb/XcodeGen/pull/361) @brentleyjones +- Set `xcdatamodel` based on `xccurrentversion` if available [#364](https://github.com/yonaskolb/XcodeGen/pull/364) @rpassis +- XPC Services are now correctly copied [#368](https://github.com/yonaskolb/XcodeGen/pull/368) @brentley +- Fixed `.metal` files being added to resources [#380](https://github.com/yonaskolb/XcodeGen/pull/380) @vgorloff #### Changed -- Improved linking for `static.library` targets [352](https://github.com/yonaskolb/XcodeGen/pull/352) @brentleyjones -- Changed default group sorting to be after files [356](https://github.com/yonaskolb/XcodeGen/pull/356) @yonaskolb -- Moved `Frameworks` and `Products` top level groups to bottom [356](https://github.com/yonaskolb/XcodeGen/pull/356) @yonaskolb -- `modulemap` files are automatically copied to the products directory for static library targets [346](https://github.com/yonaskolb/XcodeGen/pull/346) @brentleyjones -- Public header files are automatically copied to the products directory for static library targets [365](https://github.com/yonaskolb/XcodeGen/pull/365) @brentleyjones -- Swift Objective-C Interface Header files are automatically copied to the products directory for static library targets [366](https://github.com/yonaskolb/XcodeGen/pull/366) @brentleyjones -- `FRAMEWORK_SEARCH_PATHS` are adjusted for `framework` dependencies [373](https://github.com/yonaskolb/XcodeGen/pull/373) @brentley -- `library.static` targets have `SKIP_INSTALL` set to `YES` [358](https://github.com/yonaskolb/XcodeGen/pull/358) @brentley -- Copy files phases have descriptive names [360](https://github.com/yonaskolb/XcodeGen/pull/360) @brentley +- Improved linking for `static.library` targets [#352](https://github.com/yonaskolb/XcodeGen/pull/352) @brentleyjones +- Changed default group sorting to be after files [#356](https://github.com/yonaskolb/XcodeGen/pull/356) @yonaskolb +- Moved `Frameworks` and `Products` top level groups to bottom [#356](https://github.com/yonaskolb/XcodeGen/pull/356) @yonaskolb +- `modulemap` files are automatically copied to the products directory for static library targets [#346](https://github.com/yonaskolb/XcodeGen/pull/346) @brentleyjones +- Public header files are automatically copied to the products directory for static library targets [#365](https://github.com/yonaskolb/XcodeGen/pull/365) @brentleyjones +- Swift Objective-C Interface Header files are automatically copied to the products directory for static library targets [#366](https://github.com/yonaskolb/XcodeGen/pull/366) @brentleyjones +- `FRAMEWORK_SEARCH_PATHS` are adjusted for `framework` dependencies [#373](https://github.com/yonaskolb/XcodeGen/pull/373) @brentley +- `library.static` targets have `SKIP_INSTALL` set to `YES` [#358](https://github.com/yonaskolb/XcodeGen/pull/358) @brentley +- Copy files phases have descriptive names [#360](https://github.com/yonaskolb/XcodeGen/pull/360) @brentley #### Internal - Moved brew formula to homebrew core @@ -81,7 +81,7 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 1.10.3 #### Fixed -- Fixed Mint installations finding `SettingPresets` [338](https://github.com/yonaskolb/XcodeGen/pull/338) @yonaskolb +- Fixed Mint installations finding `SettingPresets` [#338](https://github.com/yonaskolb/XcodeGen/pull/338) @yonaskolb [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.10.2...1.10.3) @@ -95,72 +95,72 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 1.10.1 #### Fixed -- Fixed `transitivelyLinkDependencies` typo [332](https://github.com/yonaskolb/XcodeGen/pull/332) @brentleyjones -- Fixed framework target dependencies not being code signed by default [332](https://github.com/yonaskolb/XcodeGen/pull/332) @yonaskolb +- Fixed `transitivelyLinkDependencies` typo [#332](https://github.com/yonaskolb/XcodeGen/pull/332) @brentleyjones +- Fixed framework target dependencies not being code signed by default [#332](https://github.com/yonaskolb/XcodeGen/pull/332) @yonaskolb #### Changed -- Code sign all dependencies by default except target executables [332](https://github.com/yonaskolb/XcodeGen/pull/332) @yonaskolb +- Code sign all dependencies by default except target executables [#332](https://github.com/yonaskolb/XcodeGen/pull/332) @yonaskolb [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.10.0...1.10.1) ## 1.10.0 #### Added -- Added build rule support [306](https://github.com/yonaskolb/XcodeGen/pull/306) @yonaskolb -- Added support for frameworks in sources [308](https://github.com/yonaskolb/XcodeGen/pull/308) @keith -- Added ability to automatically embed transient dependencies. Controlled with `transitivelyLinkDependencies` [327](https://github.com/yonaskolb/XcodeGen/pull/327) @brentleyjones +- Added build rule support [#306](https://github.com/yonaskolb/XcodeGen/pull/306) @yonaskolb +- Added support for frameworks in sources [#308](https://github.com/yonaskolb/XcodeGen/pull/308) @keith +- Added ability to automatically embed transient dependencies. Controlled with `transitivelyLinkDependencies` [#327](https://github.com/yonaskolb/XcodeGen/pull/327) @brentleyjones #### Changed - Upgraded to Swift 4.1 -- Improved Carthage dependency lookup performance with many targets [298](https://github.com/yonaskolb/XcodeGen/pull/298) @keith -- By default don't CodeSignOnCopy `target` dependencies. This can still be controlled with `Dependency.codeSign` [324](https://github.com/yonaskolb/XcodeGen/pull/324) @yonaskolb +- Improved Carthage dependency lookup performance with many targets [#298](https://github.com/yonaskolb/XcodeGen/pull/298) @keith +- By default don't CodeSignOnCopy `target` dependencies. This can still be controlled with `Dependency.codeSign` [#324](https://github.com/yonaskolb/XcodeGen/pull/324) @yonaskolb #### Fixed -- Fixed PBXBuildFile and PBXFileReference being incorrectly generated for Legacy targets [296](https://github.com/yonaskolb/XcodeGen/pull/296) @sascha -- Fixed required sources build phase not being generated if there are no sources [307](https://github.com/yonaskolb/XcodeGen/pull/307) @yonaskolb -- Fixed install script in binary release [303](https://github.com/yonaskolb/XcodeGen/pull/303) @alvarhansen -- Removed `ENABLE_TESTABILITY` from framework setting presets [299](https://github.com/yonaskolb/XcodeGen/pull/299) @allu22 -- Fixed homebrew installation [297](https://github.com/yonaskolb/XcodeGen/pull/297) @vhbit -- `cc` files are now automatically recognized as source files [317](https://github.com/yonaskolb/XcodeGen/pull/317) @maicki -- Fixed `commandLineArguments` not parsing when they had dots in them [323](https://github.com/yonaskolb/XcodeGen/pull/323) @yonaskolb -- Fixed excluding directories that only have sub directories [326](https://github.com/yonaskolb/XcodeGen/pull/326) @brentleyjones +- Fixed PBXBuildFile and PBXFileReference being incorrectly generated for Legacy targets [#296](https://github.com/yonaskolb/XcodeGen/pull/296) @sascha +- Fixed required sources build phase not being generated if there are no sources [#307](https://github.com/yonaskolb/XcodeGen/pull/307) @yonaskolb +- Fixed install script in binary release [#303](https://github.com/yonaskolb/XcodeGen/pull/303) @alvarhansen +- Removed `ENABLE_TESTABILITY` from framework setting presets [#299](https://github.com/yonaskolb/XcodeGen/pull/299) @allu22 +- Fixed homebrew installation [#297](https://github.com/yonaskolb/XcodeGen/pull/297) @vhbit +- `cc` files are now automatically recognized as source files [#317](https://github.com/yonaskolb/XcodeGen/pull/317) @maicki +- Fixed `commandLineArguments` not parsing when they had dots in them [#323](https://github.com/yonaskolb/XcodeGen/pull/323) @yonaskolb +- Fixed excluding directories that only have sub directories [#326](https://github.com/yonaskolb/XcodeGen/pull/326) @brentleyjones - Made `PBXContainerItemProxy` ID more deterministic -- Fixed generated framework schemes from being executable [328](https://github.com/yonaskolb/XcodeGen/pull/328) @brentleyjones +- Fixed generated framework schemes from being executable [#328](https://github.com/yonaskolb/XcodeGen/pull/328) @brentleyjones [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.9.0...1.10.0) ## 1.9.0 #### Added -- Scheme pre and post actions can now be added to `target.scheme` [280](https://github.com/yonaskolb/XcodeGen/pull/280) @yonaskolb -- Individual files can now be added to `fileGroups` [293](https://github.com/yonaskolb/XcodeGen/pull/293) @yonaskolb +- Scheme pre and post actions can now be added to `target.scheme` [#280](https://github.com/yonaskolb/XcodeGen/pull/280) @yonaskolb +- Individual files can now be added to `fileGroups` [#293](https://github.com/yonaskolb/XcodeGen/pull/293) @yonaskolb #### Changed - Updated to `xcproj` 4.3.0 for Xcode 9.3 updates -- Update default Xcode version to 9.3 including new settings [284](https://github.com/yonaskolb/XcodeGen/pull/284) @LinusU -- **Breaking for ProjectSpec library users** Changed `ProjectSpec` to `Project` and `ProjectSpec.Options` to `SpecOptions` [281](https://github.com/yonaskolb/XcodeGen/pull/281) @jerrymarino +- Update default Xcode version to 9.3 including new settings [#284](https://github.com/yonaskolb/XcodeGen/pull/284) @LinusU +- **Breaking for ProjectSpec library users** Changed `ProjectSpec` to `Project` and `ProjectSpec.Options` to `SpecOptions` [#281](https://github.com/yonaskolb/XcodeGen/pull/281) @jerrymarino #### Fixed -- Fixed manual build phase of `none` not being applied to folders [288](https://github.com/yonaskolb/XcodeGen/pull/288) @yonaskolb -- Quoted values now correctly get parsed as strings [282](https://github.com/yonaskolb/XcodeGen/pull/282) @yonaskolb -- Fixed adding a root source folder when `createIntermediateGroups` is on [291](https://github.com/yonaskolb/XcodeGen/pull/291) @yonaskolb -- Fixed Homebrew installations issues on some machines [289](https://github.com/yonaskolb/XcodeGen/pull/289) @vhbit -- Fixed files that are added as root sources from having invalid parent groups outside the project directory [293](https://github.com/yonaskolb/XcodeGen/pull/293) @yonaskolb +- Fixed manual build phase of `none` not being applied to folders [#288](https://github.com/yonaskolb/XcodeGen/pull/288) @yonaskolb +- Quoted values now correctly get parsed as strings [#282](https://github.com/yonaskolb/XcodeGen/pull/282) @yonaskolb +- Fixed adding a root source folder when `createIntermediateGroups` is on [#291](https://github.com/yonaskolb/XcodeGen/pull/291) @yonaskolb +- Fixed Homebrew installations issues on some machines [#289](https://github.com/yonaskolb/XcodeGen/pull/289) @vhbit +- Fixed files that are added as root sources from having invalid parent groups outside the project directory [#293](https://github.com/yonaskolb/XcodeGen/pull/293) @yonaskolb [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.8.0...1.9.0) ## 1.8.0 #### Added -- Added Project `defaultConfig` [269](https://github.com/yonaskolb/XcodeGen/pull/269) @keith -- Added Target `attributes` [276](https://github.com/yonaskolb/XcodeGen/pull/276) @yonaskolb -- Automatically set `DevelopmentTeam` and `ProvisioningStyle` within `TargetAttributes` if relevant build settings are defined [277](https://github.com/yonaskolb/XcodeGen/pull/277) @yonaskolb +- Added Project `defaultConfig` [#269](https://github.com/yonaskolb/XcodeGen/pull/269) @keith +- Added Target `attributes` [#276](https://github.com/yonaskolb/XcodeGen/pull/276) @yonaskolb +- Automatically set `DevelopmentTeam` and `ProvisioningStyle` within `TargetAttributes` if relevant build settings are defined [#277](https://github.com/yonaskolb/XcodeGen/pull/277) @yonaskolb #### Fixed -- Fixed default `LD_RUNPATH_SEARCH_PATHS` for app extensions [272](https://github.com/yonaskolb/XcodeGen/pull/272) @LinusU +- Fixed default `LD_RUNPATH_SEARCH_PATHS` for app extensions [#272](https://github.com/yonaskolb/XcodeGen/pull/272) @LinusU #### Internal -- Make `LegacyTarget` init public [264](https://github.com/yonaskolb/XcodeGen/pull/264) @jerrymarino +- Make `LegacyTarget` init public [#264](https://github.com/yonaskolb/XcodeGen/pull/264) @jerrymarino - Upgrade to *xcproj* to 4.2.0, *Yams* to 0.6.0 and *PathKit* to 0.9.1 @yonaskolb [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.7.0...1.8.0) @@ -169,113 +169,113 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil #### Added -- Added support for scheme environment variables [239](https://github.com/yonaskolb/XcodeGen/pull/239) [254](https://github.com/yonaskolb/XcodeGen/pull/254) [259](https://github.com/yonaskolb/XcodeGen/pull/259) @turekj @toshi0383 -- Added `carthageExecutablePath` option [244](https://github.com/yonaskolb/XcodeGen/pull/244) @akkyie -- Added `parallelizeBuild` and `buildImplicitDependencies` to Schemes [241](https://github.com/yonaskolb/XcodeGen/pull/241) @rahul-malik +- Added support for scheme environment variables [#239](https://github.com/yonaskolb/XcodeGen/pull/239) [#254](https://github.com/yonaskolb/XcodeGen/pull/254) [#259](https://github.com/yonaskolb/XcodeGen/pull/259) @turekj @toshi0383 +- Added `carthageExecutablePath` option [#244](https://github.com/yonaskolb/XcodeGen/pull/244) @akkyie +- Added `parallelizeBuild` and `buildImplicitDependencies` to Schemes [#241](https://github.com/yonaskolb/XcodeGen/pull/241) @rahul-malik @yonaskolb -- Added support for Core Data `xcdatamodeld` files [249](https://github.com/yonaskolb/XcodeGen/pull/249) @yonaskolb -- Projects are now generated atomically by writing to a temporary directory first [250](https://github.com/yonaskolb/XcodeGen/pull/250) @yonaskolb -- Added script for adding precompiled binary to releases [246](https://github.com/yonaskolb/XcodeGen/pull/246) @toshi0383 -- Added optional `headerVisibilty` to target source. This still defaults to public [252](https://github.com/yonaskolb/XcodeGen/pull/252) @yonaskolb +- Added support for Core Data `xcdatamodeld` files [#249](https://github.com/yonaskolb/XcodeGen/pull/249) @yonaskolb +- Projects are now generated atomically by writing to a temporary directory first [#250](https://github.com/yonaskolb/XcodeGen/pull/250) @yonaskolb +- Added script for adding precompiled binary to releases [#246](https://github.com/yonaskolb/XcodeGen/pull/246) @toshi0383 +- Added optional `headerVisibilty` to target source. This still defaults to public [#252](https://github.com/yonaskolb/XcodeGen/pull/252) @yonaskolb - Releases now include a pre-compiled binary and setting presets, including an install script #### Fixed -- Fixed Mint installation from reading setting presets [248](https://github.com/yonaskolb/XcodeGen/pull/248) @yonaskolb -- Fixed setting `buildPhase` on a `folder` source. This allows for a folder of header files [254](https://github.com/yonaskolb/XcodeGen/pull/254) @toshi0383 -- Carthage dependencies are not automatically embedded into test targets [256](https://github.com/yonaskolb/XcodeGen/pull/256) @yonaskolb -- Carthage dependencies now respect the `embed` property [256](https://github.com/yonaskolb/XcodeGen/pull/256) @yonaskolb -- iMessage extensions now have proper setting presets in regards to app icon and runtime search paths [255](https://github.com/yonaskolb/XcodeGen/pull/255) @yonaskolb -- Excluded files are not added within .lproj directories [238](https://github.com/yonaskolb/XcodeGen/pull/238) @toshi0383 +- Fixed Mint installation from reading setting presets [#248](https://github.com/yonaskolb/XcodeGen/pull/248) @yonaskolb +- Fixed setting `buildPhase` on a `folder` source. This allows for a folder of header files [#254](https://github.com/yonaskolb/XcodeGen/pull/254) @toshi0383 +- Carthage dependencies are not automatically embedded into test targets [#256](https://github.com/yonaskolb/XcodeGen/pull/256) @yonaskolb +- Carthage dependencies now respect the `embed` property [#256](https://github.com/yonaskolb/XcodeGen/pull/256) @yonaskolb +- iMessage extensions now have proper setting presets in regards to app icon and runtime search paths [#255](https://github.com/yonaskolb/XcodeGen/pull/255) @yonaskolb +- Excluded files are not added within .lproj directories [#238](https://github.com/yonaskolb/XcodeGen/pull/238) @toshi0383 [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.6.0...1.7.0) ## 1.6.0 #### Added -- Added scheme pre-actions and post-actions [231](https://github.com/yonaskolb/XcodeGen/pull/231) @kastiglione -- Added `options.disabledValidations` including `missingConfigs` to disable project validation errors [220](https://github.com/yonaskolb/XcodeGen/pull/220) @keith -- Generate UI Test Target Attributes [221](https://github.com/yonaskolb/XcodeGen/pull/221) @anreitersimon +- Added scheme pre-actions and post-actions [#231](https://github.com/yonaskolb/XcodeGen/pull/231) @kastiglione +- Added `options.disabledValidations` including `missingConfigs` to disable project validation errors [#220](https://github.com/yonaskolb/XcodeGen/pull/220) @keith +- Generate UI Test Target Attributes [#221](https://github.com/yonaskolb/XcodeGen/pull/221) @anreitersimon #### Fixed -- Filter out duplicate source files [217](https://github.com/yonaskolb/XcodeGen/pull/217) @allu22 -- Fixed how `lastKnownFileType` and `explicitFileType` were generated across platforms [115](https://github.com/yonaskolb/XcodeGen/pull/115) @toshi0383 +- Filter out duplicate source files [#217](https://github.com/yonaskolb/XcodeGen/pull/217) @allu22 +- Fixed how `lastKnownFileType` and `explicitFileType` were generated across platforms [#115](https://github.com/yonaskolb/XcodeGen/pull/115) @toshi0383 - Removed a few cases of project diffs when opening the project in Xcode @yonaskolb - Fixed Swift not being embedded by default in watch apps @yonaskolb #### Changed -- Change arrays to strings in setting presets [218](https://github.com/yonaskolb/XcodeGen/pull/218) @allu22 -- Updated to xcproj 4.0 [227](https://github.com/yonaskolb/XcodeGen/pull/227) +- Change arrays to strings in setting presets [#218](https://github.com/yonaskolb/XcodeGen/pull/218) @allu22 +- Updated to xcproj 4.0 [#227](https://github.com/yonaskolb/XcodeGen/pull/227) [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.5.0...1.6.0) ## 1.5.0 #### Added -- added support for `gatherCoverageData` flag in target schemes [170](https://github.com/yonaskolb/XcodeGen/pull/170) @alexruperez -- added support for `commandLineOptions` in target schemes [172](https://github.com/yonaskolb/XcodeGen/pull/172) @rahul-malik -- added Project spec as a SwiftPM library for reuse in other projects [164](https://github.com/yonaskolb/XcodeGen/pull/164) @soffes -- added `implicit` option for framework dependencies [166](https://github.com/yonaskolb/XcodeGen/pull/166) @sbarow -- added `--quite` option to CLI [167](https://github.com/yonaskolb/XcodeGen/pull/167) @soffes -- can now print version with `-v` in addition to `--version` [174](https://github.com/yonaskolb/XcodeGen/pull/174) @kastiglione -- added support for legacy targets [175](https://github.com/yonaskolb/XcodeGen/pull/175) @bkase -- added support for indentation options [190](https://github.com/yonaskolb/XcodeGen/pull/190) @bkase -- added source excludes [135](https://github.com/yonaskolb/XcodeGen/pull/135) [161](https://github.com/yonaskolb/XcodeGen/pull/161) [190](https://github.com/yonaskolb/XcodeGen/pull/190) @peymankh @ -- added `options.xcodeVersion` [197](https://github.com/yonaskolb/XcodeGen/pull/197) @yonaskolb @peymankh -- add test targets to Scheme [195](https://github.com/yonaskolb/XcodeGen/pull/195) @vhbit -- add option to make a source file optional incase it will be generated later [200](https://github.com/yonaskolb/XcodeGen/pull/200) @vhbit -- finalize Scheme spec [201](https://github.com/yonaskolb/XcodeGen/pull/201) @yonaskolb -- added `buildPhase` setting to target source for overriding the guessed build phase of files [206](https://github.com/yonaskolb/XcodeGen/pull/206) @yonaskolb -- added `deploymentTarget` setting to project and target [205](https://github.com/yonaskolb/XcodeGen/pull/205) @yonaskolb +- added support for `gatherCoverageData` flag in target schemes [#170](https://github.com/yonaskolb/XcodeGen/pull/170) @alexruperez +- added support for `commandLineOptions` in target schemes [#172](https://github.com/yonaskolb/XcodeGen/pull/172) @rahul-malik +- added Project spec as a SwiftPM library for reuse in other projects [#164](https://github.com/yonaskolb/XcodeGen/pull/164) @soffes +- added `implicit` option for framework dependencies [#166](https://github.com/yonaskolb/XcodeGen/pull/166) @sbarow +- added `--quite` option to CLI [#167](https://github.com/yonaskolb/XcodeGen/pull/167) @soffes +- can now print version with `-v` in addition to `--version` [#174](https://github.com/yonaskolb/XcodeGen/pull/174) @kastiglione +- added support for legacy targets [#175](https://github.com/yonaskolb/XcodeGen/pull/175) @bkase +- added support for indentation options [#190](https://github.com/yonaskolb/XcodeGen/pull/190) @bkase +- added source excludes [#135](https://github.com/yonaskolb/XcodeGen/pull/135) [#161](https://github.com/yonaskolb/XcodeGen/pull/161) [#190](https://github.com/yonaskolb/XcodeGen/pull/190) @peymankh @ +- added `options.xcodeVersion` [#197](https://github.com/yonaskolb/XcodeGen/pull/197) @yonaskolb @peymankh +- add test targets to Scheme [#195](https://github.com/yonaskolb/XcodeGen/pull/195) @vhbit +- add option to make a source file optional incase it will be generated later [#200](https://github.com/yonaskolb/XcodeGen/pull/200) @vhbit +- finalize Scheme spec [#201](https://github.com/yonaskolb/XcodeGen/pull/201) @yonaskolb +- added `buildPhase` setting to target source for overriding the guessed build phase of files [#206](https://github.com/yonaskolb/XcodeGen/pull/206) @yonaskolb +- added `deploymentTarget` setting to project and target [#205](https://github.com/yonaskolb/XcodeGen/pull/205) @yonaskolb #### Changed - huge performance improvements when writing the project file due to changes in xcproj - updated dependencies - minor logging changes - updated Project Spec documentation -- scan for `Info.plist` lazely [194](https://github.com/yonaskolb/XcodeGen/pull/194) @kastiglione -- change setting presets so that icon settings only get applied to application targets [204](https://github.com/yonaskolb/XcodeGen/pull/204) @yonaskolb -- changed scheme build targets format [203](https://github.com/yonaskolb/XcodeGen/pull/203) @yonaskolb -- when specifying a `--spec` argument, the default for the `--project` path is now the directory containing the spec [211](https://github.com/yonaskolb/XcodeGen/pull/211) @yonaskolb +- scan for `Info.plist` lazely [#194](https://github.com/yonaskolb/XcodeGen/pull/194) @kastiglione +- change setting presets so that icon settings only get applied to application targets [#204](https://github.com/yonaskolb/XcodeGen/pull/204) @yonaskolb +- changed scheme build targets format [#203](https://github.com/yonaskolb/XcodeGen/pull/203) @yonaskolb +- when specifying a `--spec` argument, the default for the `--project` path is now the directory containing the spec [#211](https://github.com/yonaskolb/XcodeGen/pull/211) @yonaskolb #### Fixed -- fixed shell scripts escaping quotes twice [186](https://github.com/yonaskolb/XcodeGen/pull/186) @allu22 -- fixed `createIntermediateGroups` when using a relative spec path [184](https://github.com/yonaskolb/XcodeGen/pull/184) @kastiglione -- fixed command line arguments for test and profile from being overridden [199](https://github.com/yonaskolb/XcodeGen/pull/199) @vhbit +- fixed shell scripts escaping quotes twice [#186](https://github.com/yonaskolb/XcodeGen/pull/186) @allu22 +- fixed `createIntermediateGroups` when using a relative spec path [#184](https://github.com/yonaskolb/XcodeGen/pull/184) @kastiglione +- fixed command line arguments for test and profile from being overridden [#199](https://github.com/yonaskolb/XcodeGen/pull/199) @vhbit - fixed files deep within a hierarchy having the path for a name -- fixed source files from being duplicated if referenced with different casing [212](https://github.com/yonaskolb/XcodeGen/pull/212) @yonaskolb -- fixed target product name not being written. Fixes integration with R.swift [213](https://github.com/yonaskolb/XcodeGen/pull/213) @yonaskolb +- fixed source files from being duplicated if referenced with different casing [#212](https://github.com/yonaskolb/XcodeGen/pull/212) @yonaskolb +- fixed target product name not being written. Fixes integration with R.swift [#213](https://github.com/yonaskolb/XcodeGen/pull/213) @yonaskolb [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.4.0...1.5.0) ## 1.4.0 #### Added -- added `--version` flag [112](https://github.com/yonaskolb/XcodeGen/pull/112) @mironal -- added support for adding individual file sources [106](https://github.com/yonaskolb/XcodeGen/pull/106) [133](https://github.com/yonaskolb/XcodeGen/pull/133) [142](https://github.com/yonaskolb/XcodeGen/pull/142) [139](https://github.com/yonaskolb/XcodeGen/pull/139) @bkase -- added source compiler flag support [121](https://github.com/yonaskolb/XcodeGen/pull/121) @bkase -- added `ProjectSpec.options.createIntermediateGroups` [108](https://github.com/yonaskolb/XcodeGen/pull/108) @bkase -- added better json loading support [127](https://github.com/yonaskolb/XcodeGen/pull/127) @rahul-malik -- added source `name` for customizing names of source directories and file [146](https://github.com/yonaskolb/XcodeGen/pull/146) @yonaskolb -- added folder reference source support via a new `type` property [151](https://github.com/yonaskolb/XcodeGen/pull/151) @yonaskolb -- added `ProjectSpec.options.developmentLanguage` [155](https://github.com/yonaskolb/XcodeGen/pull/155) @yonaskolb +- added `--version` flag [#112](https://github.com/yonaskolb/XcodeGen/pull/112) @mironal +- added support for adding individual file sources [#106](https://github.com/yonaskolb/XcodeGen/pull/106) [#133](https://github.com/yonaskolb/XcodeGen/pull/133) [#142](https://github.com/yonaskolb/XcodeGen/pull/142) [#139](https://github.com/yonaskolb/XcodeGen/pull/139) @bkase +- added source compiler flag support [#121](https://github.com/yonaskolb/XcodeGen/pull/121) @bkase +- added `ProjectSpec.options.createIntermediateGroups` [#108](https://github.com/yonaskolb/XcodeGen/pull/108) @bkase +- added better json loading support [#127](https://github.com/yonaskolb/XcodeGen/pull/127) @rahul-malik +- added source `name` for customizing names of source directories and file [#146](https://github.com/yonaskolb/XcodeGen/pull/146) @yonaskolb +- added folder reference source support via a new `type` property [#151](https://github.com/yonaskolb/XcodeGen/pull/151) @yonaskolb +- added `ProjectSpec.options.developmentLanguage` [#155](https://github.com/yonaskolb/XcodeGen/pull/155) @yonaskolb #### Changed -- updated to xcproj 1.2.0 [113](https://github.com/yonaskolb/XcodeGen/pull/113) @yonaskolb -- build settings from presets will be removed if they are provided in `xcconfig` files [77](https://github.com/yonaskolb/XcodeGen/pull/77) @toshi0383 -- all files and groups are sorted by type and then alphabetically [144](https://github.com/yonaskolb/XcodeGen/pull/144) @yonaskolb -- target sources can now have an expanded form [119](https://github.com/yonaskolb/XcodeGen/pull/119) @yonaskolb -- empty build phases are now not generated [149](https://github.com/yonaskolb/XcodeGen/pull/149) @yonaskolb -- make UUIDs more deterministic [154](https://github.com/yonaskolb/XcodeGen/pull/154) @yonaskolb +- updated to xcproj 1.2.0 [#113](https://github.com/yonaskolb/XcodeGen/pull/113) @yonaskolb +- build settings from presets will be removed if they are provided in `xcconfig` files [#77](https://github.com/yonaskolb/XcodeGen/pull/77) @toshi0383 +- all files and groups are sorted by type and then alphabetically [#144](https://github.com/yonaskolb/XcodeGen/pull/144) @yonaskolb +- target sources can now have an expanded form [#119](https://github.com/yonaskolb/XcodeGen/pull/119) @yonaskolb +- empty build phases are now not generated [#149](https://github.com/yonaskolb/XcodeGen/pull/149) @yonaskolb +- make UUIDs more deterministic [#154](https://github.com/yonaskolb/XcodeGen/pull/154) @yonaskolb #### Fixed -- only add headers to frameworks and libraries [118](https://github.com/yonaskolb/XcodeGen/pull/118) @ryohey -- fixed localized files with the same name [126](https://github.com/yonaskolb/XcodeGen/pull/126) @ryohey -- fix intermediate sources [144](https://github.com/yonaskolb/XcodeGen/pull/144) @yonaskolb -- fix cyclical target dependencies not working [147](https://github.com/yonaskolb/XcodeGen/pull/147) @yonaskolb -- fix directory bundles not being added properly when referenced directly [148](https://github.com/yonaskolb/XcodeGen/pull/1478) @yonaskolb -- made `mm`, `c` and `S` file be parsed as source files [120](https://github.com/yonaskolb/XcodeGen/pull/120) [125](https://github.com/yonaskolb/XcodeGen/pull/125) [138](https://github.com/yonaskolb/XcodeGen/pull/138) @bkase @enmiller -- fix the generation of localized variant groups if there is no `Base.lproj` [157](https://github.com/yonaskolb/XcodeGen/pull/157) @ryohey -- all localizations found are added to a projects known regions [157](https://github.com/yonaskolb/XcodeGen/pull/157) @ryohey +- only add headers to frameworks and libraries [#118](https://github.com/yonaskolb/XcodeGen/pull/118) @ryohey +- fixed localized files with the same name [#126](https://github.com/yonaskolb/XcodeGen/pull/126) @ryohey +- fix intermediate sources [#144](https://github.com/yonaskolb/XcodeGen/pull/144) @yonaskolb +- fix cyclical target dependencies not working [#147](https://github.com/yonaskolb/XcodeGen/pull/147) @yonaskolb +- fix directory bundles not being added properly when referenced directly [#148](https://github.com/yonaskolb/XcodeGen/pull/1478) @yonaskolb +- made `mm`, `c` and `S` file be parsed as source files [#120](https://github.com/yonaskolb/XcodeGen/pull/120) [#125](https://github.com/yonaskolb/XcodeGen/pull/125) [#138](https://github.com/yonaskolb/XcodeGen/pull/138) @bkase @enmiller +- fix the generation of localized variant groups if there is no `Base.lproj` [#157](https://github.com/yonaskolb/XcodeGen/pull/157) @ryohey +- all localizations found are added to a projects known regions [#157](https://github.com/yonaskolb/XcodeGen/pull/157) @ryohey #### Internal - refactoring @@ -287,26 +287,26 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 1.3.0 #### Added -- generate output files for Carthage copy-frameworks script [84](https://github.com/yonaskolb/XcodeGen/pull/84) @mironal -- added options.settingPreset to choose which setting presets get applied [100](https://github.com/yonaskolb/XcodeGen/pull/101) @yonaskolb -- added `link` option for target dependencies [109](https://github.com/yonaskolb/XcodeGen/pull/109) @keith +- generate output files for Carthage copy-frameworks script [#84](https://github.com/yonaskolb/XcodeGen/pull/84) @mironal +- added options.settingPreset to choose which setting presets get applied [#100](https://github.com/yonaskolb/XcodeGen/pull/101) @yonaskolb +- added `link` option for target dependencies [#109](https://github.com/yonaskolb/XcodeGen/pull/109) @keith #### Changed -- updated to xcproj 0.4.1 [85](https://github.com/yonaskolb/XcodeGen/pull/85) @enmiller -- don't copy base settings if config type has been left out [100](https://github.com/yonaskolb/XcodeGen/pull/100) @yonaskolb -- generate localised files under a single variant group [70](https://github.com/yonaskolb/XcodeGen/pull/70) @ryohey -- don't apply common project settings to configs with no type [100](https://github.com/yonaskolb/XcodeGen/pull/100) @yonaskolb -- config references in settings can now be partially matched and are case insensitive [111](https://github.com/yonaskolb/XcodeGen/pull/111) @yonaskolb +- updated to xcproj 0.4.1 [#85](https://github.com/yonaskolb/XcodeGen/pull/85) @enmiller +- don't copy base settings if config type has been left out [#100](https://github.com/yonaskolb/XcodeGen/pull/100) @yonaskolb +- generate localised files under a single variant group [#70](https://github.com/yonaskolb/XcodeGen/pull/70) @ryohey +- don't apply common project settings to configs with no type [#100](https://github.com/yonaskolb/XcodeGen/pull/100) @yonaskolb +- config references in settings can now be partially matched and are case insensitive [#111](https://github.com/yonaskolb/XcodeGen/pull/111) @yonaskolb - other small internal changes @yonaskolb #### Fixed -- embed Carthage frameworks for macOS [82](https://github.com/yonaskolb/XcodeGen/pull/82) @toshi0383 -- fixed copying of watchOS app resources [96](https://github.com/yonaskolb/XcodeGen/pull/96) @keith -- automatically ignore more file types for a target's sources (entitlements, gpx, apns) [94](https://github.com/yonaskolb/XcodeGen/pull/94) @keith -- change make build to a PHONY task [98](https://github.com/yonaskolb/XcodeGen/pull/98) @keith -- allow copying of resource files from dependant targets [95](https://github.com/yonaskolb/XcodeGen/pull/95) @keith -- fixed library linking [93](https://github.com/yonaskolb/XcodeGen/pull/93) @keith -- fixed duplicate carthage file references [107](https://github.com/yonaskolb/XcodeGen/pull/107) @yonaskolb +- embed Carthage frameworks for macOS [#82](https://github.com/yonaskolb/XcodeGen/pull/82) @toshi0383 +- fixed copying of watchOS app resources [#96](https://github.com/yonaskolb/XcodeGen/pull/96) @keith +- automatically ignore more file types for a target's sources (entitlements, gpx, apns) [#94](https://github.com/yonaskolb/XcodeGen/pull/94) @keith +- change make build to a PHONY task [#98](https://github.com/yonaskolb/XcodeGen/pull/98) @keith +- allow copying of resource files from dependant targets [#95](https://github.com/yonaskolb/XcodeGen/pull/95) @keith +- fixed library linking [#93](https://github.com/yonaskolb/XcodeGen/pull/93) @keith +- fixed duplicate carthage file references [#107](https://github.com/yonaskolb/XcodeGen/pull/107) @yonaskolb - an error is now shown if you try and generate a target scheme and don't have debug and release builds @yonaskolb [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.2.4...1.3.0) @@ -326,8 +326,8 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 1.2.3 #### Fixed -- Fixed wrong carthage directory name reference for macOS [74](https://github.com/yonaskolb/XcodeGen/pull/74) @toshi0383 -- Removed unnecessary `carthage copy-frameworks` for macOS app target [76](https://github.com/yonaskolb/XcodeGen/pull/76) @toshi0383 +- Fixed wrong carthage directory name reference for macOS [#74](https://github.com/yonaskolb/XcodeGen/pull/74) @toshi0383 +- Removed unnecessary `carthage copy-frameworks` for macOS app target [#76](https://github.com/yonaskolb/XcodeGen/pull/76) @toshi0383 - Added some missing default settings for framework targets. `SKIP_INSTALL: YES` fixes archiving - Filter out nulls from setting presets if specifying an empty string @@ -349,17 +349,17 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil #### Added - `include` now supports a single string as well as a list -- add support setting xcconfig files on a project with `configFiles` [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64) -- add `fileGroups` to project spec for adding groups of files that aren't target source files [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64) +- add support setting xcconfig files on a project with `configFiles` [#64](https://github.com/yonaskolb/XcodeGen/pull/64) +- add `fileGroups` to project spec for adding groups of files that aren't target source files [#64](https://github.com/yonaskolb/XcodeGen/pull/64) - better output (more info, emoji, colors) -- add `options.bundleIdPrefix` for autogenerating `PRODUCT_BUNDLE_IDENTIFIER` [PR#67](https://github.com/yonaskolb/XcodeGen/pull/67) -- add `:REPLACE` syntax when merging `include` [PR#68](https://github.com/yonaskolb/XcodeGen/pull/68) +- add `options.bundleIdPrefix` for autogenerating `PRODUCT_BUNDLE_IDENTIFIER` [#67](https://github.com/yonaskolb/XcodeGen/pull/67) +- add `:REPLACE` syntax when merging `include` [#68](https://github.com/yonaskolb/XcodeGen/pull/68) - add `mint` installation support #### Fixed - fixed homebrew installation -- fixed target xcconfig files not working via `configFiles` [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64) -- look for `INFOPLIST_FILE` setting in project and xcconfig files before adding it automatically. It was just looking in target settings before [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64) +- fixed target xcconfig files not working via `configFiles` [#64](https://github.com/yonaskolb/XcodeGen/pull/64) +- look for `INFOPLIST_FILE` setting in project and xcconfig files before adding it automatically. It was just looking in target settings before [#64](https://github.com/yonaskolb/XcodeGen/pull/64) - exit with error on failure [Commits](https://github.com/yonaskolb/XcodeGen/compare/1.1.0...1.2.0) @@ -383,16 +383,16 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 1.0.0 #### Added -- Swift 4 support [PR#52](https://github.com/yonaskolb/XcodeGen/pull/52) -- Support for C and C++ files [PR#48](https://github.com/yonaskolb/XcodeGen/pull/48) by @antoniocasero +- Swift 4 support [#52](https://github.com/yonaskolb/XcodeGen/pull/52) +- Support for C and C++ files [#48](https://github.com/yonaskolb/XcodeGen/pull/48) by @antoniocasero - Xcode 9 default settings #### Fixed -- fixed empty string in YAML not being parsed properly [PR#50](https://github.com/yonaskolb/XcodeGen/pull/50) by @antoniocasero +- fixed empty string in YAML not being parsed properly [#50](https://github.com/yonaskolb/XcodeGen/pull/50) by @antoniocasero #### Changed -- updated to xcodeproj 0.1.2 [PR#56](https://github.com/yonaskolb/XcodeGen/pull/56) -- **BREAKING**: changed target definitions from list to map [PR#54](https://github.com/yonaskolb/XcodeGen/pull/54) See [Project Spec](docs/ProjectSpec.md) +- updated to xcodeproj 0.1.2 [#56](https://github.com/yonaskolb/XcodeGen/pull/56) +- **BREAKING**: changed target definitions from list to map [#54](https://github.com/yonaskolb/XcodeGen/pull/54) See [Project Spec](docs/ProjectSpec.md) [Commits](https://github.com/yonaskolb/XcodeGen/compare/0.6.1...1.0.0) @@ -400,18 +400,18 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 0.6.1 #### Added -- Ability to set PBXProject attributes [PR#45](https://github.com/yonaskolb/XcodeGen/pull/45) +- Ability to set PBXProject attributes [#45](https://github.com/yonaskolb/XcodeGen/pull/45) #### Changed - Don't bother linking target frameworks for target dependencies. -- Move code signing default settings from all iOS targets to iOS application targets, via Product + Platform setting preset files [PR#46](https://github.com/yonaskolb/XcodeGen/pull/46) +- Move code signing default settings from all iOS targets to iOS application targets, via Product + Platform setting preset files [#46](https://github.com/yonaskolb/XcodeGen/pull/46) [Commits](https://github.com/yonaskolb/XcodeGen/compare/0.6.0...0.6.1) ## 0.6.0 #### Added -- Allow a project spec to include other project specs [PR#44](https://github.com/yonaskolb/XcodeGen/pull/44) +- Allow a project spec to include other project specs [#44](https://github.com/yonaskolb/XcodeGen/pull/44) #### Changed - Changed default spec path to `project.yml` @@ -424,16 +424,16 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil #### Fixed - Fix embedded framework dependencies - Add `CODE_SIGN_IDENTITY[sdk=iphoneos*]` back to iOS targets -- Fix build scripts with "" generating invalid projects [PR#43](https://github.com/yonaskolb/XcodeGen/pull/43) +- Fix build scripts with "" generating invalid projects [#43](https://github.com/yonaskolb/XcodeGen/pull/43) [Commits](https://github.com/yonaskolb/XcodeGen/compare/0.5.0...0.5.1) ## 0.5.0 #### Added -- Added multi platform targets [PR#35](https://github.com/yonaskolb/XcodeGen/pull/35) -- Automatically generate platform specific `FRAMEWORK_SEARCH_PATHS` for Carthage dependencies [PR#38](https://github.com/yonaskolb/XcodeGen/pull/38) -- Automatically find Info.plist and set `INFOPLIST_FILE` build setting if it doesn't exist on a target [PR#40](https://github.com/yonaskolb/XcodeGen/pull/40) -- Add options for controlling embedding of dependencies [PR#37](https://github.com/yonaskolb/XcodeGen/pull/37) +- Added multi platform targets [#35](https://github.com/yonaskolb/XcodeGen/pull/35) +- Automatically generate platform specific `FRAMEWORK_SEARCH_PATHS` for Carthage dependencies [#38](https://github.com/yonaskolb/XcodeGen/pull/38) +- Automatically find Info.plist and set `INFOPLIST_FILE` build setting if it doesn't exist on a target [#40](https://github.com/yonaskolb/XcodeGen/pull/40) +- Add options for controlling embedding of dependencies [#37](https://github.com/yonaskolb/XcodeGen/pull/37) #### Fixed - Fixed localized files not being added to a target's resources @@ -447,23 +447,23 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 0.4.0 ##### Added -- Homebrew support [PR#16](https://github.com/yonaskolb/XcodeGen/pull/16) by @pepibumur -- Added `runOnlyWhenInstalling` to build scripts [PR#32](https://github.com/yonaskolb/XcodeGen/pull/32) -- Added `carthageBuildPath` option [PR#34](https://github.com/yonaskolb/XcodeGen/pull/34) +- Homebrew support [#16](https://github.com/yonaskolb/XcodeGen/pull/16) by @pepibumur +- Added `runOnlyWhenInstalling` to build scripts [#32](https://github.com/yonaskolb/XcodeGen/pull/32) +- Added `carthageBuildPath` option [#34](https://github.com/yonaskolb/XcodeGen/pull/34) #### Fixed - Fixed installations of XcodeGen not applying build setting presets for configs, products, and platforms, due to missing resources #### Changed -- Upgraded to https://github.com/swift-xcode/xcodeproj 0.1.1 [PR#33](https://github.com/yonaskolb/XcodeGen/pull/33) +- Upgraded to https://github.com/swift-xcode/xcodeproj 0.1.1 [#33](https://github.com/yonaskolb/XcodeGen/pull/33) [Commits](https://github.com/yonaskolb/XcodeGen/compare/0.3.0...0.4.0) ## 0.3.0 - Extensions and Scheme Tests #### Added -- Support for app extension dependencies, using the same `target: MyExtension` syntax [PR#19](https://github.com/yonaskolb/XcodeGen/pull/19) -- Added test targets to generated target schemes via `Target.scheme.testTargets` [PR#21](https://github.com/yonaskolb/XcodeGen/pull/21) +- Support for app extension dependencies, using the same `target: MyExtension` syntax [#19](https://github.com/yonaskolb/XcodeGen/pull/19) +- Added test targets to generated target schemes via `Target.scheme.testTargets` [#21](https://github.com/yonaskolb/XcodeGen/pull/21) #### Changed - Updated xcodeproj to 0.0.9 @@ -479,7 +479,7 @@ If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project wil ## 0.2.0 - Build scripts #### Added -- Added Target build scripts with `Target.prebuildScripts` and `Target.postbuildScripts` [PR#17](https://github.com/yonaskolb/XcodeGen/pull/17) +- Added Target build scripts with `Target.prebuildScripts` and `Target.postbuildScripts` [#17](https://github.com/yonaskolb/XcodeGen/pull/17) - Support for absolute paths in target sources, run script files, and config files - Add validation for incorrect `Target.configFiles` From 839bfa13c1b43c337c7f6c902b21e81fde506d08 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 18 Oct 2018 23:20:00 +1100 Subject: [PATCH 45/77] change generated versions to xcode 10 and swift 4.2 --- SettingPresets/base.yml | 2 +- Sources/XcodeGenKit/Version.swift | 2 +- .../Fixtures/TestProject/App_iOS/AppDelegate.swift | 2 +- .../TestProject/Project.xcodeproj/project.pbxproj | 14 +++++++------- .../xcschemes/App_iOS Production.xcscheme | 2 +- .../xcschemes/App_iOS Staging.xcscheme | 2 +- .../xcshareddata/xcschemes/App_iOS Test.xcscheme | 2 +- .../xcshareddata/xcschemes/App_watchOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Framework.xcscheme | 2 +- .../xcshareddata/xcschemes/iMessageApp.xcscheme | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/SettingPresets/base.yml b/SettingPresets/base.yml index 3722c640..9552b7a0 100644 --- a/SettingPresets/base.yml +++ b/SettingPresets/base.yml @@ -42,4 +42,4 @@ GCC_WARN_UNUSED_VARIABLE: YES # Swift Settings PRODUCT_NAME: $(TARGET_NAME) -SWIFT_VERSION: '4.0' +SWIFT_VERSION: '4.2' diff --git a/Sources/XcodeGenKit/Version.swift b/Sources/XcodeGenKit/Version.swift index 7fdeee10..d37cebab 100644 --- a/Sources/XcodeGenKit/Version.swift +++ b/Sources/XcodeGenKit/Version.swift @@ -4,7 +4,7 @@ import ProjectSpec extension Project { var xcodeVersion: String { - return XCodeVersion.parse(options.xcodeVersion ?? "9.3") + return XCodeVersion.parse(options.xcodeVersion ?? "10.0") } var schemeVersion: String { diff --git a/Tests/Fixtures/TestProject/App_iOS/AppDelegate.swift b/Tests/Fixtures/TestProject/App_iOS/AppDelegate.swift index 3116cdbf..2c79185e 100644 --- a/Tests/Fixtures/TestProject/App_iOS/AppDelegate.swift +++ b/Tests/Fixtures/TestProject/App_iOS/AppDelegate.swift @@ -6,7 +6,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. _ = FrameworkStruct() // Standalone files added to project by path-to-file. diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index b21a0ae5..f5691c5d 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -1365,7 +1365,7 @@ P_88EC38DC1E39C9039D2FA49EDC2FA124 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0930; + LastUpgradeCheck = 1000; TargetAttributes = { AT_D40C01B2BAD29EDEA392714DFB69FE8F = { CUSTOM = value; @@ -2363,7 +2363,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 4.2; VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; @@ -2458,7 +2458,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 4.2; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = "Production Debug"; @@ -3106,7 +3106,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 4.2; VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; @@ -3703,7 +3703,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 4.2; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = "Staging Debug"; @@ -3898,7 +3898,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 4.2; VALIDATE_PRODUCT = YES; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; @@ -4700,7 +4700,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 4.2; WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = "Test Debug"; diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme index 3c8c9251..0d8babba 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme @@ -1,6 +1,6 @@ Date: Thu, 18 Oct 2018 23:28:21 +1100 Subject: [PATCH 46/77] Remove swift 4.1 from CI tests --- .circleci/config.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 14b4cb35..f1edcc7f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,5 @@ version: 2 jobs: - macOS_swift_4.1: - macos: - xcode: "9.4.0" - steps: - - checkout - - run: - name: Build Test Project - command: ./build-fixtures.sh macOS_swift_4.2: macos: xcode: "10.0.0" @@ -32,5 +24,4 @@ workflows: version: 2 workflow: jobs: - - macOS_swift_4.1 - macOS_swift_4.2 From 84182d86b868bae7e962a5f071b13932405bd287 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Thu, 18 Oct 2018 23:32:44 +1100 Subject: [PATCH 47/77] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c2e35b4..e1adcb17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Upgraded to xcodeproj 6 [#388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb - Upgraded to Swift 4.2 [#388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb - Remove iOS codesigning sdk restriction in setting preset [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb +- Changed default project version to Xcode 10.0 and default Swift version to 4.2 [#423](https://github.com/yonaskolb/XcodeGen/pull/423) @yonaskolb #### Fixed - Fixed code signing issues [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb From d3188a83ff6c3846d8dace003e94cdc93cc654c0 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 19 Oct 2018 00:29:45 +1100 Subject: [PATCH 48/77] extract scheme generator --- Sources/XcodeGenKit/ProjectGenerator.swift | 238 ++------------------- Sources/XcodeGenKit/SchemeGenerator.swift | 237 ++++++++++++++++++++ 2 files changed, 249 insertions(+), 226 deletions(-) create mode 100644 Sources/XcodeGenKit/SchemeGenerator.swift diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index b9561e45..b6a83d49 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -13,23 +13,24 @@ public class ProjectGenerator { self.project = project } - var defaultDebugConfig: Config { - return project.configs.first { $0.type == .debug }! - } - - var defaultReleaseConfig: Config { - return project.configs.first { $0.type == .release }! - } - public func generateXcodeProject(validate: Bool = true) throws -> XcodeProj { if validate { try project.validate() } + + // generate PBXProj let pbxProjGenerator = PBXProjGenerator(project: project) - let pbxProject = try pbxProjGenerator.generate() + let pbxProj = try pbxProjGenerator.generate() + + // generate Schemes + let schemeGenerator = SchemeGenerator(project: project, pbxProj: pbxProj) + let schemes = try schemeGenerator.generateSchemes() + + // generate Workspace let workspace = try generateWorkspace() - let sharedData = try generateSharedData(pbxProject: pbxProject) - return XcodeProj(workspace: workspace, pbxproj: pbxProject, sharedData: sharedData) + + let sharedData = XCSharedData(schemes: schemes) + return XcodeProj(workspace: workspace, pbxproj: pbxProj, sharedData: sharedData) } func generateWorkspace() throws -> XCWorkspace { @@ -37,219 +38,4 @@ public class ProjectGenerator { let workspaceData = XCWorkspaceData(children: [dataElement]) return XCWorkspace(data: workspaceData) } - - func generateScheme(_ scheme: Scheme, pbxProject: PBXProj) throws -> XCScheme { - - func getBuildEntry(_ buildTarget: Scheme.BuildTarget) -> XCScheme.BuildAction.Entry { - - guard let pbxTarget = pbxProject.targets(named: buildTarget.target).first else { - fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"") - } - - guard let buildableName = - project.getTarget(buildTarget.target)?.filename ?? - project.getAggregateTarget(buildTarget.target)?.name else { - fatalError("Unable to determinate \"buildableName\" for build target: \(buildTarget.target)") - } - let buildableReference = XCScheme.BuildableReference( - referencedContainer: "container:\(project.name).xcodeproj", - blueprint: pbxTarget, - buildableName: buildableName, - blueprintName: buildTarget.target - ) - return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes) - } - - let testTargetNames = scheme.test?.targets ?? [] - let testBuildTargets = testTargetNames.map { - Scheme.BuildTarget(target: $0, buildTypes: BuildType.testOnly) - } - - let testBuildTargetEntries = testBuildTargets.map(getBuildEntry) - - let buildActionEntries: [XCScheme.BuildAction.Entry] = scheme.build.targets.map(getBuildEntry) - - func getExecutionAction(_ action: Scheme.ExecutionAction) -> XCScheme.ExecutionAction { - // ExecutionActions can require the use of build settings. Xcode allows the settings to come from a build or test target. - let environmentBuildable = action.settingsTarget.flatMap { settingsTarget in - return (buildActionEntries + testBuildTargetEntries) - .first { settingsTarget == $0.buildableReference.blueprintName }? - .buildableReference - } - return XCScheme.ExecutionAction(scriptText: action.script, title: action.name, environmentBuildable: environmentBuildable) - } - - let target = project.getTarget(scheme.build.targets.first!.target) - let shouldExecuteOnLaunch = target?.type.isExecutable == true - - let buildableReference = buildActionEntries.first!.buildableReference - let productRunable = XCScheme.BuildableProductRunnable(buildableReference: buildableReference) - - let buildAction = XCScheme.BuildAction( - buildActionEntries: buildActionEntries, - preActions: scheme.build.preActions.map(getExecutionAction), - postActions: scheme.build.postActions.map(getExecutionAction), - parallelizeBuild: scheme.build.parallelizeBuild, - buildImplicitDependencies: scheme.build.buildImplicitDependencies - ) - - let testables = testBuildTargetEntries.map { - XCScheme.TestableReference(skipped: false, buildableReference: $0.buildableReference) - } - - let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) } - let launchCommandLineArgs = scheme.run.map { XCScheme.CommandLineArguments($0.commandLineArguments) } - let profileCommandLineArgs = scheme.profile.map { XCScheme.CommandLineArguments($0.commandLineArguments) } - - let testVariables = scheme.test.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables } - let launchVariables = scheme.run.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables } - let profileVariables = scheme.profile.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables } - - let testAction = XCScheme.TestAction( - buildConfiguration: scheme.test?.config ?? defaultDebugConfig.name, - macroExpansion: buildableReference, - testables: testables, - preActions: scheme.test?.preActions.map(getExecutionAction) ?? [], - postActions: scheme.test?.postActions.map(getExecutionAction) ?? [], - shouldUseLaunchSchemeArgsEnv: scheme.test?.shouldUseLaunchSchemeArgsEnv ?? true, - codeCoverageEnabled: scheme.test?.gatherCoverageData ?? false, - commandlineArguments: testCommandLineArgs, - environmentVariables: testVariables - ) - - let launchAction = XCScheme.LaunchAction( - buildableProductRunnable: shouldExecuteOnLaunch ? productRunable : nil, - buildConfiguration: scheme.run?.config ?? defaultDebugConfig.name, - preActions: scheme.run?.preActions.map(getExecutionAction) ?? [], - postActions: scheme.run?.postActions.map(getExecutionAction) ?? [], - macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference, - commandlineArguments: launchCommandLineArgs, - environmentVariables: launchVariables - ) - - let profileAction = XCScheme.ProfileAction( - buildableProductRunnable: productRunable, - buildConfiguration: scheme.profile?.config ?? defaultReleaseConfig.name, - preActions: scheme.profile?.preActions.map(getExecutionAction) ?? [], - postActions: scheme.profile?.postActions.map(getExecutionAction) ?? [], - shouldUseLaunchSchemeArgsEnv: scheme.profile?.shouldUseLaunchSchemeArgsEnv ?? true, - commandlineArguments: profileCommandLineArgs, - environmentVariables: profileVariables - ) - - let analyzeAction = XCScheme.AnalyzeAction(buildConfiguration: scheme.analyze?.config ?? defaultDebugConfig.name) - - let archiveAction = XCScheme.ArchiveAction( - buildConfiguration: scheme.archive?.config ?? defaultReleaseConfig.name, - revealArchiveInOrganizer: scheme.archive?.revealArchiveInOrganizer ?? true, - customArchiveName: scheme.archive?.customArchiveName, - preActions: scheme.archive?.preActions.map(getExecutionAction) ?? [], - postActions: scheme.archive?.postActions.map(getExecutionAction) ?? [] - ) - - return XCScheme( - name: scheme.name, - lastUpgradeVersion: project.xcodeVersion, - version: project.schemeVersion, - buildAction: buildAction, - testAction: testAction, - launchAction: launchAction, - profileAction: profileAction, - analyzeAction: analyzeAction, - archiveAction: archiveAction - ) - } - - func generateSharedData(pbxProject: PBXProj) throws -> XCSharedData { - var xcschemes: [XCScheme] = [] - - for scheme in project.schemes { - let xcscheme = try generateScheme(scheme, pbxProject: pbxProject) - xcschemes.append(xcscheme) - } - - for target in project.targets { - if let targetScheme = target.scheme { - - if targetScheme.configVariants.isEmpty { - let schemeName = target.name - - let debugConfig = project.configs.first { $0.type == .debug }! - let releaseConfig = project.configs.first { $0.type == .release }! - - let scheme = Scheme( - name: schemeName, - target: target, - targetScheme: targetScheme, - debugConfig: debugConfig.name, - releaseConfig: releaseConfig.name - ) - let xcscheme = try generateScheme(scheme, pbxProject: pbxProject) - xcschemes.append(xcscheme) - } else { - for configVariant in targetScheme.configVariants { - - let schemeName = "\(target.name) \(configVariant)" - - let debugConfig = project.configs - .first { $0.type == .debug && $0.name.contains(configVariant) }! - let releaseConfig = project.configs - .first { $0.type == .release && $0.name.contains(configVariant) }! - - let scheme = Scheme( - name: schemeName, - target: target, - targetScheme: targetScheme, - debugConfig: debugConfig.name, - releaseConfig: releaseConfig.name - ) - let xcscheme = try generateScheme(scheme, pbxProject: pbxProject) - xcschemes.append(xcscheme) - } - } - } - } - - return XCSharedData(schemes: xcschemes) - } -} - -extension Scheme { - public init(name: String, target: Target, targetScheme: TargetScheme, debugConfig: String, releaseConfig: String) { - self.init( - name: name, - build: .init(targets: [Scheme.BuildTarget(target: target.name)]), - run: .init( - config: debugConfig, - commandLineArguments: targetScheme.commandLineArguments, - preActions: targetScheme.preActions, - postActions: targetScheme.postActions, - environmentVariables: targetScheme.environmentVariables - ), - test: .init( - config: debugConfig, - gatherCoverageData: targetScheme.gatherCoverageData, - commandLineArguments: targetScheme.commandLineArguments, - targets: targetScheme.testTargets, - preActions: targetScheme.preActions, - postActions: targetScheme.postActions, - environmentVariables: targetScheme.environmentVariables - ), - profile: .init( - config: releaseConfig, - commandLineArguments: targetScheme.commandLineArguments, - preActions: targetScheme.preActions, - postActions: targetScheme.postActions, - environmentVariables: targetScheme.environmentVariables - ), - analyze: .init( - config: debugConfig - ), - archive: .init( - config: releaseConfig, - preActions: targetScheme.preActions, - postActions: targetScheme.postActions - ) - ) - } } diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift new file mode 100644 index 00000000..921a2276 --- /dev/null +++ b/Sources/XcodeGenKit/SchemeGenerator.swift @@ -0,0 +1,237 @@ +import ProjectSpec +import xcodeproj +import Foundation + +public class SchemeGenerator { + + let project: Project + let pbxProj: PBXProj + + var defaultDebugConfig: Config { + return project.configs.first { $0.type == .debug }! + } + + var defaultReleaseConfig: Config { + return project.configs.first { $0.type == .release }! + } + + public init(project: Project, pbxProj: PBXProj) { + self.project = project + self.pbxProj = pbxProj + } + + public func generateSchemes() throws -> [XCScheme] { + var xcschemes: [XCScheme] = [] + + for scheme in project.schemes { + let xcscheme = try generateScheme(scheme) + xcschemes.append(xcscheme) + } + + for target in project.targets { + if let targetScheme = target.scheme { + + if targetScheme.configVariants.isEmpty { + let schemeName = target.name + + let debugConfig = project.configs.first { $0.type == .debug }! + let releaseConfig = project.configs.first { $0.type == .release }! + + let scheme = Scheme( + name: schemeName, + target: target, + targetScheme: targetScheme, + debugConfig: debugConfig.name, + releaseConfig: releaseConfig.name + ) + let xcscheme = try generateScheme(scheme) + xcschemes.append(xcscheme) + } else { + for configVariant in targetScheme.configVariants { + + let schemeName = "\(target.name) \(configVariant)" + + let debugConfig = project.configs + .first { $0.type == .debug && $0.name.contains(configVariant) }! + let releaseConfig = project.configs + .first { $0.type == .release && $0.name.contains(configVariant) }! + + let scheme = Scheme( + name: schemeName, + target: target, + targetScheme: targetScheme, + debugConfig: debugConfig.name, + releaseConfig: releaseConfig.name + ) + let xcscheme = try generateScheme(scheme) + xcschemes.append(xcscheme) + } + } + } + } + + return xcschemes + } + + public func generateScheme(_ scheme: Scheme) throws -> XCScheme { + + func getBuildEntry(_ buildTarget: Scheme.BuildTarget) -> XCScheme.BuildAction.Entry { + + guard let pbxTarget = pbxProj.targets(named: buildTarget.target).first else { + fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"") + } + + guard let buildableName = + project.getTarget(buildTarget.target)?.filename ?? + project.getAggregateTarget(buildTarget.target)?.name else { + fatalError("Unable to determinate \"buildableName\" for build target: \(buildTarget.target)") + } + let buildableReference = XCScheme.BuildableReference( + referencedContainer: "container:\(project.name).xcodeproj", + blueprint: pbxTarget, + buildableName: buildableName, + blueprintName: buildTarget.target + ) + return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes) + } + + let testTargetNames = scheme.test?.targets ?? [] + let testBuildTargets = testTargetNames.map { + Scheme.BuildTarget(target: $0, buildTypes: BuildType.testOnly) + } + + let testBuildTargetEntries = testBuildTargets.map(getBuildEntry) + + let buildActionEntries: [XCScheme.BuildAction.Entry] = scheme.build.targets.map(getBuildEntry) + + func getExecutionAction(_ action: Scheme.ExecutionAction) -> XCScheme.ExecutionAction { + // ExecutionActions can require the use of build settings. Xcode allows the settings to come from a build or test target. + let environmentBuildable = action.settingsTarget.flatMap { settingsTarget in + return (buildActionEntries + testBuildTargetEntries) + .first { settingsTarget == $0.buildableReference.blueprintName }? + .buildableReference + } + return XCScheme.ExecutionAction(scriptText: action.script, title: action.name, environmentBuildable: environmentBuildable) + } + + let target = project.getTarget(scheme.build.targets.first!.target) + let shouldExecuteOnLaunch = target?.type.isExecutable == true + + let buildableReference = buildActionEntries.first!.buildableReference + let productRunable = XCScheme.BuildableProductRunnable(buildableReference: buildableReference) + + let buildAction = XCScheme.BuildAction( + buildActionEntries: buildActionEntries, + preActions: scheme.build.preActions.map(getExecutionAction), + postActions: scheme.build.postActions.map(getExecutionAction), + parallelizeBuild: scheme.build.parallelizeBuild, + buildImplicitDependencies: scheme.build.buildImplicitDependencies + ) + + let testables = testBuildTargetEntries.map { + XCScheme.TestableReference(skipped: false, buildableReference: $0.buildableReference) + } + + let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) } + let launchCommandLineArgs = scheme.run.map { XCScheme.CommandLineArguments($0.commandLineArguments) } + let profileCommandLineArgs = scheme.profile.map { XCScheme.CommandLineArguments($0.commandLineArguments) } + + let testVariables = scheme.test.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables } + let launchVariables = scheme.run.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables } + let profileVariables = scheme.profile.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables } + + let testAction = XCScheme.TestAction( + buildConfiguration: scheme.test?.config ?? defaultDebugConfig.name, + macroExpansion: buildableReference, + testables: testables, + preActions: scheme.test?.preActions.map(getExecutionAction) ?? [], + postActions: scheme.test?.postActions.map(getExecutionAction) ?? [], + shouldUseLaunchSchemeArgsEnv: scheme.test?.shouldUseLaunchSchemeArgsEnv ?? true, + codeCoverageEnabled: scheme.test?.gatherCoverageData ?? false, + commandlineArguments: testCommandLineArgs, + environmentVariables: testVariables + ) + + let launchAction = XCScheme.LaunchAction( + buildableProductRunnable: shouldExecuteOnLaunch ? productRunable : nil, + buildConfiguration: scheme.run?.config ?? defaultDebugConfig.name, + preActions: scheme.run?.preActions.map(getExecutionAction) ?? [], + postActions: scheme.run?.postActions.map(getExecutionAction) ?? [], + macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference, + commandlineArguments: launchCommandLineArgs, + environmentVariables: launchVariables + ) + + let profileAction = XCScheme.ProfileAction( + buildableProductRunnable: productRunable, + buildConfiguration: scheme.profile?.config ?? defaultReleaseConfig.name, + preActions: scheme.profile?.preActions.map(getExecutionAction) ?? [], + postActions: scheme.profile?.postActions.map(getExecutionAction) ?? [], + shouldUseLaunchSchemeArgsEnv: scheme.profile?.shouldUseLaunchSchemeArgsEnv ?? true, + commandlineArguments: profileCommandLineArgs, + environmentVariables: profileVariables + ) + + let analyzeAction = XCScheme.AnalyzeAction(buildConfiguration: scheme.analyze?.config ?? defaultDebugConfig.name) + + let archiveAction = XCScheme.ArchiveAction( + buildConfiguration: scheme.archive?.config ?? defaultReleaseConfig.name, + revealArchiveInOrganizer: scheme.archive?.revealArchiveInOrganizer ?? true, + customArchiveName: scheme.archive?.customArchiveName, + preActions: scheme.archive?.preActions.map(getExecutionAction) ?? [], + postActions: scheme.archive?.postActions.map(getExecutionAction) ?? [] + ) + + return XCScheme( + name: scheme.name, + lastUpgradeVersion: project.xcodeVersion, + version: project.schemeVersion, + buildAction: buildAction, + testAction: testAction, + launchAction: launchAction, + profileAction: profileAction, + analyzeAction: analyzeAction, + archiveAction: archiveAction + ) + } +} + +extension Scheme { + public init(name: String, target: Target, targetScheme: TargetScheme, debugConfig: String, releaseConfig: String) { + self.init( + name: name, + build: .init(targets: [Scheme.BuildTarget(target: target.name)]), + run: .init( + config: debugConfig, + commandLineArguments: targetScheme.commandLineArguments, + preActions: targetScheme.preActions, + postActions: targetScheme.postActions, + environmentVariables: targetScheme.environmentVariables + ), + test: .init( + config: debugConfig, + gatherCoverageData: targetScheme.gatherCoverageData, + commandLineArguments: targetScheme.commandLineArguments, + targets: targetScheme.testTargets, + preActions: targetScheme.preActions, + postActions: targetScheme.postActions, + environmentVariables: targetScheme.environmentVariables + ), + profile: .init( + config: releaseConfig, + commandLineArguments: targetScheme.commandLineArguments, + preActions: targetScheme.preActions, + postActions: targetScheme.postActions, + environmentVariables: targetScheme.environmentVariables + ), + analyze: .init( + config: debugConfig + ), + archive: .init( + config: releaseConfig, + preActions: targetScheme.preActions, + postActions: targetScheme.postActions + ) + ) + } +} From 228ab6620b208a215491d22de874f9186d46b3ba Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 30 Sep 2018 01:51:29 +1000 Subject: [PATCH 49/77] generate info plist and entitlements --- Sources/ProjectSpec/Plist.swift | 26 ++++++++++ Sources/ProjectSpec/Target.swift | 10 ++++ Sources/XcodeGen/main.swift | 2 + Sources/XcodeGenKit/PBXProjGenerator.swift | 11 +++- Sources/XcodeGenKit/ProjectGenerator.swift | 51 +++++++++++++++++++ .../Fixtures/TestProject/App_macOS/Info.plist | 2 + Tests/Fixtures/TestProject/project.yml | 8 +++ .../ProjectFixtureTests.swift | 1 + .../ProjectGeneratorTests.swift | 31 +++++++++++ Tests/XcodeGenKitTests/SpecLoadingTests.swift | 32 ++++++++++++ 10 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 Sources/ProjectSpec/Plist.swift diff --git a/Sources/ProjectSpec/Plist.swift b/Sources/ProjectSpec/Plist.swift new file mode 100644 index 00000000..252d3f64 --- /dev/null +++ b/Sources/ProjectSpec/Plist.swift @@ -0,0 +1,26 @@ +import Foundation +import JSONUtilities + +public struct Plist: Equatable { + + public let path: String + public let attributes: [String: Any] + + public init(path: String, attributes: [String: Any] = [:]) { + self.path = path + self.attributes = attributes + } + + public static func == (lhs: Plist, rhs: Plist) -> Bool { + return lhs.path == rhs.path && + NSDictionary(dictionary: lhs.attributes).isEqual(to: rhs.attributes) + } +} + +extension Plist: JSONObjectConvertible { + + public init(jsonDictionary: JSONDictionary) throws { + path = try jsonDictionary.json(atKeyPath: "path") + attributes = jsonDictionary.json(atKeyPath: "attributes") ?? [:] + } +} diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index f4118c3c..8f6226fa 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -28,6 +28,8 @@ public struct Target: ProjectTarget { public var settings: Settings public var sources: [TargetSource] public var dependencies: [Dependency] + public var info: Plist? + public var entitlements: Plist? public var transitivelyLinkDependencies: Bool? public var directlyEmbedCarthageDependencies: Bool? public var requiresObjCLinking: Bool? @@ -63,6 +65,8 @@ public struct Target: ProjectTarget { configFiles: [String: String] = [:], sources: [TargetSource] = [], dependencies: [Dependency] = [], + info: Plist? = nil, + entitlements: Plist? = nil, transitivelyLinkDependencies: Bool? = nil, directlyEmbedCarthageDependencies: Bool? = nil, requiresObjCLinking: Bool? = nil, @@ -82,6 +86,8 @@ public struct Target: ProjectTarget { self.configFiles = configFiles self.sources = sources self.dependencies = dependencies + self.info = info + self.entitlements = entitlements self.transitivelyLinkDependencies = transitivelyLinkDependencies self.directlyEmbedCarthageDependencies = directlyEmbedCarthageDependencies self.requiresObjCLinking = requiresObjCLinking @@ -278,6 +284,10 @@ extension Target: NamedJSONDictionaryConvertible { } else { dependencies = try jsonDictionary.json(atKeyPath: "dependencies", invalidItemBehaviour: .fail) } + + info = jsonDictionary.json(atKeyPath: "info") + entitlements = jsonDictionary.json(atKeyPath: "entitlements") + transitivelyLinkDependencies = jsonDictionary.json(atKeyPath: "transitivelyLinkDependencies") directlyEmbedCarthageDependencies = jsonDictionary.json(atKeyPath: "directlyEmbedCarthageDependencies") requiresObjCLinking = jsonDictionary.json(atKeyPath: "requiresObjCLinking") diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index 9d732054..5393c39b 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -48,6 +48,8 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { logger.info("⚙️ Writing project...") + try projectGenerator.generateFiles() + let projectFile = projectPath + "\(project.name).xcodeproj" let tempPath = Path.temporary + "XcodeGen_\(Int(NSTimeIntervalSince1970))" try? tempPath.delete() diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 2539a22c..0a5291cc 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -747,8 +747,15 @@ public class PBXProjGenerator { let configs: [XCBuildConfiguration] = project.configs.map { config in var buildSettings = project.getTargetBuildSettings(target: target, config: config) - // automatically set INFOPLIST_FILE path - if !project.targetHasBuildSetting("INFOPLIST_FILE", target: target, config: config) { + // Set CODE_SIGN_ENTITLEMENTS + if let entitlements = target.entitlements { + buildSettings["CODE_SIGN_ENTITLEMENTS"] = entitlements.path + } + + // Set INFOPLIST_FILE + if let info = target.info { + buildSettings["INFOPLIST_FILE"] = info.path + } else if !project.targetHasBuildSetting("INFOPLIST_FILE", target: target, config: config) { if searchForPlist { plistPath = getInfoPlist(target.sources) searchForPlist = false diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index b6a83d49..ab0a51ea 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -33,6 +33,57 @@ public class ProjectGenerator { return XcodeProj(workspace: workspace, pbxproj: pbxProj, sharedData: sharedData) } + public func generateFiles() throws { + + /* + Default info plist attributes taken from: + /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_DefinitionsInfoPlist.xctemplate/TemplateInfo.plist + */ + var defaultInfoPlist: [String: Any] = [:] + defaultInfoPlist["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)" + defaultInfoPlist["CFBundleInfoDictionaryVersion"] = "6.0" + defaultInfoPlist["CFBundleExecutable"] = "$(EXECUTABLE_NAME)" + defaultInfoPlist["CFBundleName"] = "$(PRODUCT_NAME)" + defaultInfoPlist["CFBundleDevelopmentRegion"] = "$(DEVELOPMENT_LANGUAGE)" + defaultInfoPlist["CFBundleShortVersionString"] = "1.0" + defaultInfoPlist["CFBundleVersion"] = "1" + + for target in project.targets { + if let plist = target.info { + var targetInfoPlist = defaultInfoPlist + switch target.type { + case .uiTestBundle, + .unitTestBundle: + targetInfoPlist["CFBundlePackageType"] = "BNDL" + case .application, + .watch2App: + targetInfoPlist["CFBundlePackageType"] = "APPL" + case .framework: + targetInfoPlist["CFBundlePackageType"] = "FMWK" + case .bundle: + targetInfoPlist["CFBundlePackageType"] = "BNDL" + case .xpcService: + targetInfoPlist["CFBundlePackageType"] = "XPC" + default: break + } + let path = project.basePath + plist.path + let attributes = targetInfoPlist.merged(plist.attributes) + let data = try PropertyListSerialization.data(fromPropertyList: attributes, format: .xml, options: 0) + try? path.delete() + try path.parent().mkpath() + try path.write(data) + } + + if let plist = target.entitlements { + let path = project.basePath + plist.path + let data = try PropertyListSerialization.data(fromPropertyList: plist.attributes, format: .xml, options: 0) + try? path.delete() + try path.parent().mkpath() + try path.write(data) + } + } + } + func generateWorkspace() throws -> XCWorkspace { let dataElement: XCWorkspaceDataElement = .file(XCWorkspaceDataFileRef(location: .self(""))) let workspaceData = XCWorkspaceData(children: [dataElement]) diff --git a/Tests/Fixtures/TestProject/App_macOS/Info.plist b/Tests/Fixtures/TestProject/App_macOS/Info.plist index e40caef4..cab4fbf4 100644 --- a/Tests/Fixtures/TestProject/App_macOS/Info.plist +++ b/Tests/Fixtures/TestProject/App_macOS/Info.plist @@ -20,6 +20,8 @@ 1.0 CFBundleVersion 1 + CustomSetting + $CUSTOM_SETTING LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSMainStoryboardFile diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index 2afae046..5c561607 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -26,6 +26,14 @@ targets: App_macOS: type: application platform: macOS + info: + path: App_macOS/Info.plist + attributes: + LSMinimumSystemVersion: $(MACOSX_DEPLOYMENT_TARGET) + NSMainStoryboardFile: Main + NSPrincipalClass: NSApplication + CFBundleIconFile: "" + CustomSetting: $CUSTOM_SETTING attributes: ProvisioningStyle: Automatic sources: diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index 6a0fae4f..68a96039 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -62,6 +62,7 @@ fileprivate func generateXcodeProject(specPath: Path, file: String = #file, line let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() + try generator.generateFiles() try xcodeProject.write(path: project.projectPath, override: true) return xcodeProject diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 7c77635b..33bbd954 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -830,6 +830,37 @@ class ProjectGeneratorTests: XCTestCase { try expect(buildFileSettings.compactMap({ $0?["ATTRIBUTES"] }).count) == 1 try expect(buildFileSettings.compactMap({ $0?["ATTRIBUTES"] as? [String] }).first) == ["Weak"] } + + $0.it("generates info.plist") { + let plist = Plist(path: "Info.plist", attributes: ["UISupportedInterfaceOrientations": ["UIInterfaceOrientationPortrait", "UIInterfaceOrientationLandscapeLeft"]]) + let tempPath = Path.temporary + "info" + let project = Project(basePath: tempPath, name: "", targets: [Target(name: "", type: .application, platform: .iOS, info: plist)]) + let pbxProject = try project.generatePbxProj() + let generator = ProjectGenerator(project: project) + try generator.generateFiles() + + guard let targetConfig = pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first else { + throw failure("Couldn't find Target config") + } + + try expect(targetConfig.buildSettings["INFOPLIST_FILE"] as? String) == plist.path + + let infoPlistFile = tempPath + plist.path + let data: Data = try infoPlistFile.read() + let infoPlist = try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as! [String: Any] + var expectedInfoPlist: [String: Any] = [:] + expectedInfoPlist["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)" + expectedInfoPlist["CFBundleInfoDictionaryVersion"] = "6.0" + expectedInfoPlist["CFBundleExecutable"] = "$(EXECUTABLE_NAME)" + expectedInfoPlist["CFBundleName"] = "$(PRODUCT_NAME)" + expectedInfoPlist["CFBundleDevelopmentRegion"] = "$(DEVELOPMENT_LANGUAGE)" + expectedInfoPlist["CFBundleShortVersionString"] = "1.0" + expectedInfoPlist["CFBundleVersion"] = "1" + expectedInfoPlist["CFBundlePackageType"] = "APPL" + expectedInfoPlist["UISupportedInterfaceOrientations"] = ["UIInterfaceOrientationPortrait", "UIInterfaceOrientationLandscapeLeft"] + + try expect(NSDictionary.init(dictionary: expectedInfoPlist).isEqual(to: infoPlist)).beTrue() + } } } diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index 6c2de296..b15b3339 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -155,6 +155,38 @@ class SpecLoadingTests: XCTestCase { try expect(target.dependencies[2]) == Dependency(type: .framework, reference: "path", weakLink: true) } + $0.it("parses info plist") { + var targetDictionary = validTarget + targetDictionary["info"] = [ + "path": "Info.plist", + "attributes": [ + "CFBundleName": "MyAppName", + "UIBackgroundModes": ["fetch"] + ] + ] + + let target = try Target(name: "", jsonDictionary: targetDictionary) + try expect(target.info) == Plist(path: "Info.plist", attributes: [ + "CFBundleName": "MyAppName", + "UIBackgroundModes": ["fetch"] + ]) + } + + $0.it("parses entitlement plist") { + var targetDictionary = validTarget + targetDictionary["entitlements"] = [ + "path": "app.entitlements", + "attributes": [ + "com.apple.security.application-groups": "com.group", + ] + ] + + let target = try Target(name: "", jsonDictionary: targetDictionary) + try expect(target.entitlements) == Plist(path: "app.entitlements", attributes: [ + "com.apple.security.application-groups": "com.group", + ]) + } + $0.it("parses cross platform targets") { let targetDictionary: [String: Any] = [ "platform": ["iOS", "tvOS"], From 26106a04b3675c294c8bb09a3db46732302b7113 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 00:50:53 +1100 Subject: [PATCH 50/77] refactor file writing --- Sources/XcodeGen/main.swift | 18 ++----- Sources/XcodeGenKit/InfoPlistGenerator.swift | 42 +++++++++++++++ Sources/XcodeGenKit/ProjectGenerator.swift | 51 ------------------- Sources/XcodeGenKit/ProjectWriter.swift | 51 +++++++++++++++++++ .../ProjectFixtureTests.swift | 5 +- .../ProjectGeneratorTests.swift | 4 +- 6 files changed, 102 insertions(+), 69 deletions(-) create mode 100644 Sources/XcodeGenKit/InfoPlistGenerator.swift create mode 100644 Sources/XcodeGenKit/ProjectWriter.swift diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index 5393c39b..f14670c6 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -47,21 +47,11 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { let xcodeProject = try projectGenerator.generateXcodeProject() logger.info("⚙️ Writing project...") + let projectWriter = ProjectWriter(project: project) + try projectWriter.writeXcodeProject(xcodeProject) + try projectWriter.writePlists() - try projectGenerator.generateFiles() - - let projectFile = projectPath + "\(project.name).xcodeproj" - let tempPath = Path.temporary + "XcodeGen_\(Int(NSTimeIntervalSince1970))" - try? tempPath.delete() - if projectFile.exists { - try projectFile.copy(tempPath) - } - try xcodeProject.write(path: tempPath, override: true) - try? projectFile.delete() - try tempPath.copy(projectFile) - try? tempPath.delete() - - logger.success("💾 Saved project to \(projectFile.string)") + logger.success("💾 Saved project to \(project.projectPath.string)") } catch let error as SpecValidationError { fatalError(error.description) } catch { diff --git a/Sources/XcodeGenKit/InfoPlistGenerator.swift b/Sources/XcodeGenKit/InfoPlistGenerator.swift new file mode 100644 index 00000000..b2725a31 --- /dev/null +++ b/Sources/XcodeGenKit/InfoPlistGenerator.swift @@ -0,0 +1,42 @@ +import Foundation +import ProjectSpec +import PathKit + +public class InfoPlistGenerator { + + /** + Default info plist attributes taken from: + /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_DefinitionsInfoPlist.xctemplate/TemplateInfo.plist + */ + var defaultInfoPlist: [String: Any] = { + var dictionary: [String: Any] = [:] + dictionary["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)" + dictionary["CFBundleInfoDictionaryVersion"] = "6.0" + dictionary["CFBundleExecutable"] = "$(EXECUTABLE_NAME)" + dictionary["CFBundleName"] = "$(PRODUCT_NAME)" + dictionary["CFBundleDevelopmentRegion"] = "$(DEVELOPMENT_LANGUAGE)" + dictionary["CFBundleShortVersionString"] = "1.0" + dictionary["CFBundleVersion"] = "1" + return dictionary + }() + + public func generateAttributes(target: Target) -> [String: Any] { + var targetInfoPlist = defaultInfoPlist + switch target.type { + case .uiTestBundle, + .unitTestBundle: + targetInfoPlist["CFBundlePackageType"] = "BNDL" + case .application, + .watch2App: + targetInfoPlist["CFBundlePackageType"] = "APPL" + case .framework: + targetInfoPlist["CFBundlePackageType"] = "FMWK" + case .bundle: + targetInfoPlist["CFBundlePackageType"] = "BNDL" + case .xpcService: + targetInfoPlist["CFBundlePackageType"] = "XPC" + default: break + } + return targetInfoPlist + } +} diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index ab0a51ea..b6a83d49 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -33,57 +33,6 @@ public class ProjectGenerator { return XcodeProj(workspace: workspace, pbxproj: pbxProj, sharedData: sharedData) } - public func generateFiles() throws { - - /* - Default info plist attributes taken from: - /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_DefinitionsInfoPlist.xctemplate/TemplateInfo.plist - */ - var defaultInfoPlist: [String: Any] = [:] - defaultInfoPlist["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)" - defaultInfoPlist["CFBundleInfoDictionaryVersion"] = "6.0" - defaultInfoPlist["CFBundleExecutable"] = "$(EXECUTABLE_NAME)" - defaultInfoPlist["CFBundleName"] = "$(PRODUCT_NAME)" - defaultInfoPlist["CFBundleDevelopmentRegion"] = "$(DEVELOPMENT_LANGUAGE)" - defaultInfoPlist["CFBundleShortVersionString"] = "1.0" - defaultInfoPlist["CFBundleVersion"] = "1" - - for target in project.targets { - if let plist = target.info { - var targetInfoPlist = defaultInfoPlist - switch target.type { - case .uiTestBundle, - .unitTestBundle: - targetInfoPlist["CFBundlePackageType"] = "BNDL" - case .application, - .watch2App: - targetInfoPlist["CFBundlePackageType"] = "APPL" - case .framework: - targetInfoPlist["CFBundlePackageType"] = "FMWK" - case .bundle: - targetInfoPlist["CFBundlePackageType"] = "BNDL" - case .xpcService: - targetInfoPlist["CFBundlePackageType"] = "XPC" - default: break - } - let path = project.basePath + plist.path - let attributes = targetInfoPlist.merged(plist.attributes) - let data = try PropertyListSerialization.data(fromPropertyList: attributes, format: .xml, options: 0) - try? path.delete() - try path.parent().mkpath() - try path.write(data) - } - - if let plist = target.entitlements { - let path = project.basePath + plist.path - let data = try PropertyListSerialization.data(fromPropertyList: plist.attributes, format: .xml, options: 0) - try? path.delete() - try path.parent().mkpath() - try path.write(data) - } - } - } - func generateWorkspace() throws -> XCWorkspace { let dataElement: XCWorkspaceDataElement = .file(XCWorkspaceDataFileRef(location: .self(""))) let workspaceData = XCWorkspaceData(children: [dataElement]) diff --git a/Sources/XcodeGenKit/ProjectWriter.swift b/Sources/XcodeGenKit/ProjectWriter.swift new file mode 100644 index 00000000..fad938d7 --- /dev/null +++ b/Sources/XcodeGenKit/ProjectWriter.swift @@ -0,0 +1,51 @@ +import Foundation +import ProjectSpec +import xcodeproj +import PathKit + +public class ProjectWriter { + + let project: Project + + public init(project: Project) { + self.project = project + } + + public func writeXcodeProject(_ xcodeProject: XcodeProj) throws { + let projectPath = project.projectPath + let tempPath = Path.temporary + "XcodeGen_\(Int(NSTimeIntervalSince1970))" + try? tempPath.delete() + if projectPath.exists { + try projectPath.copy(tempPath) + } + try xcodeProject.write(path: tempPath, override: true) + try? projectPath.delete() + try tempPath.copy(projectPath) + try? tempPath.delete() + } + + public func writePlists() throws { + + let infoPlistGenerator = InfoPlistGenerator() + for target in project.targets { + // write Info.plist + if let plist = target.info { + let path = project.basePath + plist.path + let attributes = infoPlistGenerator.generateAttributes(target: target).merged(plist.attributes) + let data = try PropertyListSerialization.data(fromPropertyList: attributes, format: .xml, options: 0) + try? path.delete() + try path.parent().mkpath() + try path.write(data) + } + + // write entitlements + if let plist = target.entitlements { + let path = project.basePath + plist.path + let data = try PropertyListSerialization.data(fromPropertyList: plist.attributes, format: .xml, options: 0) + try? path.delete() + try path.parent().mkpath() + try path.write(data) + } + } + } +} diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index 68a96039..6a40b2be 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -62,8 +62,9 @@ fileprivate func generateXcodeProject(specPath: Path, file: String = #file, line let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() - try generator.generateFiles() - try xcodeProject.write(path: project.projectPath, override: true) + let writer = ProjectWriter(project: project) + try writer.writePlists() + try writer.writeXcodeProject(xcodeProject) return xcodeProject } diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 33bbd954..46bc730a 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -836,8 +836,8 @@ class ProjectGeneratorTests: XCTestCase { let tempPath = Path.temporary + "info" let project = Project(basePath: tempPath, name: "", targets: [Target(name: "", type: .application, platform: .iOS, info: plist)]) let pbxProject = try project.generatePbxProj() - let generator = ProjectGenerator(project: project) - try generator.generateFiles() + let writer = ProjectWriter(project: project) + try writer.writePlists() guard let targetConfig = pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first else { throw failure("Couldn't find Target config") From eef1dc473e3fd91ac351ae852b97199a31c8d978 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 21:47:16 +1100 Subject: [PATCH 51/77] rename Plist.attributes to properties --- Sources/ProjectSpec/Plist.swift | 8 +++---- Sources/XcodeGenKit/InfoPlistGenerator.swift | 2 +- Sources/XcodeGenKit/ProjectWriter.swift | 22 +++++++++---------- Tests/Fixtures/TestProject/project.yml | 2 +- Tests/XcodeGenKitTests/SpecLoadingTests.swift | 4 ++-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Sources/ProjectSpec/Plist.swift b/Sources/ProjectSpec/Plist.swift index 252d3f64..90904c4f 100644 --- a/Sources/ProjectSpec/Plist.swift +++ b/Sources/ProjectSpec/Plist.swift @@ -4,16 +4,16 @@ import JSONUtilities public struct Plist: Equatable { public let path: String - public let attributes: [String: Any] + public let properties: [String: Any] public init(path: String, attributes: [String: Any] = [:]) { self.path = path - self.attributes = attributes + self.properties = attributes } public static func == (lhs: Plist, rhs: Plist) -> Bool { return lhs.path == rhs.path && - NSDictionary(dictionary: lhs.attributes).isEqual(to: rhs.attributes) + NSDictionary(dictionary: lhs.properties).isEqual(to: rhs.properties) } } @@ -21,6 +21,6 @@ extension Plist: JSONObjectConvertible { public init(jsonDictionary: JSONDictionary) throws { path = try jsonDictionary.json(atKeyPath: "path") - attributes = jsonDictionary.json(atKeyPath: "attributes") ?? [:] + properties = jsonDictionary.json(atKeyPath: "properties") ?? [:] } } diff --git a/Sources/XcodeGenKit/InfoPlistGenerator.swift b/Sources/XcodeGenKit/InfoPlistGenerator.swift index b2725a31..0c4536cc 100644 --- a/Sources/XcodeGenKit/InfoPlistGenerator.swift +++ b/Sources/XcodeGenKit/InfoPlistGenerator.swift @@ -20,7 +20,7 @@ public class InfoPlistGenerator { return dictionary }() - public func generateAttributes(target: Target) -> [String: Any] { + public func generateProperties(target: Target) -> [String: Any] { var targetInfoPlist = defaultInfoPlist switch target.type { case .uiTestBundle, diff --git a/Sources/XcodeGenKit/ProjectWriter.swift b/Sources/XcodeGenKit/ProjectWriter.swift index fad938d7..84ef2a59 100644 --- a/Sources/XcodeGenKit/ProjectWriter.swift +++ b/Sources/XcodeGenKit/ProjectWriter.swift @@ -30,22 +30,22 @@ public class ProjectWriter { for target in project.targets { // write Info.plist if let plist = target.info { - let path = project.basePath + plist.path - let attributes = infoPlistGenerator.generateAttributes(target: target).merged(plist.attributes) - let data = try PropertyListSerialization.data(fromPropertyList: attributes, format: .xml, options: 0) - try? path.delete() - try path.parent().mkpath() - try path.write(data) + let properties = infoPlistGenerator.generateProperties(target: target).merged(plist.properties) + try writePlist(properties, path: plist.path) } // write entitlements if let plist = target.entitlements { - let path = project.basePath + plist.path - let data = try PropertyListSerialization.data(fromPropertyList: plist.attributes, format: .xml, options: 0) - try? path.delete() - try path.parent().mkpath() - try path.write(data) + try writePlist(plist.properties, path: plist.path) } } } + + private func writePlist(_ plist: [String: Any], path: String) throws { + let path = project.basePath + path + let data = try PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0) + try? path.delete() + try path.parent().mkpath() + try path.write(data) + } } diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index 5c561607..f01ae1ad 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -28,7 +28,7 @@ targets: platform: macOS info: path: App_macOS/Info.plist - attributes: + properties: LSMinimumSystemVersion: $(MACOSX_DEPLOYMENT_TARGET) NSMainStoryboardFile: Main NSPrincipalClass: NSApplication diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index b15b3339..e6c731f4 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -159,7 +159,7 @@ class SpecLoadingTests: XCTestCase { var targetDictionary = validTarget targetDictionary["info"] = [ "path": "Info.plist", - "attributes": [ + "properties": [ "CFBundleName": "MyAppName", "UIBackgroundModes": ["fetch"] ] @@ -176,7 +176,7 @@ class SpecLoadingTests: XCTestCase { var targetDictionary = validTarget targetDictionary["entitlements"] = [ "path": "app.entitlements", - "attributes": [ + "properties": [ "com.apple.security.application-groups": "com.group", ] ] From 041f728b4ede995dc62168a15586b82c2fd06fef Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 21:47:23 +1100 Subject: [PATCH 52/77] plist documentation --- Docs/ProjectSpec.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index 5117b78e..fcb565a9 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -171,6 +171,16 @@ Settings are merged in the following order: groups, base, configs. - `FRAMEWORK_SEARCH_PATHS`: If carthage dependencies are used, the platform build path will be added to this setting - `OTHER_LDFLAGS`: See `requiresObjCLinking` below - [ ] **dependencies**: **[[Dependency](#dependency)]** - Dependencies for the target +- [ ] **info**: **[Plist](#plist)** - If defined, this will generate and write an `Info.plist` to the specified path and use it by setting the `INFOPLIST_FILE` build setting for every configuration. The following properties are generated automatically, the rest will have to be provided. + - `CFBundleIdentifier` + - `CFBundleInfoDictionaryVersion` + - `CFBundleExecutable` + - `CFBundleName` + - `CFBundleDevelopmentRegion` + - `CFBundleShortVersionString` + - `CFBundleVersion` + - `CFBundlePackageType` +- [ ] **entitlements**: **[Plist](#plist)** - If defined this will generate and write a `.entitlements` file, and use it by setting `CODE_SIGN_ENTITLEMENTS` build setting for every configuration. All properties must be provided - [ ] **templates**: **[String]** - A list of target templates that will be merged in order - [ ] **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. @@ -371,6 +381,25 @@ targets: Debug: App/debug.xcconfig Release: App/release.xcconfig ``` +### Plist +Plists are created on disk on every generation of the project. They can be used as a way to define `Info.plist` or `.entitlement` files. Some `Info.plist` properties are generated automatically. + +- [x] **path**: **String** - This is the path where the plist will be written to +- [x] **properties**: **[String: Any]** - This is a map of all the plist keys and values + +```yml +targets: + App: + info: + path: App/Info.plist + properties: + UISupportedInterfaceOrientations: [UIInterfaceOrientationPortrait] + UILaunchStoryboardName: LaunchScreen + entitlements: + path: App/App.entitlements + properties: + com.apple.security.application-groups: group.com.app +``` ### Build Script From 3d87c61342b0c1740836f25ff10ce9c362e5d2b6 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 21:53:16 +1100 Subject: [PATCH 53/77] plist error handling --- Sources/ProjectSpec/Target.swift | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index 8f6226fa..8b38ee52 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -215,6 +215,8 @@ extension Target: Equatable { lhs.settings == rhs.settings && lhs.configFiles == rhs.configFiles && lhs.sources == rhs.sources && + lhs.info == rhs.info && + lhs.entitlements == rhs.entitlements && lhs.dependencies == rhs.dependencies && lhs.prebuildScripts == rhs.prebuildScripts && lhs.postbuildScripts == rhs.postbuildScripts && @@ -285,9 +287,13 @@ extension Target: NamedJSONDictionaryConvertible { dependencies = try jsonDictionary.json(atKeyPath: "dependencies", invalidItemBehaviour: .fail) } - info = jsonDictionary.json(atKeyPath: "info") - entitlements = jsonDictionary.json(atKeyPath: "entitlements") - + if jsonDictionary["info"] != nil { + info = try jsonDictionary.json(atKeyPath: "info") as Plist + } + if jsonDictionary["entitlements"] != nil { + entitlements = try jsonDictionary.json(atKeyPath: "entitlements") as Plist + } + transitivelyLinkDependencies = jsonDictionary.json(atKeyPath: "transitivelyLinkDependencies") directlyEmbedCarthageDependencies = jsonDictionary.json(atKeyPath: "directlyEmbedCarthageDependencies") requiresObjCLinking = jsonDictionary.json(atKeyPath: "requiresObjCLinking") From 0cf2ca9fa075eb4e5cddffe7359b3014f29a9a2f Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 22:18:30 +1100 Subject: [PATCH 54/77] only write plists if file has changed --- Sources/XcodeGenKit/ProjectWriter.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/XcodeGenKit/ProjectWriter.swift b/Sources/XcodeGenKit/ProjectWriter.swift index 84ef2a59..9029f42e 100644 --- a/Sources/XcodeGenKit/ProjectWriter.swift +++ b/Sources/XcodeGenKit/ProjectWriter.swift @@ -43,6 +43,11 @@ public class ProjectWriter { private func writePlist(_ plist: [String: Any], path: String) throws { let path = project.basePath + path + if path.exists, let data: Data = try? path.read(), + let existingPlist = (try? PropertyListSerialization.propertyList(from: data, format: nil)) as? [String: Any], NSDictionary(dictionary: plist).isEqual(to: existingPlist) { + // file is the same + return + } let data = try PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0) try? path.delete() try path.parent().mkpath() From 0089dd229b0455fd2921d8760ab119bcf70114aa Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 22:24:53 +1100 Subject: [PATCH 55/77] add generated entitlements to TestProject --- Tests/Fixtures/TestProject/App_iOS/App.entitlements | 8 ++++++++ .../TestProject/Project.xcodeproj/project.pbxproj | 8 ++++++++ Tests/Fixtures/TestProject/project.yml | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 Tests/Fixtures/TestProject/App_iOS/App.entitlements diff --git a/Tests/Fixtures/TestProject/App_iOS/App.entitlements b/Tests/Fixtures/TestProject/App_iOS/App.entitlements new file mode 100644 index 00000000..37d691ef --- /dev/null +++ b/Tests/Fixtures/TestProject/App_iOS/App.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.application-groups + group.com.app + + diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index f5691c5d..b7b028ac 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -483,6 +483,7 @@ FR_DBD29CA78CDBBEF69B2C39C6D23BBDA1 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = ""; }; FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_E3314150DA4CEFF65D69CF7DB678E845 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_E7BC65B06A0819B53634C5CD51946D98 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; }; FR_EBD99C110BD7AE780C87A31CF2E4E7DB /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; FR_ED407ECED0DF010B1E787D238EA91A5D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -722,6 +723,7 @@ G_8F5765334752A7E52B1E63ACAC466729 /* App */ = { isa = PBXGroup; children = ( + FR_E7BC65B06A0819B53634C5CD51946D98 /* App.entitlements */, FR_B993F75B001AB1C272CE83CACC06F0E5 /* AppDelegate.swift */, FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */, FR_05405007CB77B2E003B19B89401C12AB /* Info.plist */, @@ -2258,6 +2260,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -2374,6 +2377,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -3920,6 +3924,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -4248,6 +4253,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -4293,6 +4299,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -4384,6 +4391,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index f01ae1ad..f8a8a26a 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -47,6 +47,10 @@ targets: App_iOS: type: application platform: iOS + entitlements: + path: App_iOS/App.entitlements + properties: + com.apple.security.application-groups: group.com.app attributes: ProvisioningStyle: Automatic sources: From 2082c18a88f0c4c5f1c72b1820140f5194417965 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Tue, 30 Oct 2018 23:40:57 +1100 Subject: [PATCH 56/77] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1adcb17..b964998a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ #### Added - Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen +- Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb +- Added `entitlements` to targets for generating an `.entitlement` file [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb #### Changed - Performance improvements for large projects [#388](https://github.com/yonaskolb/XcodeGen/pull/388) [#417](https://github.com/yonaskolb/XcodeGen/pull/417) [#416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione From 95e09181c61e122a1137b3f23eb5ebcc16bec548 Mon Sep 17 00:00:00 2001 From: Dan Fleming Date: Wed, 31 Oct 2018 11:11:55 -0400 Subject: [PATCH 57/77] Fix issue with legacy target fileref --- Sources/XcodeGenKit/PBXProjGenerator.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 0a5291cc..6bbf7847 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -445,8 +445,6 @@ public class PBXProjGenerator { guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue } - let dependencyFileReference = targetFileReferences[dependencyTarget.name]! - let dependecyLinkage = dependencyTarget.defaultLinkage let link = dependency.link ?? ( (dependecyLinkage == .dynamic && target.type != .staticLibrary) @@ -472,7 +470,7 @@ public class PBXProjGenerator { if embed { let embedFile = addObject( PBXBuildFile( - file: dependencyFileReference, + file: targetFileReferences[dependencyTarget.name]!, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable) ) ) From 3eaed1ec7c923fe7653fd1089cc43d91c04f259f Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 18:50:13 +1100 Subject: [PATCH 58/77] validate incorrect config settings definitions --- README.md | 9 +++++---- Sources/ProjectSpec/SpecValidation.swift | 18 ++++++++++++++++++ Sources/ProjectSpec/SpecValidationError.swift | 3 +++ Tests/XcodeGenKitTests/ProjectSpecTests.swift | 8 ++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 40ec7fbc..43197d19 100644 --- a/README.md +++ b/README.md @@ -49,10 +49,11 @@ targets: deploymentTarget: "10.0" sources: [MyApp] settings: - debug: - CUSTOM_BUILD_SETTING: my_debug_value - release: - CUSTOM_BUILD_SETTING: my_release_value + configs: + debug: + CUSTOM_BUILD_SETTING: my_debug_value + release: + CUSTOM_BUILD_SETTING: my_release_value dependencies: - target: MyFramework - carthage: Alamofire diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index 43f4a419..2cae3791 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -22,6 +22,24 @@ extension Project { } } } + + if settings.buildSettings.count == configs.count { + var allConfigs = true + for buildSetting in settings.buildSettings.keys { + var isConfig = false + for config in configs { + if config.name.lowercased().contains(buildSetting.lowercased()) { + isConfig = true + } + } + if !isConfig { + allConfigs = false + } + } + if allConfigs { + errors.append(.invalidPerConfigSettings) + } + } return errors } diff --git a/Sources/ProjectSpec/SpecValidationError.swift b/Sources/ProjectSpec/SpecValidationError.swift index d44fc19a..53e579eb 100644 --- a/Sources/ProjectSpec/SpecValidationError.swift +++ b/Sources/ProjectSpec/SpecValidationError.swift @@ -21,6 +21,7 @@ public struct SpecValidationError: Error, CustomStringConvertible { case invalidConfigFileConfig(String) case missingConfigForTargetScheme(target: String, configType: ConfigType) case missingDefaultConfig(configName: String) + case invalidPerConfigSettings public var description: String { switch self { @@ -56,6 +57,8 @@ public struct SpecValidationError: Error, CustomStringConvertible { return "Target \(target.quoted) is missing a config of type \(configType.rawValue) to generate its scheme" case let .missingDefaultConfig(name): return "Default configuration \(name) doesn't exist" + case .invalidPerConfigSettings: + return "Settings that are for a specific config must go in \"configs\". \"base\" can be used for common settings" } } } diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index d2ff0cba..21f0670f 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -205,6 +205,14 @@ class ProjectSpecTests: XCTestCase { try expectValidationError(project, .missingDefaultConfig(configName: "foo")) } + $0.it("validates config settings format") { + var project = baseProject + project.configs = Config.defaultConfigs + project.settings.buildSettings = ["Debug": ["SETTING": "VALUE"], "Release": ["SETTING": "VALUE"]] + + try expectValidationError(project, .invalidPerConfigSettings) + } + $0.it("allows custom scheme for aggregated target") { var project = baseProject let buildScript = BuildScript(script: .path(#file), name: "buildScript1") From dd1e7f3f043119645b640c91c3022caaf6832127 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 19:06:07 +1100 Subject: [PATCH 59/77] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b964998a..e90d70ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen - Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb - Added `entitlements` to targets for generating an `.entitlement` file [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb +- Validate incorrect config setting definitions [#431](https://github.com/yonaskolb/XcodeGen/pull/431) @yonaskolb #### Changed - Performance improvements for large projects [#388](https://github.com/yonaskolb/XcodeGen/pull/388) [#417](https://github.com/yonaskolb/XcodeGen/pull/417) [#416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione @@ -17,6 +18,7 @@ #### Fixed - Fixed code signing issues [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb - Fixed `TargetSource.headerVisibility` not being set in initializer [#419](https://github.com/yonaskolb/XcodeGen/pull/419) @jerrymarino +- Fixed crash when using Xcode Legacy targets as dependencies [#427](https://github.com/yonaskolb/XcodeGen/pull/427) @dflems ## 1.11.2 From ff9d1acdee5587ce1f74141a40f5f80e94b73a91 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 19:16:02 +1100 Subject: [PATCH 60/77] make carthage dependencies listen to link --- Sources/XcodeGenKit/PBXProjGenerator.swift | 11 +++++----- .../Project.xcodeproj/project.pbxproj | 20 ------------------- Tests/Fixtures/TestProject/project.yml | 1 + 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 6bbf7847..dff158f4 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -535,13 +535,14 @@ public class PBXProjGenerator { } let fileReference = sourceGenerator.getFileReference(path: frameworkPath, inPath: platformPath) - let buildFile = addObject( - PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency)) - ) - carthageFrameworksByPlatform[target.platform.carthageDirectoryName, default: []].insert(fileReference) - targetFrameworkBuildFiles.append(buildFile) + if dependency.link ?? true { + let buildFile = addObject( + PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency)) + ) + targetFrameworkBuildFiles.append(buildFile) + } // Embedding handled by iterating over `carthageDependencies` below } diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index b7b028ac..2369e4ff 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -58,7 +58,6 @@ BF_67219751DE020023F9D6068EDCCDC445 /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_4EB4AAACD714C13E5BC894C71B954299 /* SomeXPCService.xpc */; }; BF_6AA4D902E371C0F078917EB44F966B16 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_545DDE4AB557C8FAAD87775CD4271BDF /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF_6E2D4086A22C12D516A06AE66DC48D16 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_099E2C49D4A0B799E78B39C47FBEADF7 /* Framework.framework */; }; - BF_6FA9DA8B67663BAD9E11C1CEBD3BAC43 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; BF_703163C1C547AD6EF09BEA5F5F5ED49C /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */; }; BF_729EB1C88A5E43B2342099D81B301F4D /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_76825DD9B3B10103CDAB9D235BDF6A91 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_5FEC20FF753341FD0483E2E4C622DB05 /* MessagesViewController.swift */; }; @@ -93,7 +92,6 @@ BF_D0676C98017B6FDD96A733CB851645DE /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; BF_D0D1D142403C75D11757CB7092E8D035 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_1FA381C639CE4923ED6845790A5DF9D2 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_D3D64E2595369BBDEF03E07543AE2779 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; - BF_D4A5544EDEE7F80A1F9DF1D0684CAFBB /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_DC1C8DE46218F90A3F4FD5F8DE4F0ABB /* Result.framework */; }; BF_D6588CD7B83034816FFD3A7DB10DAD78 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */; }; BF_D7E271A6820E0A908736F44F99341DE1 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF_DA12D48C9BCEC64D55B87CE8703432BE /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; @@ -513,14 +511,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_3C7ADC43EF430300C2A315B0D2860080 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BF_6FA9DA8B67663BAD9E11C1CEBD3BAC43 /* Result.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; FBP_4E773D46F6F726BBC0032C576D02FCB7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -555,14 +545,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FBP_F6E2D2D110453E88BF9E3FB6A466B8EC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BF_D4A5544EDEE7F80A1F9DF1D0684CAFBB /* Result.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -1057,7 +1039,6 @@ buildPhases = ( SBP_ED63FCA00BD617EFF125ECDF9D24FAD8 /* Sources */, RBP_5623703FDC4F6DF4679D8BAF27518F2F /* Resources */, - FBP_3C7ADC43EF430300C2A315B0D2860080 /* Frameworks */, CFBP_469B033759EACBB99ECBF1008677C590 /* Embed App Extensions */, SSBP_7F147E7ED45BAAE2186975B7FF9EB08A /* Carthage */, ); @@ -1077,7 +1058,6 @@ buildPhases = ( SBP_49F3C650EA105D1EF50817673A8DB33A /* Sources */, RBP_1BFB64F249645ABF48C3CCDF8D5FA094 /* Resources */, - FBP_F6E2D2D110453E88BF9E3FB6A466B8EC /* Frameworks */, ); buildRules = ( ); diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index f8a8a26a..8a25909a 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -131,6 +131,7 @@ targets: PRODUCT_BUNDLE_IDENTIFIER: com.project.app.watch.extension dependencies: - carthage: Result + link: false iMessageApp: type: application.messages From 8c80717d873015b4b27fb85e5130c240641d779b Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 19:17:59 +1100 Subject: [PATCH 61/77] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e90d70ac..899b247a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Upgraded to Swift 4.2 [#388](https://github.com/yonaskolb/XcodeGen/pull/388) @yonaskolb - Remove iOS codesigning sdk restriction in setting preset [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb - Changed default project version to Xcode 10.0 and default Swift version to 4.2 [#423](https://github.com/yonaskolb/XcodeGen/pull/423) @yonaskolb +- Added ability to not link Carthage frameworks [#432](https://github.com/yonaskolb/XcodeGen/pull/432) @yonaskolb #### Fixed - Fixed code signing issues [#414](https://github.com/yonaskolb/XcodeGen/pull/414) @yonaskolb From 0efe954f3494b8d8ea1c21981374a44580a3910e Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 19:37:45 +1100 Subject: [PATCH 62/77] automatically set project SDK root if there is only a single platform --- Sources/ProjectSpec/DeploymentTarget.swift | 9 +++++++++ Sources/XcodeGenKit/SettingsBuilder.swift | 9 +++++++++ .../ProjectGeneratorTests.swift | 20 ++++++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Sources/ProjectSpec/DeploymentTarget.swift b/Sources/ProjectSpec/DeploymentTarget.swift index e8640d13..cf797b02 100644 --- a/Sources/ProjectSpec/DeploymentTarget.swift +++ b/Sources/ProjectSpec/DeploymentTarget.swift @@ -40,6 +40,15 @@ extension Platform { case .macOS: return "MACOSX_DEPLOYMENT_TARGET" } } + + public var sdkRoot: String { + switch self { + case .iOS: return "iphoneos" + case .tvOS: return "appletvos" + case .watchOS: return "watchos" + case .macOS: return "macosx" + } + } } extension Version { diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index d63cf4f2..5415d839 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -10,6 +10,15 @@ extension Project { public func getProjectBuildSettings(config: Config) -> BuildSettings { var buildSettings: BuildSettings = [:] + // set project SDKROOT is a single platform + if targets.count > 0 { + let platforms = Dictionary(grouping: targets) { $0.platform } + if platforms.count == 1 { + let platform = platforms.first!.key + buildSettings["SDKROOT"] = platform.sdkRoot + } + } + if let type = config.type, options.settingPresets.applyProject { buildSettings += SettingsPresetFile.base.getBuildSettings() buildSettings += SettingsPresetFile.config(type).getBuildSettings() diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 46bc730a..9b0b285d 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -60,7 +60,7 @@ class ProjectGeneratorTests: XCTestCase { let project = Project(basePath: "", name: "test", targets: [framework], options: options) let pbxProj = try project.generatePbxProj() let allSettings = pbxProj.buildConfigurations.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted() - try expect(allSettings) == ["SETTING_2"] + try expect(allSettings) == ["SDKROOT", "SETTING_2"] } $0.it("generates development language") { @@ -154,6 +154,7 @@ class ProjectGeneratorTests: XCTestCase { let targetDebugSettings = project.getTargetBuildSettings(target: target, config: config) var buildSettings = BuildSettings() + buildSettings += ["SDKROOT": "iphoneos"] buildSettings += SettingsPresetFile.base.getBuildSettings() buildSettings += SettingsPresetFile.config(.debug).getBuildSettings() @@ -188,6 +189,23 @@ class ProjectGeneratorTests: XCTestCase { try expect(buildSettings["SETTING1"] as? String) == "VALUE1" try expect(buildSettings["SETTING2"] as? String) == "VALUE2" } + + $0.it("sets project SDKROOT if there is only a single platform") { + var project = Project( + basePath: "", + name: "test", + targets: [ + Target(name: "1", type: .application, platform: .iOS), + Target(name: "2", type: .framework, platform: .iOS), + ] + ) + var buildSettings = project.getProjectBuildSettings(config: project.configs.first!) + try expect(buildSettings["SDKROOT"] as? String) == "iphoneos" + + project.targets.append(Target(name: "3", type: .application, platform: .tvOS)) + buildSettings = project.getProjectBuildSettings(config: project.configs.first!) + try expect(buildSettings["SDKROOT"]).beNil() + } } } From 01c4b3fc826e25ef544cec8d125df048bf4315a5 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 19:44:16 +1100 Subject: [PATCH 63/77] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e90d70ac..5425fcdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb - Added `entitlements` to targets for generating an `.entitlement` file [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb - Validate incorrect config setting definitions [#431](https://github.com/yonaskolb/XcodeGen/pull/431) @yonaskolb +- Automatically set project `SDKROOT` if there is only a single platform within the project [#433](https://github.com/yonaskolb/XcodeGen/pull/433) @yonaskolb #### Changed - Performance improvements for large projects [#388](https://github.com/yonaskolb/XcodeGen/pull/388) [#417](https://github.com/yonaskolb/XcodeGen/pull/417) [#416](https://github.com/yonaskolb/XcodeGen/pull/416) @yonaskolb @kastiglione From e8feba21ef2b505aeedccaa7812812d58d1b7fb4 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 3 Nov 2018 19:04:28 +1100 Subject: [PATCH 64/77] add TestTarget with parallelizable and randomExecutionOrder --- Docs/ProjectSpec.md | 9 +- Sources/ProjectSpec/Scheme.swift | 52 +++++++- Sources/ProjectSpec/SpecValidation.swift | 4 +- Sources/ProjectSpec/TargetScheme.swift | 18 ++- Sources/XcodeGenKit/SchemeGenerator.swift | 13 +- .../xcschemes/App_Scheme.xcscheme | 116 ++++++++++++++++++ .../xcshareddata/xcschemes/Framework.xcscheme | 3 + Tests/Fixtures/TestProject/project.yml | 13 ++ Tests/XcodeGenKitTests/SpecLoadingTests.swift | 24 +++- 9 files changed, 236 insertions(+), 16 deletions(-) create mode 100644 Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index fcb565a9..2cc75280 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -454,7 +454,7 @@ targets: This is a convenience used to automatically generate schemes for a target based on different configs or included tests. If you want more control check out the top level [Scheme](#scheme). - [x] **configVariants**: **[String]** - This generates a scheme for each entry, using configs that contain the name with debug and release variants. This is useful for having different environment schemes. -- [ ] **testTargets**: **[String]** - a list of test targets that should be included in the scheme. These will be added to the build targets and the test entries +- [ ] **testTargets**: **[[Test Target](#test-target)]** - a list of test targets that should be included in the scheme. These will be added to the build targets and the test entries. Each entry can either be a simple string, or a [Test Target](#test-target) - [ ] **gatherCoverageData**: **Bool** - a boolean that indicates if this scheme should gather coverage data. This defaults to false - [ ] **commandLineArguments**: **[String:Bool]** - a dictionary from the argument name (`String`) to if it is enabled (`Bool`). These arguments will be added to the Test, Profile and Run scheme actions - [ ] **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. @@ -578,7 +578,12 @@ A multiline script can be written using the various YAML multiline methods, for ### Test Action - [ ] **gatherCoverageData**: **Bool** - a boolean that indicates if this scheme should gather coverage data. This defaults to false -- [ ] **targets**: **[String]** - a list of targets to test +- [ ] **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) + +#### Test Target +- [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 ### Archive Action diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift index 1bd83431..278aa979 100644 --- a/Sources/ProjectSpec/Scheme.swift +++ b/Sources/ProjectSpec/Scheme.swift @@ -89,15 +89,40 @@ public struct Scheme: Equatable { public var config: String? public var gatherCoverageData: Bool public var commandLineArguments: [String: Bool] - public var targets: [String] + public var targets: [TestTarget] public var preActions: [ExecutionAction] public var postActions: [ExecutionAction] public var environmentVariables: [XCScheme.EnvironmentVariable] + + public struct TestTarget: Equatable, ExpressibleByStringLiteral { + public let name: String + public var randomExecutionOrder: Bool + public var parallelizable: Bool + + public init( + name: String, + randomExecutionOrder: Bool = false, + parallelizable: Bool = false + ) { + self.name = name + self.randomExecutionOrder = randomExecutionOrder + self.parallelizable = parallelizable + } + + public init(stringLiteral value: String) { + name = value + randomExecutionOrder = false + parallelizable = false + } + } + public init( config: String, gatherCoverageData: Bool = false, + randomExecutionOrder: Bool = false, + parallelizable: Bool = false, commandLineArguments: [String: Bool] = [:], - targets: [String] = [], + targets: [TestTarget] = [], preActions: [ExecutionAction] = [], postActions: [ExecutionAction] = [], environmentVariables: [XCScheme.EnvironmentVariable] = [] @@ -210,13 +235,34 @@ extension Scheme.Test: JSONObjectConvertible { config = jsonDictionary.json(atKeyPath: "config") gatherCoverageData = jsonDictionary.json(atKeyPath: "gatherCoverageData") ?? false commandLineArguments = jsonDictionary.json(atKeyPath: "commandLineArguments") ?? [:] - targets = jsonDictionary.json(atKeyPath: "targets") ?? [] + if let targets = jsonDictionary["targets"] as? [Any] { + self.targets = try targets.compactMap { target in + if let string = target as? String { + return TestTarget(name: string) + } else if let dictionary = target as? JSONDictionary { + return try TestTarget(jsonDictionary: dictionary) + } else { + return nil + } + } + } else { + targets = [] + } preActions = jsonDictionary.json(atKeyPath: "preActions") ?? [] postActions = jsonDictionary.json(atKeyPath: "postActions") ?? [] environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary) } } +extension Scheme.Test.TestTarget: JSONObjectConvertible { + + public init(jsonDictionary: JSONDictionary) throws { + name = try jsonDictionary.json(atKeyPath: "name") + randomExecutionOrder = jsonDictionary.json(atKeyPath: "randomExecutionOrder") ?? false + parallelizable = jsonDictionary.json(atKeyPath: "parallelizable") ?? false + } +} + extension Scheme.Profile: JSONObjectConvertible { public init(jsonDictionary: JSONDictionary) throws { diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index 2cae3791..793e4783 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -110,8 +110,8 @@ extension Project { } for testTarget in scheme.testTargets { - if getTarget(testTarget) == nil { - errors.append(.invalidTargetSchemeTest(target: target.name, testTarget: testTarget)) + if getTarget(testTarget.name) == nil { + errors.append(.invalidTargetSchemeTest(target: target.name, testTarget: testTarget.name)) } } } diff --git a/Sources/ProjectSpec/TargetScheme.swift b/Sources/ProjectSpec/TargetScheme.swift index 50d49f88..69f7bc48 100644 --- a/Sources/ProjectSpec/TargetScheme.swift +++ b/Sources/ProjectSpec/TargetScheme.swift @@ -3,7 +3,7 @@ import JSONUtilities import xcodeproj public struct TargetScheme: Equatable { - public var testTargets: [String] + public var testTargets: [Scheme.Test.TestTarget] public var configVariants: [String] public var gatherCoverageData: Bool public var commandLineArguments: [String: Bool] @@ -12,7 +12,7 @@ public struct TargetScheme: Equatable { public var postActions: [Scheme.ExecutionAction] public init( - testTargets: [String] = [], + testTargets: [Scheme.Test.TestTarget] = [], configVariants: [String] = [], gatherCoverageData: Bool = false, commandLineArguments: [String: Bool] = [:], @@ -33,7 +33,19 @@ public struct TargetScheme: Equatable { extension TargetScheme: JSONObjectConvertible { public init(jsonDictionary: JSONDictionary) throws { - testTargets = jsonDictionary.json(atKeyPath: "testTargets") ?? [] + if let targets = jsonDictionary["testTargets"] as? [Any] { + self.testTargets = try targets.compactMap { target in + if let string = target as? String { + return .init(name: string) + } else if let dictionary = target as? JSONDictionary { + return try .init(jsonDictionary: dictionary) + } else { + return nil + } + } + } else { + testTargets = [] + } configVariants = jsonDictionary.json(atKeyPath: "configVariants") ?? [] gatherCoverageData = jsonDictionary.json(atKeyPath: "gatherCoverageData") ?? false commandLineArguments = jsonDictionary.json(atKeyPath: "commandLineArguments") ?? [:] diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift index 921a2276..c868cb5a 100644 --- a/Sources/XcodeGenKit/SchemeGenerator.swift +++ b/Sources/XcodeGenKit/SchemeGenerator.swift @@ -95,9 +95,9 @@ public class SchemeGenerator { return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes) } - let testTargetNames = scheme.test?.targets ?? [] - let testBuildTargets = testTargetNames.map { - Scheme.BuildTarget(target: $0, buildTypes: BuildType.testOnly) + let testTargets = scheme.test?.targets ?? [] + let testBuildTargets = testTargets.map { + Scheme.BuildTarget(target: $0.name, buildTypes: BuildType.testOnly) } let testBuildTargetEntries = testBuildTargets.map(getBuildEntry) @@ -128,8 +128,11 @@ public class SchemeGenerator { buildImplicitDependencies: scheme.build.buildImplicitDependencies ) - let testables = testBuildTargetEntries.map { - XCScheme.TestableReference(skipped: false, buildableReference: $0.buildableReference) + let testables = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuilEntries in + XCScheme.TestableReference(skipped: false, + parallelizable: testTarget.parallelizable, + randomExecutionOrdering: testTarget.randomExecutionOrder, + buildableReference: testBuilEntries.buildableReference) } let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) } diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme new file mode 100644 index 00000000..4fb7309b --- /dev/null +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme index 3b33dfb3..6901dafc 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme @@ -44,6 +44,7 @@ buildConfiguration = "Production Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + codeCoverageEnabled = "YES" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -56,6 +57,8 @@ ReferencedContainer = "container:Project.xcodeproj"> + + diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index 8a25909a..3b96d522 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -217,6 +217,19 @@ schemes: commandLineArguments: argument: YES argument.with.dot: YES + test: + gatherCoverageData: true + App_Scheme: + build: + targets: + App_iOS: all + test: + gatherCoverageData: true + targets: + - App_iOS_UITests + - name: App_iOS_Tests + parallelizable: true + randomExecutionOrder: true targetTemplates: MyTemplate: scheme: {} diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index e6c731f4..59eb720c 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -253,7 +253,7 @@ class SpecLoadingTests: XCTestCase { $0.it("parses target schemes") { var targetDictionary = validTarget targetDictionary["scheme"] = [ - "testTargets": ["t1", "t2"], + "testTargets": ["t1", ["name": "t2"]], "configVariants": ["dev", "app-store"], "commandLineArguments": [ "ENV1": true, @@ -312,6 +312,18 @@ class SpecLoadingTests: XCTestCase { ], ], ], + "test": [ + "config": "debug", + "targets": [ + "Target1", + [ + "name": "Target2", + "parallelizable": true, + "randomExecutionOrder": true, + ], + ], + "gatherCoverageData": true, + ] ] let scheme = try Scheme(name: "Scheme", jsonDictionary: schemeDictionary) let expectedTargets: [Scheme.BuildTarget] = [ @@ -330,6 +342,16 @@ class SpecLoadingTests: XCTestCase { try expect(scheme.build.parallelizeBuild) == false try expect(scheme.build.buildImplicitDependencies) == false + + let expectedTest = Scheme.Test(config: "debug", + gatherCoverageData: true, + targets: [ + "Target1", + Scheme.Test.TestTarget(name: "Target2", + randomExecutionOrder: true, + parallelizable: true) + ]) + try expect(scheme.test) == expectedTest } $0.it("parses schemes variables") { From e8f2ce0d0c4e1113d033b2a74ebb57a68d86f8f6 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 3 Nov 2018 19:11:47 +1100 Subject: [PATCH 65/77] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b20925e2..606cc3d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen - Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb - Added `entitlements` to targets for generating an `.entitlement` file [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb +- Added `parallelizable` and `randomExecutionOrder` to `Scheme` test targets in an expanded form [#434](https://github.com/yonaskolb/XcodeGen/pull/434) @yonaskolb - Validate incorrect config setting definitions [#431](https://github.com/yonaskolb/XcodeGen/pull/431) @yonaskolb - Automatically set project `SDKROOT` if there is only a single platform within the project [#433](https://github.com/yonaskolb/XcodeGen/pull/433) @yonaskolb From ea2d38ecdd5b1650cccac2553592ad8ead87363b Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 3 Nov 2018 20:09:46 +1100 Subject: [PATCH 66/77] tweak project description --- Sources/ProjectSpec/Project.swift | 6 +++++- Sources/ProjectSpec/Target.swift | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Sources/ProjectSpec/Project.swift b/Sources/ProjectSpec/Project.swift index 4526140d..acac3267 100644 --- a/Sources/ProjectSpec/Project.swift +++ b/Sources/ProjectSpec/Project.swift @@ -89,7 +89,7 @@ extension Project: CustomDebugStringConvertible { var string = "Name: \(name)" let indent = " " if !include.isEmpty { - string += "\nInclude:\n\(indent)" + include.map { "📄 \($0)" }.joined(separator: "\n\(indent)") + string += "\nInclude:\n\(indent)" + include.map { $0.description }.joined(separator: "\n\(indent)") } if !settingGroups.isEmpty { @@ -105,6 +105,10 @@ extension Project: CustomDebugStringConvertible { if !aggregateTargets.isEmpty { string += "\nAggregate Targets:\n\(indent)" + aggregateTargets.map { $0.description }.joined(separator: "\n\(indent)") } + if !schemes.isEmpty { + let allSchemes = targets.filter { $0.scheme != nil }.map { $0.name } + schemes.map { $0.name } + string += "\nSchemes:\n\(indent)" + allSchemes.joined(separator: "\n\(indent)") + } return string } diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index 8b38ee52..6af01e28 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -103,7 +103,7 @@ public struct Target: ProjectTarget { extension Target: CustomStringConvertible { public var description: String { - return "\(platform.emoji) \(name): \(type)" + return "\(name): \(platform.rawValue) \(type)" } } From e7ef30a241b255acc2653eebf5095b3bd7992c43 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 3 Nov 2018 20:27:59 +1100 Subject: [PATCH 67/77] refactoring --- Package.swift | 4 + Sources/ProjectSpec/Project.swift | 2 +- Sources/XcodeGen/main.swift | 17 +- .../{ProjectWriter.swift => FileWriter.swift} | 6 +- Sources/XcodeGenKit/PBXProjGenerator.swift | 4 +- Sources/XcodeGenKit/ProjectGenerator.swift | 5 +- Sources/XcodeGenKit/SourceGenerator.swift | 12 +- .../PerformanceTests.swift | 6 +- .../TestProject.swift | 0 Tests/XcodeGenKitTests/GeneratorHelpers.swift | 1 + .../ProjectFixtureTests.swift | 52 +---- .../ProjectGeneratorTests.swift | 172 +-------------- .../SchemeGeneratorTests.swift | 208 ++++++++++++++++++ .../SourceGeneratorTests.swift | 42 ++++ 14 files changed, 286 insertions(+), 245 deletions(-) rename Sources/XcodeGenKit/{ProjectWriter.swift => FileWriter.swift} (90%) rename Tests/{XcodeGenKitTests => PerformanceTests}/PerformanceTests.swift (88%) rename Tests/{XcodeGenKitTests => PerformanceTests}/TestProject.swift (100%) create mode 100644 Tests/XcodeGenKitTests/SchemeGeneratorTests.swift diff --git a/Package.swift b/Package.swift index a8688b98..adfff4bf 100644 --- a/Package.swift +++ b/Package.swift @@ -38,6 +38,10 @@ let package = Package( .testTarget(name: "XcodeGenKitTests", dependencies: [ "XcodeGenKit", "Spectre", + ]), + .testTarget(name: "PerformanceTests", dependencies: [ + "XcodeGenKit", + "Spectre", ]) ] ) diff --git a/Sources/ProjectSpec/Project.swift b/Sources/ProjectSpec/Project.swift index acac3267..f5d1d351 100644 --- a/Sources/ProjectSpec/Project.swift +++ b/Sources/ProjectSpec/Project.swift @@ -78,7 +78,7 @@ public struct Project: BuildSettingsContainer { return configs.first { $0.name == configName } } - public var projectPath: Path { + public var defaultProjectPath: Path { return basePath + "\(name).xcodeproj" } } diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index f14670c6..4959642b 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -22,7 +22,7 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { } let projectSpecPath = Path(spec).absolute() - let projectPath = project == "" ? projectSpecPath.parent() : Path(project).absolute() + var projectPath = project == "" ? projectSpecPath.parent() : Path(project).absolute() if !projectSpecPath.exists { fatalError("No project spec found at \(projectSpecPath.absolute())") @@ -39,19 +39,20 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { } do { - logger.info("⚙️ Generating project...") - try project.validateMinimumXcodeGenVersion(version) + try project.validate() + logger.info("⚙️ Generating project...") let projectGenerator = ProjectGenerator(project: project) let xcodeProject = try projectGenerator.generateXcodeProject() - logger.info("⚙️ Writing project...") - let projectWriter = ProjectWriter(project: project) - try projectWriter.writeXcodeProject(xcodeProject) - try projectWriter.writePlists() + logger.info("⚙️ Writing project...") + let fileWriter = FileWriter(project: project) + projectPath = projectPath + "\(project.name).xcodeproj" + try fileWriter.writeXcodeProject(xcodeProject, to: projectPath) + try fileWriter.writePlists() - logger.success("💾 Saved project to \(project.projectPath.string)") + logger.success("💾 Saved project to \(projectPath)") } catch let error as SpecValidationError { fatalError(error.description) } catch { diff --git a/Sources/XcodeGenKit/ProjectWriter.swift b/Sources/XcodeGenKit/FileWriter.swift similarity index 90% rename from Sources/XcodeGenKit/ProjectWriter.swift rename to Sources/XcodeGenKit/FileWriter.swift index 9029f42e..1834b4c3 100644 --- a/Sources/XcodeGenKit/ProjectWriter.swift +++ b/Sources/XcodeGenKit/FileWriter.swift @@ -3,7 +3,7 @@ import ProjectSpec import xcodeproj import PathKit -public class ProjectWriter { +public class FileWriter { let project: Project @@ -11,8 +11,8 @@ public class ProjectWriter { self.project = project } - public func writeXcodeProject(_ xcodeProject: XcodeProj) throws { - let projectPath = project.projectPath + public func writeXcodeProject(_ xcodeProject: XcodeProj, to projectPath: Path? = nil) throws { + let projectPath = project.defaultProjectPath let tempPath = Path.temporary + "XcodeGen_\(Int(NSTimeIntervalSince1970))" try? tempPath.delete() if projectPath.exists { diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index dff158f4..653e345b 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -27,9 +27,7 @@ public class PBXProjGenerator { public init(project: Project) { self.project = project pbxProj = PBXProj(rootObject: nil, objectVersion: 46) - sourceGenerator = SourceGenerator(project: project) { [unowned self] object in - _ = self.addObject(object) - } + sourceGenerator = SourceGenerator(project: project, pbxProj: pbxProj) } func addObject(_ object: T, context: String? = nil) -> T { diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index b6a83d49..7ee145d9 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -13,10 +13,7 @@ public class ProjectGenerator { self.project = project } - public func generateXcodeProject(validate: Bool = true) throws -> XcodeProj { - if validate { - try project.validate() - } + public func generateXcodeProject() throws -> XcodeProj { // generate PBXProj let pbxProjGenerator = PBXProjGenerator(project: project) diff --git a/Sources/XcodeGenKit/SourceGenerator.swift b/Sources/XcodeGenKit/SourceGenerator.swift index a99e5ded..db11458d 100644 --- a/Sources/XcodeGenKit/SourceGenerator.swift +++ b/Sources/XcodeGenKit/SourceGenerator.swift @@ -18,7 +18,8 @@ class SourceGenerator { private var variantGroupsByPath: [Path: PBXVariantGroup] = [:] private let project: Project - var addObjectClosure: (PBXObject) -> Void + let pbxProj: PBXProj + var targetSourceExcludePaths: Set = [] var defaultExcludedFiles = [ ".DS_Store", @@ -26,13 +27,14 @@ class SourceGenerator { private(set) var knownRegions: Set = [] - init(project: Project, addObjectClosure: @escaping (PBXObject) -> Void) { + init(project: Project, pbxProj: PBXProj) { self.project = project - self.addObjectClosure = addObjectClosure + self.pbxProj = pbxProj } - func addObject(_ object: T) -> T { - addObjectClosure(object) + func addObject(_ object: T, context: String? = nil) -> T { + pbxProj.add(object: object) + object.context = context return object } diff --git a/Tests/XcodeGenKitTests/PerformanceTests.swift b/Tests/PerformanceTests/PerformanceTests.swift similarity index 88% rename from Tests/XcodeGenKitTests/PerformanceTests.swift rename to Tests/PerformanceTests/PerformanceTests.swift index 6ecaec3d..b1e89a7e 100644 --- a/Tests/XcodeGenKitTests/PerformanceTests.swift +++ b/Tests/PerformanceTests/PerformanceTests.swift @@ -23,11 +23,13 @@ class GeneratedPerformanceTests: XCTestCase { let xcodeProject = try generator.generateXcodeProject() self.measure { xcodeProject.pbxproj.invalidateUUIDs() - try! xcodeProject.write(path: project.projectPath) + try! xcodeProject.write(path: project.defaultProjectPath) } } } +let fixturePath = Path(#file).parent().parent() + "Fixtures" + class FixturePerformanceTests: XCTestCase { let specPath = fixturePath + "TestProject/project.yml" @@ -52,7 +54,7 @@ class FixturePerformanceTests: XCTestCase { let xcodeProject = try generator.generateXcodeProject() self.measure { xcodeProject.pbxproj.invalidateUUIDs() - try! xcodeProject.write(path: project.projectPath) + try! xcodeProject.write(path: project.defaultProjectPath) } } } diff --git a/Tests/XcodeGenKitTests/TestProject.swift b/Tests/PerformanceTests/TestProject.swift similarity index 100% rename from Tests/XcodeGenKitTests/TestProject.swift rename to Tests/PerformanceTests/TestProject.swift diff --git a/Tests/XcodeGenKitTests/GeneratorHelpers.swift b/Tests/XcodeGenKitTests/GeneratorHelpers.swift index 24a077eb..0f2181eb 100644 --- a/Tests/XcodeGenKitTests/GeneratorHelpers.swift +++ b/Tests/XcodeGenKitTests/GeneratorHelpers.swift @@ -10,6 +10,7 @@ extension Project { func generateXcodeProject(file: String = #file, line: Int = #line) throws -> XcodeProj { return try doThrowing(file: file, line: line) { + try validate() let generator = ProjectGenerator(project: self) return try generator.generateXcodeProject() } diff --git a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift index 6a40b2be..3f125a77 100644 --- a/Tests/XcodeGenKitTests/ProjectFixtureTests.swift +++ b/Tests/XcodeGenKitTests/ProjectFixtureTests.swift @@ -9,62 +9,18 @@ class ProjectFixtureTests: XCTestCase { func testProjectFixture() { describe { - var xcodeProject: XcodeProj? - $0.it("generates") { - xcodeProject = try generateXcodeProject(specPath: fixturePath + "TestProject/project.yml") - } - - $0.it("generates variant group") { - guard let xcodeProject = xcodeProject else { return } - - func getFileReferences(_ path: String) -> [PBXFileReference] { - return xcodeProject.pbxproj.fileReferences.filter { $0.path == path } - } - - func getVariableGroups(_ name: String?) -> [PBXVariantGroup] { - return xcodeProject.pbxproj.variantGroups.filter { $0.name == name } - } - - let resourceName = "LocalizedStoryboard.storyboard" - let baseResource = "Base.lproj/LocalizedStoryboard.storyboard" - let localizedResource = "en.lproj/LocalizedStoryboard.strings" - - guard let variableGroup = getVariableGroups(resourceName).first else { throw failure("Couldn't find the variable group") } - - do { - let refs = getFileReferences(baseResource) - try expect(refs.count) == 1 - try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1 - } - - do { - let refs = getFileReferences(localizedResource) - try expect(refs.count) == 1 - try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1 - } - } - - $0.it("generates scheme execution actions") { - guard let xcodeProject = xcodeProject else { return } - - let frameworkScheme = xcodeProject.sharedData?.schemes.first { $0.name == "Framework" } - try expect(frameworkScheme?.buildAction?.preActions.first?.scriptText) == "echo Starting Framework Build" - try expect(frameworkScheme?.buildAction?.preActions.first?.title) == "Run Script" - try expect(frameworkScheme?.buildAction?.preActions.first?.environmentBuildable?.blueprintName) == "Framework_iOS" - try expect(frameworkScheme?.buildAction?.preActions.first?.environmentBuildable?.buildableName) == "Framework.framework" + try generateXcodeProject(specPath: fixturePath + "TestProject/project.yml") } } } } -fileprivate func generateXcodeProject(specPath: Path, file: String = #file, line: Int = #line) throws -> XcodeProj { +fileprivate func generateXcodeProject(specPath: Path, file: String = #file, line: Int = #line) throws { let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) + let writer = FileWriter(project: project) let xcodeProject = try generator.generateXcodeProject() - let writer = ProjectWriter(project: project) - try writer.writePlists() try writer.writeXcodeProject(xcodeProject) - - return xcodeProject + try writer.writePlists() } diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 9b0b285d..41551b55 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -854,7 +854,7 @@ class ProjectGeneratorTests: XCTestCase { let tempPath = Path.temporary + "info" let project = Project(basePath: tempPath, name: "", targets: [Target(name: "", type: .application, platform: .iOS, info: plist)]) let pbxProject = try project.generatePbxProj() - let writer = ProjectWriter(project: project) + let writer = FileWriter(project: project) try writer.writePlists() guard let targetConfig = pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first else { @@ -881,174 +881,4 @@ class ProjectGeneratorTests: XCTestCase { } } } - - func testSchemes() { - describe { - - let buildTarget = Scheme.BuildTarget(target: app.name) - $0.it("generates scheme") { - let preAction = Scheme.ExecutionAction(name: "Script", script: "echo Starting", settingsTarget: app.name) - let scheme = Scheme( - name: "MyScheme", - build: Scheme.Build(targets: [buildTarget], preActions: [preAction]) - ) - let project = Project( - basePath: "", - name: "test", - targets: [app, framework], - schemes: [scheme] - ) - let xcodeProject = try project.generateXcodeProject() - guard let target = xcodeProject.pbxproj.nativeTargets - .first(where: { $0.name == app.name }) else { - throw failure("Target not found") - } - guard let xcscheme = xcodeProject.sharedData?.schemes.first else { - throw failure("Scheme not found") - } - try expect(scheme.name) == "MyScheme" - try expect(xcscheme.buildAction?.buildImplicitDependencies) == true - try expect(xcscheme.buildAction?.parallelizeBuild) == true - 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" - try expect(xcscheme.buildAction?.preActions.first?.environmentBuildable?.blueprintName) == "MyApp" - guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { - throw failure("Build Action entry not found") - } - try expect(buildActionEntry.buildFor) == BuildType.all - - let buildableReferences: [XCScheme.BuildableReference] = [ - buildActionEntry.buildableReference, - xcscheme.launchAction?.buildableProductRunnable?.buildableReference, - xcscheme.profileAction?.buildableProductRunnable?.buildableReference, - xcscheme.testAction?.macroExpansion, - ].compactMap { $0 } - - for buildableReference in buildableReferences { - // FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference - try expect(buildableReference.blueprintName) == target.name - try expect(buildableReference.buildableName) == "\(target.name).\(target.productType!.fileExtension!)" - } - - try expect(xcscheme.launchAction?.buildConfiguration) == "Debug" - try expect(xcscheme.testAction?.buildConfiguration) == "Debug" - try expect(xcscheme.profileAction?.buildConfiguration) == "Release" - try expect(xcscheme.analyzeAction?.buildConfiguration) == "Debug" - try expect(xcscheme.archiveAction?.buildConfiguration) == "Release" - } - - $0.it("sets environment variables for a scheme") { - let runVariables: [XCScheme.EnvironmentVariable] = [ - XCScheme.EnvironmentVariable(variable: "RUN_ENV", value: "ENABLED", enabled: true), - XCScheme.EnvironmentVariable(variable: "OTHER_RUN_ENV", value: "DISABLED", enabled: false), - ] - - let scheme = Scheme( - name: "EnvironmentVariablesScheme", - build: Scheme.Build(targets: [buildTarget]), - run: Scheme.Run(config: "Debug", environmentVariables: runVariables), - test: Scheme.Test(config: "Debug"), - profile: Scheme.Profile(config: "Debug") - ) - let project = Project( - basePath: "", - name: "test", - targets: [app, framework], - schemes: [scheme] - ) - let xcodeProject = try project.generateXcodeProject() - - guard let xcscheme = xcodeProject.sharedData?.schemes.first else { - throw failure("Scheme not found") - } - - try expect( - xcodeProject.pbxproj.nativeTargets - .contains(where: { $0.name == app.name }) - ).beTrue() - try expect(xcscheme.launchAction?.environmentVariables) == runVariables - try expect(xcscheme.testAction?.environmentVariables).to.beNil() - try expect(xcscheme.profileAction?.environmentVariables).to.beNil() - } - - $0.it("generates target schemes from config variant") { - let configVariants = ["Test", "Production"] - var target = app - target.scheme = TargetScheme(configVariants: configVariants) - let configs: [Config] = [ - Config(name: "Test Debug", type: .debug), - Config(name: "Production Debug", type: .debug), - Config(name: "Test Release", type: .release), - Config(name: "Production Release", type: .release), - ] - - let project = Project(basePath: "", name: "test", configs: configs, targets: [target, framework]) - let xcodeProject = try project.generateXcodeProject() - - try expect(xcodeProject.sharedData?.schemes.count) == 2 - - guard let xcscheme = xcodeProject.sharedData?.schemes - .first(where: { $0.name == "\(target.name) Test" }) else { - throw failure("Scheme not found") - } - guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { - throw failure("Build Action entry not found") - } - - 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" - } - - $0.it("generates environment variables for target schemes") { - let variables: [XCScheme.EnvironmentVariable] = [XCScheme.EnvironmentVariable(variable: "env", value: "var", enabled: false)] - var target = app - target.scheme = TargetScheme(environmentVariables: variables) - - let project = Project(basePath: "", name: "test", targets: [target, framework]) - let xcodeProject = try project.generateXcodeProject() - - try expect(xcodeProject.sharedData?.schemes.count) == 1 - - guard let xcscheme = xcodeProject.sharedData?.schemes.first else { - throw failure("Scheme not found") - } - - try expect(xcscheme.launchAction?.environmentVariables) == variables - try expect(xcscheme.testAction?.environmentVariables) == variables - try expect(xcscheme.profileAction?.environmentVariables) == variables - } - - $0.it("generates pre and post actions for target schemes") { - var target = app - target.scheme = TargetScheme( - preActions: [.init(name: "Run", script: "do")], - postActions: [.init(name: "Run2", script: "post", settingsTarget: "MyApp")] - ) - - let project = Project(basePath: "", name: "test", targets: [target, framework]) - let xcodeProject = try project.generateXcodeProject() - - try expect(xcodeProject.sharedData?.schemes.count) == 1 - - guard let xcscheme = xcodeProject.sharedData?.schemes.first else { - throw failure("Scheme not found") - } - - try expect(xcscheme.launchAction?.preActions.count) == 1 - try expect(xcscheme.launchAction?.preActions.first?.title) == "Run" - try expect(xcscheme.launchAction?.preActions.first?.scriptText) == "do" - - try expect(xcscheme.testAction?.postActions.count) == 1 - try expect(xcscheme.testAction?.postActions.first?.title) == "Run2" - try expect(xcscheme.testAction?.postActions.first?.scriptText) == "post" - try expect(xcscheme.testAction?.postActions.first?.environmentBuildable?.blueprintName) == "MyApp" - } - } - } } diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift new file mode 100644 index 00000000..05c4fae6 --- /dev/null +++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift @@ -0,0 +1,208 @@ +import PathKit +import ProjectSpec +import Spectre +import XcodeGenKit +import xcodeproj +import XCTest +import Yams + +fileprivate let app = Target( + name: "MyApp", + type: .application, + platform: .iOS, + dependencies: [Dependency(type: .target, reference: "MyFramework")] +) + +fileprivate let framework = Target( + name: "MyFramework", + type: .framework, + platform: .iOS +) + +fileprivate let optionalFramework = Target( + name: "MyOptionalFramework", + type: .framework, + platform: .iOS +) + +fileprivate let uiTest = Target( + name: "MyAppUITests", + type: .uiTestBundle, + platform: .iOS, + dependencies: [Dependency(type: .target, reference: "MyApp")] +) + +class SchemeGeneratorTests: XCTestCase { + + + + func testSchemes() { + describe { + + let buildTarget = Scheme.BuildTarget(target: app.name) + $0.it("generates scheme") { + let preAction = Scheme.ExecutionAction(name: "Script", script: "echo Starting", settingsTarget: app.name) + let scheme = Scheme( + name: "MyScheme", + build: Scheme.Build(targets: [buildTarget], preActions: [preAction]) + ) + let project = Project( + basePath: "", + name: "test", + targets: [app, framework], + schemes: [scheme] + ) + let xcodeProject = try project.generateXcodeProject() + guard let target = xcodeProject.pbxproj.nativeTargets + .first(where: { $0.name == app.name }) else { + throw failure("Target not found") + } + guard let xcscheme = xcodeProject.sharedData?.schemes.first else { + throw failure("Scheme not found") + } + try expect(scheme.name) == "MyScheme" + try expect(xcscheme.buildAction?.buildImplicitDependencies) == true + try expect(xcscheme.buildAction?.parallelizeBuild) == true + 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" + try expect(xcscheme.buildAction?.preActions.first?.environmentBuildable?.blueprintName) == "MyApp" + guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { + throw failure("Build Action entry not found") + } + try expect(buildActionEntry.buildFor) == BuildType.all + + let buildableReferences: [XCScheme.BuildableReference] = [ + buildActionEntry.buildableReference, + xcscheme.launchAction?.buildableProductRunnable?.buildableReference, + xcscheme.profileAction?.buildableProductRunnable?.buildableReference, + xcscheme.testAction?.macroExpansion, + ].compactMap { $0 } + + for buildableReference in buildableReferences { + // FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference + try expect(buildableReference.blueprintName) == target.name + try expect(buildableReference.buildableName) == "\(target.name).\(target.productType!.fileExtension!)" + } + + try expect(xcscheme.launchAction?.buildConfiguration) == "Debug" + try expect(xcscheme.testAction?.buildConfiguration) == "Debug" + try expect(xcscheme.profileAction?.buildConfiguration) == "Release" + try expect(xcscheme.analyzeAction?.buildConfiguration) == "Debug" + try expect(xcscheme.archiveAction?.buildConfiguration) == "Release" + } + + $0.it("sets environment variables for a scheme") { + let runVariables: [XCScheme.EnvironmentVariable] = [ + XCScheme.EnvironmentVariable(variable: "RUN_ENV", value: "ENABLED", enabled: true), + XCScheme.EnvironmentVariable(variable: "OTHER_RUN_ENV", value: "DISABLED", enabled: false), + ] + + let scheme = Scheme( + name: "EnvironmentVariablesScheme", + build: Scheme.Build(targets: [buildTarget]), + run: Scheme.Run(config: "Debug", environmentVariables: runVariables), + test: Scheme.Test(config: "Debug"), + profile: Scheme.Profile(config: "Debug") + ) + let project = Project( + basePath: "", + name: "test", + targets: [app, framework], + schemes: [scheme] + ) + let xcodeProject = try project.generateXcodeProject() + + guard let xcscheme = xcodeProject.sharedData?.schemes.first else { + throw failure("Scheme not found") + } + + try expect( + xcodeProject.pbxproj.nativeTargets + .contains(where: { $0.name == app.name }) + ).beTrue() + try expect(xcscheme.launchAction?.environmentVariables) == runVariables + try expect(xcscheme.testAction?.environmentVariables).to.beNil() + try expect(xcscheme.profileAction?.environmentVariables).to.beNil() + } + + $0.it("generates target schemes from config variant") { + let configVariants = ["Test", "Production"] + var target = app + target.scheme = TargetScheme(configVariants: configVariants) + let configs: [Config] = [ + Config(name: "Test Debug", type: .debug), + Config(name: "Production Debug", type: .debug), + Config(name: "Test Release", type: .release), + Config(name: "Production Release", type: .release), + ] + + let project = Project(basePath: "", name: "test", configs: configs, targets: [target, framework]) + let xcodeProject = try project.generateXcodeProject() + + try expect(xcodeProject.sharedData?.schemes.count) == 2 + + guard let xcscheme = xcodeProject.sharedData?.schemes + .first(where: { $0.name == "\(target.name) Test" }) else { + throw failure("Scheme not found") + } + guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { + throw failure("Build Action entry not found") + } + + 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" + } + + $0.it("generates environment variables for target schemes") { + let variables: [XCScheme.EnvironmentVariable] = [XCScheme.EnvironmentVariable(variable: "env", value: "var", enabled: false)] + var target = app + target.scheme = TargetScheme(environmentVariables: variables) + + let project = Project(basePath: "", name: "test", targets: [target, framework]) + let xcodeProject = try project.generateXcodeProject() + + try expect(xcodeProject.sharedData?.schemes.count) == 1 + + guard let xcscheme = xcodeProject.sharedData?.schemes.first else { + throw failure("Scheme not found") + } + + try expect(xcscheme.launchAction?.environmentVariables) == variables + try expect(xcscheme.testAction?.environmentVariables) == variables + try expect(xcscheme.profileAction?.environmentVariables) == variables + } + + $0.it("generates pre and post actions for target schemes") { + var target = app + target.scheme = TargetScheme( + preActions: [.init(name: "Run", script: "do")], + postActions: [.init(name: "Run2", script: "post", settingsTarget: "MyApp")] + ) + + let project = Project(basePath: "", name: "test", targets: [target, framework]) + let xcodeProject = try project.generateXcodeProject() + + try expect(xcodeProject.sharedData?.schemes.count) == 1 + + guard let xcscheme = xcodeProject.sharedData?.schemes.first else { + throw failure("Scheme not found") + } + + try expect(xcscheme.launchAction?.preActions.count) == 1 + try expect(xcscheme.launchAction?.preActions.first?.title) == "Run" + try expect(xcscheme.launchAction?.preActions.first?.scriptText) == "do" + + try expect(xcscheme.testAction?.postActions.count) == 1 + try expect(xcscheme.testAction?.postActions.first?.title) == "Run2" + try expect(xcscheme.testAction?.postActions.first?.scriptText) == "post" + try expect(xcscheme.testAction?.postActions.first?.environmentBuildable?.blueprintName) == "MyApp" + } + } + } +} diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift index 7dec0a53..69c152cc 100644 --- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift @@ -126,6 +126,48 @@ class SourceGeneratorTests: XCTestCase { try expect(fileReference.path) == "model2.xcdatamodel" } + $0.it("generates variant groups") { + let directories = """ + Sources: + Base.lproj: + - LocalizedStoryboard.storyboard + en.lproj: + - LocalizedStoryboard.strings + """ + try createDirectories(directories) + + let target = Target(name: "Test", type: .application, platform: .iOS, sources: ["Sources"]) + let project = Project(basePath: directoryPath, name: "Test", targets: [target]) + + let pbxProj = try project.generatePbxProj() + + func getFileReferences(_ path: String) -> [PBXFileReference] { + return pbxProj.fileReferences.filter { $0.path == path } + } + + func getVariableGroups(_ name: String?) -> [PBXVariantGroup] { + return pbxProj.variantGroups.filter { $0.name == name } + } + + let resourceName = "LocalizedStoryboard.storyboard" + let baseResource = "Base.lproj/LocalizedStoryboard.storyboard" + let localizedResource = "en.lproj/LocalizedStoryboard.strings" + + guard let variableGroup = getVariableGroups(resourceName).first else { throw failure("Couldn't find the variable group") } + + do { + let refs = getFileReferences(baseResource) + try expect(refs.count) == 1 + try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1 + } + + do { + let refs = getFileReferences(localizedResource) + try expect(refs.count) == 1 + try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1 + } + } + $0.it("handles duplicate names") { let directories = """ Sources: From 7e92db5346e9cbafa6e2547db2c1080849e0697e Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Fri, 2 Nov 2018 17:55:24 +1100 Subject: [PATCH 68/77] add sdk dependency type --- CHANGELOG.md | 1 + Docs/ProjectSpec.md | 7 ++-- Sources/ProjectSpec/Dependency.swift | 4 +++ Sources/ProjectSpec/SpecValidation.swift | 20 +++++++++-- Sources/ProjectSpec/SpecValidationError.swift | 3 ++ Sources/XcodeGenKit/PBXProjGenerator.swift | 35 +++++++++++++++++++ .../TestProject/App_iOS/ViewController.swift | 3 +- .../Project.xcodeproj/project.pbxproj | 10 ++++++ Tests/Fixtures/TestProject/project.yml | 3 ++ Tests/XcodeGenKitTests/ProjectSpecTests.swift | 14 ++++++++ Tests/XcodeGenKitTests/SpecLoadingTests.swift | 4 ++- 11 files changed, 97 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 606cc3d5..577bfb6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen - Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb - Added `entitlements` to targets for generating an `.entitlement` file [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb +- Added `sdk` dependency type for linking system frameworks within the SDK [#430](https://github.com/yonaskolb/XcodeGen/pull/430) @yonaskolb - Added `parallelizable` and `randomExecutionOrder` to `Scheme` test targets in an expanded form [#434](https://github.com/yonaskolb/XcodeGen/pull/434) @yonaskolb - Validate incorrect config setting definitions [#431](https://github.com/yonaskolb/XcodeGen/pull/431) @yonaskolb - Automatically set project `SDKROOT` if there is only a single platform within the project [#433](https://github.com/yonaskolb/XcodeGen/pull/433) @yonaskolb diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index 2cc75280..05bf8233 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -329,10 +329,9 @@ A dependency can be one of a 3 types: - `target: name` - links to another target - `framework: path` - links to a framework - `carthage: name` - helper for linking to a Carthage framework +- `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) -**Embed options**: - -These only applied to `target` and `framework` dependencies. +**Linking options**: - [ ] **embed**: **Bool** - Whether to embed the dependency. Defaults to true for application target and false for non application targets. - [ ] **link**: **Bool** - Whether to link the dependency. Defaults to `true` depending on the type of the dependency and the type of the target (e.g. static libraries will only link to executables by default). @@ -363,6 +362,8 @@ targets: - target: MyFramework - framework: path/to/framework.framework - carthage: Result + - sdk: Contacts.framework + - sdk: libc++.tbd MyFramework: type: framework ``` diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift index 1e01b5f5..722aae65 100644 --- a/Sources/ProjectSpec/Dependency.swift +++ b/Sources/ProjectSpec/Dependency.swift @@ -34,6 +34,7 @@ public struct Dependency: Equatable { case target case framework case carthage + case sdk } } @@ -49,6 +50,9 @@ extension Dependency: JSONObjectConvertible { } else if let carthage: String = jsonDictionary.json(atKeyPath: "carthage") { type = .carthage reference = carthage + } else if let sdk: String = jsonDictionary.json(atKeyPath: "sdk") { + type = .sdk + reference = sdk } else { throw SpecParsingError.invalidDependency(jsonDictionary) } diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index 793e4783..b45e7e4a 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -138,9 +138,25 @@ extension Project { for target in targets { for dependency in target.dependencies { - if dependency.type == .target, getProjectTarget(dependency.reference) == nil { - errors.append(.invalidTargetDependency(target: target.name, dependency: dependency.reference)) + switch dependency.type { + case .target: + if getProjectTarget(dependency.reference) == nil { + errors.append(.invalidTargetDependency(target: target.name, dependency: dependency.reference)) + } + case .sdk: + let path = Path(dependency.reference) + if !dependency.reference.contains("/") { + switch path.extension { + case "framework"?, + "tbd"?: + break + default: + errors.append(.invalidSDKDependency(target: target.name, dependency: dependency.reference)) + } + } + default: break } + } for source in target.sources { diff --git a/Sources/ProjectSpec/SpecValidationError.swift b/Sources/ProjectSpec/SpecValidationError.swift index 53e579eb..6c0acb7f 100644 --- a/Sources/ProjectSpec/SpecValidationError.swift +++ b/Sources/ProjectSpec/SpecValidationError.swift @@ -6,6 +6,7 @@ public struct SpecValidationError: Error, CustomStringConvertible { public enum ValidationError: Error, CustomStringConvertible { case invalidXcodeGenVersion(minimumVersion: Version, version: Version) + case invalidSDKDependency(target: String, dependency: String) case invalidTargetDependency(target: String, dependency: String) case invalidTargetSource(target: String, source: String) case invalidTargetConfigFile(target: String, configFile: String, config: String) @@ -27,6 +28,8 @@ public struct SpecValidationError: Error, CustomStringConvertible { switch self { case let .invalidXcodeGenVersion(minimumVersion, version): return "XcodeGen version is \(version), but minimum required version specified as \(minimumVersion)" + case let .invalidSDKDependency(target, dependency): + return "Target \(target.quoted) has invalid sdk dependency: \(dependency.quoted). It must be a full path or have the following extensions: .framework, .dylib, .tbd" case let .invalidTargetDependency(target, dependency): return "Target \(target.quoted) has invalid dependency: \(dependency.quoted)" case let .invalidTargetConfigFile(target, configFile, config): diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 653e345b..fd622929 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -14,6 +14,7 @@ public class PBXProjGenerator { var targetObjects: [String: PBXTarget] = [:] var targetAggregateObjects: [String: PBXAggregateTarget] = [:] var targetFileReferences: [String: PBXFileReference] = [:] + var sdkFileReferences: [String: PBXFileReference] = [:] var carthageFrameworksByPlatform: [String: Set] = [:] var frameworkFiles: [PBXFileElement] = [] @@ -522,6 +523,38 @@ public class PBXProjGenerator { let buildPath = Path(dependency.reference).parent().string.quoted frameworkBuildPaths.insert(buildPath) + case .sdk: + + var dependencyPath = Path(dependency.reference) + if !dependency.reference.contains("/") { + switch dependencyPath.extension ?? "" { + case "framework": + dependencyPath = Path("System/Library/Frameworks") + dependencyPath + case "tbd": + dependencyPath = Path("usr/lib") + dependencyPath + default: break + } + } + + let fileReference: PBXFileReference + if let existingFileReferences = sdkFileReferences[dependency.reference] { + fileReference = existingFileReferences + } else { + fileReference = addObject( + PBXFileReference(sourceTree: .sdkRoot, + name: dependencyPath.lastComponent, + lastKnownFileType: Xcode.fileType(path: dependencyPath), + path: dependencyPath.string) + ) + sdkFileReferences[dependency.reference] = fileReference + frameworkFiles.append(fileReference) + } + + let buildFile = addObject( + PBXBuildFile(file: fileReference, + settings: getDependencyFrameworkSettings(dependency: dependency)) + ) + targetFrameworkBuildFiles.append(buildFile) case .carthage: guard target.type != .staticLibrary else { break } @@ -943,6 +976,8 @@ public class PBXProjGenerator { // don't want a dependency if it's going to be embedded or statically linked in a non-top level target // in .target check we filter out targets that will embed all of their dependencies switch dependency.type { + case .sdk: + dependencies[dependency.reference] = dependency case .framework, .carthage: if isTopLevel || dependency.embed == nil { dependencies[dependency.reference] = dependency diff --git a/Tests/Fixtures/TestProject/App_iOS/ViewController.swift b/Tests/Fixtures/TestProject/App_iOS/ViewController.swift index 4cdc9940..9a273598 100644 --- a/Tests/Fixtures/TestProject/App_iOS/ViewController.swift +++ b/Tests/Fixtures/TestProject/App_iOS/ViewController.swift @@ -1,10 +1,11 @@ import UIKit +import Contacts class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view, typically from a nib. + _ = CNContact() } override func didReceiveMemoryWarning() { diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 2369e4ff..b853737a 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -45,6 +45,7 @@ BF_47A75C8A7EF15658238E254C846C5C6B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_30676EBEE9BE54AA26CAE69BE744CAE8 /* Main.storyboard */; }; BF_47FBEFEA08B9642C1F711EDA77FC8C89 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG_FE6D89DA2D7E7F58340D566590FF221C /* LocalizedStoryboard.storyboard */; }; BF_47FF83A37355E90F93C0F5B2CFBCE317 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_82E3C6C060C4487B5177509917C3FAE3 /* Standalone.swift */; }; + BF_486398284252AEE9001DD72E5E710D93 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_6A3D8067EBC18CB321826EB21FEBD094 /* libc++.tbd */; }; BF_4D56F3F4D081A77C11325B96DD34D8E1 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_4EBBAD70FA73DDC89BD933866B90DD08 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_A957DAE2193BE1E970F452BFEFF3EBF6 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF_51D370314B5DA8E002A908021E459F50 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_A55A35F549FD72775C37ED05342812AA /* Assets.xcassets */; }; @@ -70,6 +71,7 @@ BF_90F0E9253F2768C312B65530931CD55A /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_DBD29CA78CDBBEF69B2C39C6D23BBDA1 /* Empty.h */; }; BF_910C2D6055BD22643F042545CD21AA78 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_D0BE69522DB875ADB041E9135E0767CA /* StaticLibrary_ObjC.h */; }; BF_93A4E1A93C7DB4289E526466D547E55E /* SomeFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */; }; + BF_9743BCF98E3EF021AB384652DA126416 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_9A09F93850576AF57455BE58FD53C42F /* Contacts.framework */; }; BF_9830FFD35765AACD86D1B619E22830D6 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = FR_3DD4DE355C21662A9169EE41C44F73E3 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; }; BF_98DEE7FD578AA439550E0023A2ECE8D0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_25BDF725104C5E280D45CBF33F54C72C /* ViewController.swift */; }; BF_9A74AED05E2F61530BFA0F7D23AF0112 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = VG_EB676136B9F946373D4796800CC00AD4 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = "-Werror"; }; }; @@ -91,6 +93,7 @@ BF_CD062A97959629BD672893FDAE89A1E9 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_BB49B398F9291781A60DA963A0BF168C /* NotificationController.swift */; }; BF_D0676C98017B6FDD96A733CB851645DE /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = FR_C2A280C4FA602E6610BCFB820602B69E /* StaticLibrary_ObjC.m */; }; BF_D0D1D142403C75D11757CB7092E8D035 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_1FA381C639CE4923ED6845790A5DF9D2 /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF_D2532BE2FA7D664875AD6E29A22269C0 /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_9A09F93850576AF57455BE58FD53C42F /* Contacts.framework */; }; BF_D3D64E2595369BBDEF03E07543AE2779 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_261C31660333EF514356EFCBDB368EAB /* FrameworkFile.swift */; }; BF_D6588CD7B83034816FFD3A7DB10DAD78 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_16B791CFA2095097A17CC216977DF6EF /* Assets.xcassets */; }; BF_D7E271A6820E0A908736F44F99341DE1 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_EFD283107EDF836BF0D9F4EB3F9A0016 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -440,6 +443,7 @@ FR_640ADF15D2B92FDC35556B2E0934C21C /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; FR_654475F320EF1630562C841CA8B6938A /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FR_6643E0FE8DD9AAC71691A739070C6833 /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Model 3.xcdatamodel"; sourceTree = ""; }; + FR_6A3D8067EBC18CB321826EB21FEBD094 /* libc++.tbd */ = {isa = PBXFileReference; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; FR_752FB5DFFBC490CFB9742549A0C48527 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; FR_7532DD7B78451A5040048474AC4FBCCC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; FR_7C782E8FBF41DE8BB1E3789DF2C8C1F7 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = ""; }; @@ -451,6 +455,7 @@ FR_8B770F475242D91FC20289A3B35CD165 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; }; FR_96127F4D9D804B89024AB846F0961621 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; FR_98BB4C8D33EB0E666C136ACD08B21EB3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FR_9A09F93850576AF57455BE58FD53C42F /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; }; FR_9B4B00A3CDADD50167B2393562AEBAB2 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.module; path = module.modulemap; sourceTree = ""; }; FR_A0867B127ACF3ED382EB2FD5133D3EA8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; FR_A0DA89632C14F8DF99F15196E6EBB7D5 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -495,6 +500,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BF_D2532BE2FA7D664875AD6E29A22269C0 /* Contacts.framework in Frameworks */, BF_F8D73622DA7CFF30DB9AD17C08C63655 /* Framework2.framework in Frameworks */, BF_0378AD9857D61219363F74B2FA308B5A /* Framework.framework in Frameworks */, BF_B8E824A58BFE0B81E16BB26087FDC8B4 /* Result.framework in Frameworks */, @@ -515,9 +521,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BF_9743BCF98E3EF021AB384652DA126416 /* Contacts.framework in Frameworks */, BF_6E2D4086A22C12D516A06AE66DC48D16 /* Framework.framework in Frameworks */, BF_230439786C4C6849F488A5FADC6A42A5 /* Result.framework in Frameworks */, BF_36BCFE51A59D5EAE19684491C9F5427F /* StaticLibrary_ObjC.a in Frameworks */, + BF_486398284252AEE9001DD72E5E710D93 /* libc++.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -658,6 +666,8 @@ isa = PBXGroup; children = ( G_A1CE8BFBEAC6AFDC64D7068C3CE11421 /* Carthage */, + FR_9A09F93850576AF57455BE58FD53C42F /* Contacts.framework */, + FR_6A3D8067EBC18CB321826EB21FEBD094 /* libc++.tbd */, FR_2F56FD7A1F7782467AC9F315B6133468 /* SomeFramework.framework */, ); name = Frameworks; diff --git a/Tests/Fixtures/TestProject/project.yml b/Tests/Fixtures/TestProject/project.yml index 3b96d522..0f6111cc 100644 --- a/Tests/Fixtures/TestProject/project.yml +++ b/Tests/Fixtures/TestProject/project.yml @@ -43,6 +43,8 @@ targets: dependencies: - target: Framework_macOS - target: XPC Service + - sdk: Contacts.framework + - sdk: libc++.tbd App_iOS: type: application @@ -90,6 +92,7 @@ targets: - target: App_watchOS - target: iMessageApp - framework: Vendor/SomeFramework.framework + - sdk: Contacts.framework scheme: testTargets: - App_iOS_Tests diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index 21f0670f..7074d5f9 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -174,6 +174,20 @@ class ProjectSpecTests: XCTestCase { try expectValidationError(project, .invalidTargetSchemeConfigVariant(target: "target1", configVariant: "invalidVariant", configType: .debug)) } + $0.it("fails with invalid sdk dependency") { + var project = baseProject + project.targets = [Target( + name: "target1", + type: .application, + platform: .iOS, + dependencies: [Dependency(type: .sdk, reference: "invalidDependency")] + ) + ] + + try expectValidationError(project, .invalidSDKDependency(target: "target1", dependency: "invalidDependency")) + } + + $0.it("fails with invalid scheme") { var project = baseProject project.schemes = [Scheme( diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index 59eb720c..b19b77bc 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -147,12 +147,14 @@ class SpecLoadingTests: XCTestCase { ["target": "name", "embed": false], ["carthage": "name"], ["framework": "path", "weak": true], + ["sdk": "Contacts.framework"], ] let target = try Target(name: "test", jsonDictionary: targetDictionary) - try expect(target.dependencies.count) == 3 + try expect(target.dependencies.count) == 4 try expect(target.dependencies[0]) == Dependency(type: .target, reference: "name", embed: false) try expect(target.dependencies[1]) == Dependency(type: .carthage, reference: "name") try expect(target.dependencies[2]) == Dependency(type: .framework, reference: "path", weakLink: true) + try expect(target.dependencies[3]) == Dependency(type: .sdk, reference: "Contacts.framework") } $0.it("parses info plist") { From 4f531d344f6c06f4d779beac2797959e7eff590f Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 21:46:34 +1100 Subject: [PATCH 69/77] update readme example with new dependencies --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 43197d19..cea216b2 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,9 @@ targets: dependencies: - target: MyFramework - carthage: Alamofire + - framework: Vendor/MyFramework.framework + - sdk: Contacts.framework + - sdk: libc++.tbd MyFramework: type: framework platform: iOS From a449b363a0e9acb49f5a823c16952712d32a8255 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:18:45 +1100 Subject: [PATCH 70/77] fix weird case of Set not filtering hashValues properly occasionaly --- Tests/XcodeGenKitTests/GeneratorHelpers.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Tests/XcodeGenKitTests/GeneratorHelpers.swift b/Tests/XcodeGenKitTests/GeneratorHelpers.swift index 0f2181eb..a579686b 100644 --- a/Tests/XcodeGenKitTests/GeneratorHelpers.swift +++ b/Tests/XcodeGenKitTests/GeneratorHelpers.swift @@ -33,9 +33,12 @@ extension PBXProj { let mainGroup = try getMainGroup() func validateGroup(_ group: PBXGroup) throws { - let hasDuplicatedChildren = group.children.count != Set(group.children).count - if hasDuplicatedChildren { - throw failure("Group \"\(group.nameOrPath)\" has duplicated children:\n - \(group.children.map { String(describing: $0) }.joined(separator: "\n - "))") + + // check for duplicte children + let dictionary = Dictionary(grouping: group.children) { $0.hashValue } + let mostChildren = dictionary.sorted { $0.value.count > $1.value.count } + if let first = mostChildren.first, first.value.count > 1 { + throw failure("Group \"\(group.nameOrPath)\" has duplicated children:\n - \(group.children.map { $0.nameOrPath }.joined(separator: "\n - "))") } for child in group.children { if let group = child as? PBXGroup { From bf79421baacbbeb71e0f4bef900c08412acba689 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:22:07 +1100 Subject: [PATCH 71/77] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 577bfb6c..372c83d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ - Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen - Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb - Added `entitlements` to targets for generating an `.entitlement` file [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb -- Added `sdk` dependency type for linking system frameworks within the SDK [#430](https://github.com/yonaskolb/XcodeGen/pull/430) @yonaskolb +- Added `sdk` dependency type for linking system frameworks and libs [#430](https://github.com/yonaskolb/XcodeGen/pull/430) @yonaskolb - Added `parallelizable` and `randomExecutionOrder` to `Scheme` test targets in an expanded form [#434](https://github.com/yonaskolb/XcodeGen/pull/434) @yonaskolb - Validate incorrect config setting definitions [#431](https://github.com/yonaskolb/XcodeGen/pull/431) @yonaskolb - Automatically set project `SDKROOT` if there is only a single platform within the project [#433](https://github.com/yonaskolb/XcodeGen/pull/433) @yonaskolb From f30536a40fb1739b25256e08a17dba28da205397 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:26:28 +1100 Subject: [PATCH 72/77] fix emoji indentation --- Sources/XcodeGen/main.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index 4959642b..d0c2bf44 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -42,11 +42,11 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { try project.validateMinimumXcodeGenVersion(version) try project.validate() - logger.info("⚙️ Generating project...") + logger.info("⚙️ Generating project...") let projectGenerator = ProjectGenerator(project: project) let xcodeProject = try projectGenerator.generateXcodeProject() - logger.info("⚙️ Writing project...") + logger.info("⚙️ Writing project...") let fileWriter = FileWriter(project: project) projectPath = projectPath + "\(project.name).xcodeproj" try fileWriter.writeXcodeProject(xcodeProject, to: projectPath) From 1631236b7aeb63c437c92f79fafdf22b516df1bd Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:30:34 +1100 Subject: [PATCH 73/77] format_code --- Sources/ProjectSpec/Plist.swift | 4 +-- Sources/ProjectSpec/Scheme.swift | 2 +- Sources/ProjectSpec/SpecValidation.swift | 9 +++-- Sources/ProjectSpec/Target.swift | 2 +- Sources/ProjectSpec/TargetScheme.swift | 2 +- Sources/XcodeGenKit/FileWriter.swift | 2 +- Sources/XcodeGenKit/InfoPlistGenerator.swift | 4 +-- Sources/XcodeGenKit/PBXProjGenerator.swift | 18 ++++++---- Sources/XcodeGenKit/SchemeGenerator.swift | 16 +++++---- Sources/XcodeGenKit/XCProjExtensions.swift | 2 +- .../TestProject/App_iOS/ViewController.swift | 2 +- .../TestProject/App_macOS/AppDelegate.swift | 12 ------- .../App_macOS/ViewController.swift | 12 +------ .../InterfaceController.swift | 2 +- Tests/PerformanceTests/PerformanceTests.swift | 16 ++++----- Tests/PerformanceTests/TestProject.swift | 26 +++++++------- .../ProjectGeneratorTests.swift | 14 ++++---- Tests/XcodeGenKitTests/ProjectSpecTests.swift | 18 +++++----- .../SchemeGeneratorTests.swift | 14 ++++---- Tests/XcodeGenKitTests/SpecLoadingTests.swift | 34 +++++++++++-------- 20 files changed, 98 insertions(+), 113 deletions(-) diff --git a/Sources/ProjectSpec/Plist.swift b/Sources/ProjectSpec/Plist.swift index 90904c4f..5b2a502a 100644 --- a/Sources/ProjectSpec/Plist.swift +++ b/Sources/ProjectSpec/Plist.swift @@ -8,12 +8,12 @@ public struct Plist: Equatable { public init(path: String, attributes: [String: Any] = [:]) { self.path = path - self.properties = attributes + properties = attributes } public static func == (lhs: Plist, rhs: Plist) -> Bool { return lhs.path == rhs.path && - NSDictionary(dictionary: lhs.properties).isEqual(to: rhs.properties) + NSDictionary(dictionary: lhs.properties).isEqual(to: rhs.properties) } } diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift index 278aa979..907ccffd 100644 --- a/Sources/ProjectSpec/Scheme.swift +++ b/Sources/ProjectSpec/Scheme.swift @@ -103,7 +103,7 @@ public struct Scheme: Equatable { name: String, randomExecutionOrder: Bool = false, parallelizable: Bool = false - ) { + ) { self.name = name self.randomExecutionOrder = randomExecutionOrder self.parallelizable = parallelizable diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index b45e7e4a..bbecdfba 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -147,16 +147,15 @@ extension Project { let path = Path(dependency.reference) if !dependency.reference.contains("/") { switch path.extension { - case "framework"?, - "tbd"?: + case "framework"?, + "tbd"?: break - default: - errors.append(.invalidSDKDependency(target: target.name, dependency: dependency.reference)) + default: + errors.append(.invalidSDKDependency(target: target.name, dependency: dependency.reference)) } } default: break } - } for source in target.sources { diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index 6af01e28..928ee79f 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -242,7 +242,7 @@ extension Target: NamedJSONDictionaryConvertible { public init(name: String, jsonDictionary: JSONDictionary) throws { let resolvedName: String = jsonDictionary.json(atKeyPath: "name") ?? name self.name = resolvedName - self.productName = jsonDictionary.json(atKeyPath: "productName") ?? resolvedName + productName = jsonDictionary.json(atKeyPath: "productName") ?? resolvedName let typeString: String = try jsonDictionary.json(atKeyPath: "type") if let type = PBXProductType(string: typeString) { self.type = type diff --git a/Sources/ProjectSpec/TargetScheme.swift b/Sources/ProjectSpec/TargetScheme.swift index 69f7bc48..22b018e9 100644 --- a/Sources/ProjectSpec/TargetScheme.swift +++ b/Sources/ProjectSpec/TargetScheme.swift @@ -34,7 +34,7 @@ extension TargetScheme: JSONObjectConvertible { public init(jsonDictionary: JSONDictionary) throws { if let targets = jsonDictionary["testTargets"] as? [Any] { - self.testTargets = try targets.compactMap { target in + testTargets = try targets.compactMap { target in if let string = target as? String { return .init(name: string) } else if let dictionary = target as? JSONDictionary { diff --git a/Sources/XcodeGenKit/FileWriter.swift b/Sources/XcodeGenKit/FileWriter.swift index 1834b4c3..82cafa7f 100644 --- a/Sources/XcodeGenKit/FileWriter.swift +++ b/Sources/XcodeGenKit/FileWriter.swift @@ -1,7 +1,7 @@ import Foundation +import PathKit import ProjectSpec import xcodeproj -import PathKit public class FileWriter { diff --git a/Sources/XcodeGenKit/InfoPlistGenerator.swift b/Sources/XcodeGenKit/InfoPlistGenerator.swift index 0c4536cc..dda9de18 100644 --- a/Sources/XcodeGenKit/InfoPlistGenerator.swift +++ b/Sources/XcodeGenKit/InfoPlistGenerator.swift @@ -1,6 +1,6 @@ import Foundation -import ProjectSpec import PathKit +import ProjectSpec public class InfoPlistGenerator { @@ -8,7 +8,7 @@ public class InfoPlistGenerator { Default info plist attributes taken from: /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_DefinitionsInfoPlist.xctemplate/TemplateInfo.plist */ - var defaultInfoPlist: [String: Any] = { + var defaultInfoPlist: [String: Any] = { var dictionary: [String: Any] = [:] dictionary["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)" dictionary["CFBundleInfoDictionaryVersion"] = "6.0" diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index fd622929..6d8b4048 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -541,18 +541,22 @@ public class PBXProjGenerator { fileReference = existingFileReferences } else { fileReference = addObject( - PBXFileReference(sourceTree: .sdkRoot, - name: dependencyPath.lastComponent, - lastKnownFileType: Xcode.fileType(path: dependencyPath), - path: dependencyPath.string) + PBXFileReference( + sourceTree: .sdkRoot, + name: dependencyPath.lastComponent, + lastKnownFileType: Xcode.fileType(path: dependencyPath), + path: dependencyPath.string + ) ) sdkFileReferences[dependency.reference] = fileReference frameworkFiles.append(fileReference) } let buildFile = addObject( - PBXBuildFile(file: fileReference, - settings: getDependencyFrameworkSettings(dependency: dependency)) + PBXBuildFile( + file: fileReference, + settings: getDependencyFrameworkSettings(dependency: dependency) + ) ) targetFrameworkBuildFiles.append(buildFile) @@ -634,7 +638,7 @@ public class PBXProjGenerator { let headersBuildPhaseFiles = getBuildFilesForPhase(.headers) if !headersBuildPhaseFiles.isEmpty { - if (target.type == .framework || target.type == .dynamicLibrary) { + if target.type == .framework || target.type == .dynamicLibrary { let headersBuildPhase = addObject(PBXHeadersBuildPhase(files: headersBuildPhaseFiles)) buildPhases.append(headersBuildPhase) } else { diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift index c868cb5a..fb1b021d 100644 --- a/Sources/XcodeGenKit/SchemeGenerator.swift +++ b/Sources/XcodeGenKit/SchemeGenerator.swift @@ -1,6 +1,6 @@ +import Foundation import ProjectSpec import xcodeproj -import Foundation public class SchemeGenerator { @@ -83,8 +83,8 @@ public class SchemeGenerator { guard let buildableName = project.getTarget(buildTarget.target)?.filename ?? - project.getAggregateTarget(buildTarget.target)?.name else { - fatalError("Unable to determinate \"buildableName\" for build target: \(buildTarget.target)") + project.getAggregateTarget(buildTarget.target)?.name else { + fatalError("Unable to determinate \"buildableName\" for build target: \(buildTarget.target)") } let buildableReference = XCScheme.BuildableReference( referencedContainer: "container:\(project.name).xcodeproj", @@ -129,10 +129,12 @@ public class SchemeGenerator { ) let testables = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuilEntries in - XCScheme.TestableReference(skipped: false, - parallelizable: testTarget.parallelizable, - randomExecutionOrdering: testTarget.randomExecutionOrder, - buildableReference: testBuilEntries.buildableReference) + XCScheme.TestableReference( + skipped: false, + parallelizable: testTarget.parallelizable, + randomExecutionOrdering: testTarget.randomExecutionOrder, + buildableReference: testBuilEntries.buildableReference + ) } let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) } diff --git a/Sources/XcodeGenKit/XCProjExtensions.swift b/Sources/XcodeGenKit/XCProjExtensions.swift index df439084..4aee97aa 100644 --- a/Sources/XcodeGenKit/XCProjExtensions.swift +++ b/Sources/XcodeGenKit/XCProjExtensions.swift @@ -1,6 +1,6 @@ import Foundation -import xcodeproj import PathKit +import xcodeproj extension PBXFileElement { diff --git a/Tests/Fixtures/TestProject/App_iOS/ViewController.swift b/Tests/Fixtures/TestProject/App_iOS/ViewController.swift index 9a273598..a44b02a4 100644 --- a/Tests/Fixtures/TestProject/App_iOS/ViewController.swift +++ b/Tests/Fixtures/TestProject/App_iOS/ViewController.swift @@ -1,5 +1,5 @@ -import UIKit import Contacts +import UIKit class ViewController: UIViewController { diff --git a/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift b/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift index c4068e8a..1e3be7aa 100644 --- a/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift +++ b/Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift @@ -1,17 +1,8 @@ -// -// AppDelegate.swift -// dfg -// -// Created by Yonas Kolb on 29/9/18. -// - import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { - - func applicationDidFinishLaunching(_ aNotification: Notification) { // Insert code here to initialize your application } @@ -19,7 +10,4 @@ class AppDelegate: NSObject, NSApplicationDelegate { func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } - - } - diff --git a/Tests/Fixtures/TestProject/App_macOS/ViewController.swift b/Tests/Fixtures/TestProject/App_macOS/ViewController.swift index bb6301bf..ec0eea30 100644 --- a/Tests/Fixtures/TestProject/App_macOS/ViewController.swift +++ b/Tests/Fixtures/TestProject/App_macOS/ViewController.swift @@ -1,10 +1,3 @@ -// -// ViewController.swift -// dfg -// -// Created by Yonas Kolb on 29/9/18. -// - import Cocoa class ViewController: NSViewController { @@ -17,10 +10,7 @@ class ViewController: NSViewController { override var representedObject: Any? { didSet { - // Update the view, if already loaded. + // Update the view, if already loaded. } } - - } - diff --git a/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift b/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift index 73cc697f..2a6519b8 100644 --- a/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift +++ b/Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift @@ -1,5 +1,5 @@ -import Result import Foundation +import Result import WatchKit class InterfaceController: WKInterfaceController { diff --git a/Tests/PerformanceTests/PerformanceTests.swift b/Tests/PerformanceTests/PerformanceTests.swift index b1e89a7e..8fff4947 100644 --- a/Tests/PerformanceTests/PerformanceTests.swift +++ b/Tests/PerformanceTests/PerformanceTests.swift @@ -1,9 +1,9 @@ +import Foundation +import PathKit +import ProjectSpec import XcodeGenKit import xcodeproj -import Foundation import XCTest -import ProjectSpec -import PathKit class GeneratedPerformanceTests: XCTestCase { @@ -11,7 +11,7 @@ class GeneratedPerformanceTests: XCTestCase { func testGeneration() throws { let project = try Project.testProject(basePath: basePath) - self.measure { + measure { let generator = ProjectGenerator(project: project) _ = try! generator.generateXcodeProject() } @@ -21,7 +21,7 @@ class GeneratedPerformanceTests: XCTestCase { let project = try Project.testProject(basePath: basePath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() - self.measure { + measure { xcodeProject.pbxproj.invalidateUUIDs() try! xcodeProject.write(path: project.defaultProjectPath) } @@ -35,14 +35,14 @@ class FixturePerformanceTests: XCTestCase { let specPath = fixturePath + "TestProject/project.yml" func testFixtureDecoding() throws { - self.measure { + measure { _ = try! Project(path: specPath) } } func testFixtureGeneration() throws { let project = try Project(path: specPath) - self.measure { + measure { let generator = ProjectGenerator(project: project) _ = try! generator.generateXcodeProject() } @@ -52,7 +52,7 @@ class FixturePerformanceTests: XCTestCase { let project = try Project(path: specPath) let generator = ProjectGenerator(project: project) let xcodeProject = try generator.generateXcodeProject() - self.measure { + measure { xcodeProject.pbxproj.invalidateUUIDs() try! xcodeProject.write(path: project.defaultProjectPath) } diff --git a/Tests/PerformanceTests/TestProject.swift b/Tests/PerformanceTests/TestProject.swift index defb3d22..21c24fb5 100644 --- a/Tests/PerformanceTests/TestProject.swift +++ b/Tests/PerformanceTests/TestProject.swift @@ -1,6 +1,6 @@ import Foundation -import ProjectSpec import PathKit +import ProjectSpec import xcodeproj extension Project { @@ -20,11 +20,11 @@ extension Project { gatherCoverageData: true, commandLineArguments: [ "--command": true, - "--command2": false + "--command2": false, ], environmentVariables: [ XCScheme.EnvironmentVariable(variable: "ENV", value: "HELLO", enabled: true), - XCScheme.EnvironmentVariable(variable: "ENV2", value: "HELLO", enabled: false) + XCScheme.EnvironmentVariable(variable: "ENV2", value: "HELLO", enabled: false), ], preActions: [Scheme.ExecutionAction(name: "run", script: "script")], postActions: [Scheme.ExecutionAction(name: "run", script: "script")] @@ -40,7 +40,7 @@ extension Project { Dependency(type: .target, reference: "Framework2_\(platform)"), Dependency(type: .carthage, reference: "Alamofire"), Dependency(type: .carthage, reference: "BrightFutures"), - ], + ], scheme: scheme ) targets.append(appTarget) @@ -57,7 +57,7 @@ extension Project { Dependency(type: .target, reference: "App_\(platform)"), Dependency(type: .target, reference: "Framework_\(platform)"), Dependency(type: .target, reference: "Framework2_\(platform)"), - ], + ], scheme: scheme ) targets.append(testTarget) @@ -71,10 +71,10 @@ extension Project { platform: platform, sources: [ TargetSource(path: "Framework_\(platform)"), - ], + ], dependencies: [ Dependency(type: .carthage, reference: "Alamofire"), - ], + ], scheme: scheme ) targets.append(frameworkTarget) @@ -91,7 +91,7 @@ extension Project { Dependency(type: .target, reference: "Framework_\(platform)"), Dependency(type: .carthage, reference: "Alamofire"), Dependency(type: .carthage, reference: "BrightFutures"), - ], + ], scheme: scheme ) targets.append(frameworkTarget2) @@ -115,7 +115,7 @@ extension Project { Config(name: "Release Staging", type: .release), Config(name: "Debug Production", type: .debug), Config(name: "Release Production", type: .release), - ], + ], targets: targets, aggregateTargets: [], settings: [:], @@ -140,19 +140,19 @@ extension Project { try path.mkpath() paths.append(path) - for swiftFile in 1...swiftFilesPerDirectory { + for swiftFile in 1 ... swiftFilesPerDirectory { let file = path + "file_\(swiftFile).swift" try file.write("") paths.append(file) } - for resourceFile in 1...resourcesPerDirectory { + for resourceFile in 1 ... resourcesPerDirectory { let file = path + "file_\(resourceFile).png" try file.write("") paths.append(file) } - for objFile in 1...objFilesPerDirectory { + for objFile in 1 ... objFilesPerDirectory { let header = path + "file_\(objFile).h" try header.write("") paths.append(header) @@ -163,7 +163,7 @@ extension Project { } if depth < levels - 1 { - for directory in 1...directoriesPerLevel { + for directory in 1 ... directoriesPerLevel { try createDirectory(path + "directory_\(directory)", depth: depth + 1) } } diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index 41551b55..58986ac9 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -22,9 +22,9 @@ fileprivate let framework = Target( ) fileprivate let optionalFramework = Target( - name: "MyOptionalFramework", - type: .framework, - platform: .iOS + name: "MyOptionalFramework", + type: .framework, + platform: .iOS ) fileprivate let uiTest = Target( @@ -197,7 +197,7 @@ class ProjectGeneratorTests: XCTestCase { targets: [ Target(name: "1", type: .application, platform: .iOS), Target(name: "2", type: .framework, platform: .iOS), - ] + ] ) var buildSettings = project.getProjectBuildSettings(config: project.configs.first!) try expect(buildSettings["SDKROOT"] as? String) == "iphoneos" @@ -828,7 +828,7 @@ class ProjectGeneratorTests: XCTestCase { platform: .iOS, dependencies: [ Dependency(type: .target, reference: "MyFramework"), - Dependency(type: .target, reference: "MyOptionalFramework", weakLink: true) + Dependency(type: .target, reference: "MyOptionalFramework", weakLink: true), ] ) @@ -858,7 +858,7 @@ class ProjectGeneratorTests: XCTestCase { try writer.writePlists() guard let targetConfig = pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first else { - throw failure("Couldn't find Target config") + throw failure("Couldn't find Target config") } try expect(targetConfig.buildSettings["INFOPLIST_FILE"] as? String) == plist.path @@ -877,7 +877,7 @@ class ProjectGeneratorTests: XCTestCase { expectedInfoPlist["CFBundlePackageType"] = "APPL" expectedInfoPlist["UISupportedInterfaceOrientations"] = ["UIInterfaceOrientationPortrait", "UIInterfaceOrientationLandscapeLeft"] - try expect(NSDictionary.init(dictionary: expectedInfoPlist).isEqual(to: infoPlist)).beTrue() + try expect(NSDictionary(dictionary: expectedInfoPlist).isEqual(to: infoPlist)).beTrue() } } } diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index 7074d5f9..b70e588c 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -176,18 +176,18 @@ class ProjectSpecTests: XCTestCase { $0.it("fails with invalid sdk dependency") { var project = baseProject - project.targets = [Target( - name: "target1", - type: .application, - platform: .iOS, - dependencies: [Dependency(type: .sdk, reference: "invalidDependency")] - ) - ] + project.targets = [ + Target( + name: "target1", + type: .application, + platform: .iOS, + dependencies: [Dependency(type: .sdk, reference: "invalidDependency")] + ), + ] - try expectValidationError(project, .invalidSDKDependency(target: "target1", dependency: "invalidDependency")) + try expectValidationError(project, .invalidSDKDependency(target: "target1", dependency: "invalidDependency")) } - $0.it("fails with invalid scheme") { var project = baseProject project.schemes = [Scheme( diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift index 05c4fae6..b617a5e0 100644 --- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift @@ -34,8 +34,6 @@ fileprivate let uiTest = Target( class SchemeGeneratorTests: XCTestCase { - - func testSchemes() { describe { @@ -55,7 +53,7 @@ class SchemeGeneratorTests: XCTestCase { let xcodeProject = try project.generateXcodeProject() guard let target = xcodeProject.pbxproj.nativeTargets .first(where: { $0.name == app.name }) else { - throw failure("Target not found") + throw failure("Target not found") } guard let xcscheme = xcodeProject.sharedData?.schemes.first else { throw failure("Scheme not found") @@ -77,7 +75,7 @@ class SchemeGeneratorTests: XCTestCase { xcscheme.launchAction?.buildableProductRunnable?.buildableReference, xcscheme.profileAction?.buildableProductRunnable?.buildableReference, xcscheme.testAction?.macroExpansion, - ].compactMap { $0 } + ].compactMap { $0 } for buildableReference in buildableReferences { // FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference @@ -96,7 +94,7 @@ class SchemeGeneratorTests: XCTestCase { let runVariables: [XCScheme.EnvironmentVariable] = [ XCScheme.EnvironmentVariable(variable: "RUN_ENV", value: "ENABLED", enabled: true), XCScheme.EnvironmentVariable(variable: "OTHER_RUN_ENV", value: "DISABLED", enabled: false), - ] + ] let scheme = Scheme( name: "EnvironmentVariablesScheme", @@ -120,7 +118,7 @@ class SchemeGeneratorTests: XCTestCase { try expect( xcodeProject.pbxproj.nativeTargets .contains(where: { $0.name == app.name }) - ).beTrue() + ).beTrue() try expect(xcscheme.launchAction?.environmentVariables) == runVariables try expect(xcscheme.testAction?.environmentVariables).to.beNil() try expect(xcscheme.profileAction?.environmentVariables).to.beNil() @@ -135,7 +133,7 @@ class SchemeGeneratorTests: XCTestCase { Config(name: "Production Debug", type: .debug), Config(name: "Test Release", type: .release), Config(name: "Production Release", type: .release), - ] + ] let project = Project(basePath: "", name: "test", configs: configs, targets: [target, framework]) let xcodeProject = try project.generateXcodeProject() @@ -144,7 +142,7 @@ class SchemeGeneratorTests: XCTestCase { guard let xcscheme = xcodeProject.sharedData?.schemes .first(where: { $0.name == "\(target.name) Test" }) else { - throw failure("Scheme not found") + throw failure("Scheme not found") } guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { throw failure("Build Action entry not found") diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift index b19b77bc..b2edfc9e 100644 --- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift +++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift @@ -163,15 +163,15 @@ class SpecLoadingTests: XCTestCase { "path": "Info.plist", "properties": [ "CFBundleName": "MyAppName", - "UIBackgroundModes": ["fetch"] - ] + "UIBackgroundModes": ["fetch"], + ], ] let target = try Target(name: "", jsonDictionary: targetDictionary) try expect(target.info) == Plist(path: "Info.plist", attributes: [ "CFBundleName": "MyAppName", - "UIBackgroundModes": ["fetch"] - ]) + "UIBackgroundModes": ["fetch"], + ]) } $0.it("parses entitlement plist") { @@ -180,13 +180,13 @@ class SpecLoadingTests: XCTestCase { "path": "app.entitlements", "properties": [ "com.apple.security.application-groups": "com.group", - ] + ], ] let target = try Target(name: "", jsonDictionary: targetDictionary) try expect(target.entitlements) == Plist(path: "app.entitlements", attributes: [ "com.apple.security.application-groups": "com.group", - ]) + ]) } $0.it("parses cross platform targets") { @@ -325,7 +325,7 @@ class SpecLoadingTests: XCTestCase { ], ], "gatherCoverageData": true, - ] + ], ] let scheme = try Scheme(name: "Scheme", jsonDictionary: schemeDictionary) let expectedTargets: [Scheme.BuildTarget] = [ @@ -345,14 +345,18 @@ class SpecLoadingTests: XCTestCase { try expect(scheme.build.parallelizeBuild) == false try expect(scheme.build.buildImplicitDependencies) == false - let expectedTest = Scheme.Test(config: "debug", - gatherCoverageData: true, - targets: [ - "Target1", - Scheme.Test.TestTarget(name: "Target2", - randomExecutionOrder: true, - parallelizable: true) - ]) + let expectedTest = Scheme.Test( + config: "debug", + gatherCoverageData: true, + targets: [ + "Target1", + Scheme.Test.TestTarget( + name: "Target2", + randomExecutionOrder: true, + parallelizable: true + ), + ] + ) try expect(scheme.test) == expectedTest } From 58c400a479fd7831b3f622641cca10cfecdea835 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:30:40 +1100 Subject: [PATCH 74/77] Update to 2.0.0 --- Makefile | 2 +- Sources/XcodeGen/main.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 931c6b90..f98091cf 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ TOOL_NAME = XcodeGen export EXECUTABLE_NAME = xcodegen -VERSION = 1.11.2 +VERSION = 2.0.0 PREFIX = /usr/local INSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME) diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift index d0c2bf44..d914b3fd 100644 --- a/Sources/XcodeGen/main.swift +++ b/Sources/XcodeGen/main.swift @@ -6,7 +6,7 @@ import ProjectSpec import XcodeGenKit import xcodeproj -let version = try Version("1.11.2") +let version = try Version("2.0.0") func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) { if justVersion { From a7704974fbfd4382e2a1d7bfa0d7dbfcd1d7b75e Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:31:37 +1100 Subject: [PATCH 75/77] update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 372c83d5..58db95e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Master +## 2.0.0 + #### Added - Added `weak` linking setting for dependencies [#411](https://github.com/yonaskolb/XcodeGen/pull/411) @alvarhansen - Added `info` to targets for generating an `Info.plist` [#415](https://github.com/yonaskolb/XcodeGen/pull/415) @yonaskolb @@ -24,6 +26,8 @@ - Fixed `TargetSource.headerVisibility` not being set in initializer [#419](https://github.com/yonaskolb/XcodeGen/pull/419) @jerrymarino - Fixed crash when using Xcode Legacy targets as dependencies [#427](https://github.com/yonaskolb/XcodeGen/pull/427) @dflems +[Commits](https://github.com/yonaskolb/XcodeGen/compare/1.11.2...2.0.0) + ## 1.11.2 If XcodeGen is compiled with Swift 4.2, then UUID's in the generated project will not be deterministic. This will be fixed in an upcoming release with an update to xcodeproj 6.0 From 846bae8b9ff45bbf1ac527a95ca1cf890748ba9c Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 4 Nov 2018 22:55:57 +1100 Subject: [PATCH 76/77] update docs --- Docs/Usage.md | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Docs/Usage.md b/Docs/Usage.md index d87630bb..e2089c03 100644 --- a/Docs/Usage.md +++ b/Docs/Usage.md @@ -7,6 +7,7 @@ - [Use dependencies](#use-dependencies) - [Cocoapods](#cocoapods) - [Carthage](#carthage) + - [SDK](#sdk) # Configuring build settings There are various ways of configuring build settings @@ -92,7 +93,7 @@ DEVELOPMENT_TEAM=XXXXXXXXX xcodebuild ... # Use dependencies -Each target can declare one or more dependencies. See [Dependency](#dependency) for more info +Each target can declare one or more dependencies. See [Dependency](ProjectSpec.md#dependency) in the ProjectSpec for more info about all the properties ### Cocoapods Use your `podfile` as normal. The pods themselves don't need to be referenced in the project spec. After you generate your project simply run `pod install` which will integrate with your project and create a workspace. @@ -100,7 +101,7 @@ Use your `podfile` as normal. The pods themselves don't need to be referenced in ### Carthage XcodeGen makes integrating Carthage dependencies super easy! -You simply reference them in each target that requires them and XcodeGen does the rest by automatically linking and embedding the carthage frameworks where neccessary. +You simply reference them in each target that requires them and XcodeGen does the rest by automatically linking and embedding the carthage frameworks where necessary. ```yaml targets: @@ -111,4 +112,29 @@ targets: Framework: dependencies: - carthage: Alamofire -``` \ No newline at end of file +``` + +XcodeGen automatically creates the build phase that Carthage requires which lists all the files and runs `carthage copy-frameworks`. You can change the invocation of carthage to something different, for example if you are running it with [Mint](https://github.com/yonaskolb/mint). This is then prepended to ` copy frameworks` + +```yaml +options: + carthageExecutablePath: mint run Carthage/Carthage carthage +``` + +By default XcodeGen looks for carthage frameworks in `Carthage/Build`. You can change this with the `carthageBuildPath` option + +```yaml +options: + carthageBuildPath: ../../Carthage/Build +``` + +### SDK +System frameworks and libs can be linked by using the `sdk` dependency type. You can either specify frameworks or libs by using a `.framework` or `.tbd` filename, respectively + +```yaml +targets: + App: + dependencies: + - sdk: Contacts.framework + - sdk: libc++.tbd +``` From f5423f1ce3571c4aeb117f7fd6e3cc1fb9231f96 Mon Sep 17 00:00:00 2001 From: Alvar Hansen Date: Mon, 5 Nov 2018 12:13:23 +0200 Subject: [PATCH 77/77] Changes XPC Service package type to XPC! Includes app extension as XPC type. --- CHANGELOG.md | 3 +++ Sources/XcodeGenKit/InfoPlistGenerator.swift | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58db95e6..d142abb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## Master +#### Fixed +- Fixed XPC Service package type [#435](https://github.com/yonaskolb/XcodeGen/pull/435) @alvarhansen + ## 2.0.0 #### Added diff --git a/Sources/XcodeGenKit/InfoPlistGenerator.swift b/Sources/XcodeGenKit/InfoPlistGenerator.swift index dda9de18..f4850a18 100644 --- a/Sources/XcodeGenKit/InfoPlistGenerator.swift +++ b/Sources/XcodeGenKit/InfoPlistGenerator.swift @@ -33,8 +33,9 @@ public class InfoPlistGenerator { targetInfoPlist["CFBundlePackageType"] = "FMWK" case .bundle: targetInfoPlist["CFBundlePackageType"] = "BNDL" - case .xpcService: - targetInfoPlist["CFBundlePackageType"] = "XPC" + case .xpcService, + .appExtension: + targetInfoPlist["CFBundlePackageType"] = "XPC!" default: break } return targetInfoPlist