From c55b5b8daac086a096a06679c309e7a8fd2c8bb1 Mon Sep 17 00:00:00 2001 From: Arham Wani Date: Sat, 22 Aug 2026 19:15:24 +0530 Subject: [PATCH 1/7] Add scheme architecture override tests --- .../SchemeGeneratorTests.swift | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift index d876b3f8..2d18a3e9 100644 --- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift @@ -125,6 +125,28 @@ class SchemeGeneratorTests: XCTestCase { try expect(xcscheme.testAction?.testables[1].locationScenarioReference?.identifier) == "New York, NY, USA" } + $0.it("generates scheme build architecture overrides") { + let architectureOptions: [(String, XCScheme.BuildAction.Architectures)] = [ + ("matchRunDestination", .matchRunDestination), + ("universal", .universal), + ("useTargetSettings", .useTargetSettings), + ] + + for (option, expected) in architectureOptions { + let scheme = try Scheme(name: "MyScheme", jsonDictionary: [ + "build": [ + "targets": [app.name: "all"], + "buildArchitectures": option, + ], + ]) + let project = Project(name: "test", targets: [app, framework], schemes: [scheme]) + let xcodeProject = try project.generateXcodeProject() + let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first) + + try expect(xcscheme.buildAction?.buildArchitectures) == expected + } + } + let frameworkTarget = Scheme.BuildTarget(target: .local(framework.name), buildTypes: [.archiving]) $0.it("generates a scheme with the first runnable selected") { let scheme = Scheme( From 97cd73722d5ca9f71a1216d7c21633f8c0fd798d Mon Sep 17 00:00:00 2001 From: Arham Wani Date: Sat, 22 Aug 2026 19:17:01 +0530 Subject: [PATCH 2/7] Add scheme build architecture overrides --- Sources/ProjectSpec/Scheme.swift | 35 ++++++++++++++++++++++- Sources/XcodeGenKit/SchemeGenerator.swift | 3 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift index a19951fe..8120c2b7 100644 --- a/Sources/ProjectSpec/Scheme.swift +++ b/Sources/ProjectSpec/Scheme.swift @@ -4,6 +4,7 @@ import PathKit import XcodeProj public typealias BuildType = XCScheme.BuildAction.Entry.BuildFor +public typealias BuildArchitectures = XCScheme.BuildAction.Architectures public struct Scheme: Equatable { @@ -101,6 +102,7 @@ public struct Scheme: Equatable { public static let parallelizeBuildDefault = true public static let buildImplicitDependenciesDefault = true public static let runPostActionsOnFailureDefault = false + public static let buildArchitecturesDefault = BuildArchitectures.useTargetSettings public var targets: [BuildTarget] public var parallelizeBuild: Bool @@ -108,6 +110,7 @@ public struct Scheme: Equatable { public var preActions: [ExecutionAction] public var postActions: [ExecutionAction] public var runPostActionsOnFailure: Bool + public var buildArchitectures: BuildArchitectures public init( targets: [BuildTarget], @@ -115,7 +118,8 @@ public struct Scheme: Equatable { buildImplicitDependencies: Bool = buildImplicitDependenciesDefault, preActions: [ExecutionAction] = [], postActions: [ExecutionAction] = [], - runPostActionsOnFailure: Bool = false + runPostActionsOnFailure: Bool = runPostActionsOnFailureDefault, + buildArchitectures: BuildArchitectures = buildArchitecturesDefault ) { self.targets = targets self.parallelizeBuild = parallelizeBuild @@ -123,6 +127,7 @@ public struct Scheme: Equatable { self.preActions = preActions self.postActions = postActions self.runPostActionsOnFailure = runPostActionsOnFailure + self.buildArchitectures = buildArchitectures } } @@ -946,6 +951,7 @@ extension Scheme.Build: JSONObjectConvertible { parallelizeBuild = jsonDictionary.json(atKeyPath: "parallelizeBuild") ?? Scheme.Build.parallelizeBuildDefault buildImplicitDependencies = jsonDictionary.json(atKeyPath: "buildImplicitDependencies") ?? Scheme.Build.buildImplicitDependenciesDefault runPostActionsOnFailure = jsonDictionary.json(atKeyPath: "runPostActionsOnFailure") ?? Scheme.Build.runPostActionsOnFailureDefault + buildArchitectures = jsonDictionary.json(atKeyPath: "buildArchitectures") ?? Scheme.Build.buildArchitecturesDefault } } @@ -968,6 +974,9 @@ extension Scheme.Build: JSONEncodable { if runPostActionsOnFailure != Scheme.Build.runPostActionsOnFailureDefault { dict["runPostActionsOnFailure"] = runPostActionsOnFailure } + if buildArchitectures != Scheme.Build.buildArchitecturesDefault { + dict["buildArchitectures"] = buildArchitectures.toJSONValue() + } return dict } @@ -1005,6 +1014,30 @@ extension BuildType: JSONEncodable { } } +extension BuildArchitectures: JSONUtilities.JSONPrimitiveConvertible { + + public typealias JSONType = String + + public static func from(jsonValue: String) -> BuildArchitectures? { + switch jsonValue { + case "matchRunDestination": return .matchRunDestination + case "universal": return .universal + case "useTargetSettings": return .useTargetSettings + default: return nil + } + } +} + +extension BuildArchitectures: JSONEncodable { + public func toJSONValue() -> Any { + switch self { + case .matchRunDestination: return "matchRunDestination" + case .universal: return "universal" + case .useTargetSettings: return "useTargetSettings" + } + } +} + extension XCScheme.EnvironmentVariable: JSONUtilities.JSONObjectConvertible { public static let enabledDefault = true diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift index bb5205c2..38a1be65 100644 --- a/Sources/XcodeGenKit/SchemeGenerator.swift +++ b/Sources/XcodeGenKit/SchemeGenerator.swift @@ -239,7 +239,8 @@ public class SchemeGenerator { postActions: scheme.build.postActions.map(getExecutionAction), parallelizeBuild: scheme.build.parallelizeBuild, buildImplicitDependencies: scheme.build.buildImplicitDependencies, - runPostActionsOnFailure: scheme.build.runPostActionsOnFailure + runPostActionsOnFailure: scheme.build.runPostActionsOnFailure, + buildArchitectures: scheme.build.buildArchitectures ) let testables: [XCScheme.TestableReference] = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuildEntries in From 33f3ae21e4e99da4f5ccffd2dcf1194e0c36220a Mon Sep 17 00:00:00 2001 From: Arham Wani Date: Sat, 22 Aug 2026 19:17:49 +0530 Subject: [PATCH 3/7] Test scheme architecture JSON encoding --- Tests/ProjectSpecTests/SpecLoadingTests.swift | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Tests/ProjectSpecTests/SpecLoadingTests.swift b/Tests/ProjectSpecTests/SpecLoadingTests.swift index 54875e75..58421f90 100644 --- a/Tests/ProjectSpecTests/SpecLoadingTests.swift +++ b/Tests/ProjectSpecTests/SpecLoadingTests.swift @@ -1026,6 +1026,7 @@ class SpecLoadingTests: XCTestCase { "parallelizeBuild": false, "buildImplicitDependencies": false, "runPostActionsOnFailure": true, + "buildArchitectures": "matchRunDestination", "targets": [ "Target1": "all", "Target2": "testing", @@ -1100,6 +1101,7 @@ class SpecLoadingTests: XCTestCase { try expect(scheme.build.parallelizeBuild) == false try expect(scheme.build.buildImplicitDependencies) == false try expect(scheme.build.runPostActionsOnFailure) == true + try expect(scheme.build.buildArchitectures) == .matchRunDestination let expectedRun = Scheme.Run( config: "debug", @@ -1137,6 +1139,24 @@ class SpecLoadingTests: XCTestCase { try expect(scheme.management) == expectedManagement } + $0.it("encodes scheme build architecture overrides") { + let architectureOptions: [(BuildArchitectures, String)] = [ + (.matchRunDestination, "matchRunDestination"), + (.universal, "universal"), + ] + + for (option, expected) in architectureOptions { + let build = Scheme.Build(targets: [], buildArchitectures: option) + let dictionary = try unwrap(build.toJSONValue() as? [String: Any]) + + try expect(dictionary["buildArchitectures"] as? String) == expected + } + + let defaultBuild = Scheme.Build(targets: []) + let defaultDictionary = try unwrap(defaultBuild.toJSONValue() as? [String: Any]) + try expect(defaultDictionary["buildArchitectures"]).to.beNil() + } + $0.it("parses alternate test schemes") { let schemeDictionary: [String: Any] = [ "build": [ From e788ae592f431b7f87533dfc260bedc55024e06e Mon Sep 17 00:00:00 2001 From: Arham Wani Date: Sat, 22 Aug 2026 19:18:07 +0530 Subject: [PATCH 4/7] Document scheme build architecture overrides --- Docs/ProjectSpec.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index d8c42780..27c5e7a9 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -1019,6 +1019,7 @@ Schemes allows for more control than the convenience [Target Scheme](#target-sch - [ ] **runPostActionsOnFailure**: **Bool** - Flag to determine if Xcode should run post scripts despite failure build. By default this is `false` if not set. - `true`: Run post scripts even if build is failed - `false`: Only run post scripts if build success +- [ ] **buildArchitectures**: **String** - Overrides the architectures built for all targets in the scheme. Supported values are `matchRunDestination`, `universal`, and `useTargetSettings`. By default this is `useTargetSettings` if not set. ```yaml @@ -1027,6 +1028,7 @@ targets: FooLib/FooTarget: [test, run] parallelizeBuild: true buildImplicitDependencies: true +buildArchitectures: matchRunDestination ``` ### Common Build Action options From 1b743b5ebebd68bdddcc17850b12f34dde77dfcd Mon Sep 17 00:00:00 2001 From: Arham Wani Date: Sat, 22 Aug 2026 19:20:11 +0530 Subject: [PATCH 5/7] Update changelog for #1642 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4886713..bacd3ad2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Added - Added support for Swift package `traits` on remote and local package references, so generated projects preserve the configured trait selections #1629 @philprime +- Added scheme build architecture overrides #1642 @arhxam ### Changed - Targets in the generated project now follow the declaration order from the source spec (Xcode sidebar, `xcodebuild -list` output). Previously they were always sorted alphabetically. Applies to both YAML and JSON specs. Declaration order is now also preserved for targets whose `platform`/`name` come from a target template and for targets whose key is a `${VARIABLE}`. #1619 @mirkokg From bac1385861661178d8bf0937e722da55e67d4d7e Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sun, 13 Sep 2026 23:24:07 +1000 Subject: [PATCH 6/7] Default scheme buildArchitectures to matchRunDestination - Change the default to matchRunDestination, matching Xcode's default for new schemes (Xcode 15.3+). Use useTargetSettings to keep the previous behaviour. - Add buildArchitectures to target schemes, so schemes generated from a target's `scheme` can override it too. - Document the options with their Xcode scheme editor names. - Move the changelog entries into Next Version and note the new default. - Regenerate fixtures. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 9 ++++++- Docs/ProjectSpec.md | 6 ++++- Sources/ProjectSpec/Scheme.swift | 2 +- Sources/ProjectSpec/TargetScheme.swift | 9 +++++++ Sources/XcodeGenKit/SchemeGenerator.swift | 3 ++- .../xcshareddata/xcschemes/App.xcscheme | 1 + .../Project.xcodeproj/project.pbxproj | 24 ++++++++----------- .../xcshareddata/xcschemes/App_Clip.xcscheme | 1 + .../xcschemes/App_Scheme.xcscheme | 1 + .../xcschemes/App_iOS Production.xcscheme | 1 + .../xcschemes/App_iOS Staging.xcscheme | 1 + .../xcschemes/App_iOS Test.xcscheme | 1 + .../xcshareddata/xcschemes/App_macOS.xcscheme | 1 + .../xcschemes/App_watchOS.xcscheme | 1 + .../xcschemes/DriverKitDriver.xcscheme | 1 + .../EndpointSecuritySystemExtension.xcscheme | 1 + .../xcshareddata/xcschemes/Framework.xcscheme | 1 + .../xcschemes/NetworkSystemExtension.xcscheme | 1 + .../xcshareddata/xcschemes/Tool.xcscheme | 1 + .../xcschemes/iMessageApp.xcscheme | 1 + .../xcschemes/iMessageExtension.xcscheme | 1 + .../xcschemes/ExternalTarget.xcscheme | 1 + .../xcschemes/Shared_TargetScheme.xcscheme | 1 + .../xcschemes/User_ProjectScheme.xcscheme | 1 + Tests/ProjectSpecTests/SpecLoadingTests.swift | 4 +++- .../SchemeGeneratorTests.swift | 16 +++++++++++++ 26 files changed, 72 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bacd3ad2..faacbce9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,17 @@ # Change Log +## Next Version + +### Added +- Added `buildArchitectures` to scheme build options and target schemes, to control Xcode's "Override Architectures" scheme setting #1642 @arhxam + +### Changed +- Generated schemes now default to `buildArchitectures: matchRunDestination` ("Match Run Destination"), matching Xcode's default for new schemes. Previously schemes used each target's architecture settings. Set `buildArchitectures: useTargetSettings` to keep the previous behaviour #1642 @yonaskolb + ## 2.46.0 ### Added - Added support for Swift package `traits` on remote and local package references, so generated projects preserve the configured trait selections #1629 @philprime -- Added scheme build architecture overrides #1642 @arhxam ### Changed - Targets in the generated project now follow the declaration order from the source spec (Xcode sidebar, `xcodebuild -list` output). Previously they were always sorted alphabetically. Applies to both YAML and JSON specs. Declaration order is now also preserved for targets whose `platform`/`name` come from a target template and for targets whose key is a `${VARIABLE}`. #1619 @mirkokg diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index 27c5e7a9..9fc2f918 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -893,6 +893,7 @@ This is a convenience used to automatically generate schemes for a target based - [ ] **stopOnEveryMainThreadCheckerIssue**: **Bool** - a boolean that indicates if this scheme should stop at every Main Thread Checker issue. This defaults to false - [ ] **disableThreadPerformanceChecker**: **Bool** - a boolean that indicates if this scheme should disable the Thread Performance Checker. This defaults to false - [ ] **buildImplicitDependencies**: **Bool** - Flag to determine if Xcode should build implicit dependencies of this scheme. By default this is `true` if not set. +- [ ] **buildArchitectures**: **String** - Overrides the architectures built for all targets in the scheme. Supported values are `matchRunDestination`, `universal`, and `useTargetSettings`. By default this is `matchRunDestination` if not set. See [Build](#build) for details. - [ ] **language**: **String** - a String that indicates the language used for running and testing. This defaults to nil - [ ] **region**: **String** - a String that indicates the region used for running and testing. This defaults to nil - [ ] **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 @@ -1019,7 +1020,10 @@ Schemes allows for more control than the convenience [Target Scheme](#target-sch - [ ] **runPostActionsOnFailure**: **Bool** - Flag to determine if Xcode should run post scripts despite failure build. By default this is `false` if not set. - `true`: Run post scripts even if build is failed - `false`: Only run post scripts if build success -- [ ] **buildArchitectures**: **String** - Overrides the architectures built for all targets in the scheme. Supported values are `matchRunDestination`, `universal`, and `useTargetSettings`. By default this is `useTargetSettings` if not set. +- [ ] **buildArchitectures**: **String** - Overrides the architectures built for all targets in the scheme. This is the "Override Architectures" build option in Xcode's scheme editor. By default this is `matchRunDestination` if not set, which matches Xcode's default for new schemes. + - `matchRunDestination`: Only build the architecture of the run destination ("Match Run Destination") + - `universal`: Build all standard architectures ("Universal") + - `useTargetSettings`: Use the architecture build settings of each target, such as `ONLY_ACTIVE_ARCH` ("Use Target Settings") ```yaml diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift index 8120c2b7..8ec56bc5 100644 --- a/Sources/ProjectSpec/Scheme.swift +++ b/Sources/ProjectSpec/Scheme.swift @@ -102,7 +102,7 @@ public struct Scheme: Equatable { public static let parallelizeBuildDefault = true public static let buildImplicitDependenciesDefault = true public static let runPostActionsOnFailureDefault = false - public static let buildArchitecturesDefault = BuildArchitectures.useTargetSettings + public static let buildArchitecturesDefault = BuildArchitectures.matchRunDestination public var targets: [BuildTarget] public var parallelizeBuild: Bool diff --git a/Sources/ProjectSpec/TargetScheme.swift b/Sources/ProjectSpec/TargetScheme.swift index 967417b5..27fdd76c 100644 --- a/Sources/ProjectSpec/TargetScheme.swift +++ b/Sources/ProjectSpec/TargetScheme.swift @@ -8,6 +8,7 @@ public struct TargetScheme: Equatable { public static let stopOnEveryMainThreadCheckerIssueDefault = false public static let disableThreadPerformanceCheckerDefault = false public static let buildImplicitDependenciesDefault = true + public static let buildArchitecturesDefault = Scheme.Build.buildArchitecturesDefault public var testTargets: [Scheme.Test.TestTarget] public var configVariants: [String] @@ -20,6 +21,7 @@ public struct TargetScheme: Equatable { public var stopOnEveryMainThreadCheckerIssue: Bool public var disableThreadPerformanceChecker: Bool public var buildImplicitDependencies: Bool + public var buildArchitectures: BuildArchitectures public var commandLineArguments: [String: Bool] public var environmentVariables: [XCScheme.EnvironmentVariable] public var preActions: [Scheme.ExecutionAction] @@ -40,6 +42,7 @@ public struct TargetScheme: Equatable { stopOnEveryMainThreadCheckerIssue: Bool = stopOnEveryMainThreadCheckerIssueDefault, disableThreadPerformanceChecker: Bool = disableThreadPerformanceCheckerDefault, buildImplicitDependencies: Bool = buildImplicitDependenciesDefault, + buildArchitectures: BuildArchitectures = buildArchitecturesDefault, commandLineArguments: [String: Bool] = [:], environmentVariables: [XCScheme.EnvironmentVariable] = [], preActions: [Scheme.ExecutionAction] = [], @@ -58,6 +61,7 @@ public struct TargetScheme: Equatable { self.stopOnEveryMainThreadCheckerIssue = stopOnEveryMainThreadCheckerIssue self.disableThreadPerformanceChecker = disableThreadPerformanceChecker self.buildImplicitDependencies = buildImplicitDependencies + self.buildArchitectures = buildArchitectures self.commandLineArguments = commandLineArguments self.environmentVariables = environmentVariables self.preActions = preActions @@ -110,6 +114,7 @@ extension TargetScheme: JSONObjectConvertible { stopOnEveryMainThreadCheckerIssue = jsonDictionary.json(atKeyPath: "stopOnEveryMainThreadCheckerIssue") ?? TargetScheme.stopOnEveryMainThreadCheckerIssueDefault disableThreadPerformanceChecker = jsonDictionary.json(atKeyPath: "disableThreadPerformanceChecker") ?? TargetScheme.disableThreadPerformanceCheckerDefault buildImplicitDependencies = jsonDictionary.json(atKeyPath: "buildImplicitDependencies") ?? TargetScheme.buildImplicitDependenciesDefault + buildArchitectures = jsonDictionary.json(atKeyPath: "buildArchitectures") ?? TargetScheme.buildArchitecturesDefault commandLineArguments = jsonDictionary.json(atKeyPath: "commandLineArguments") ?? [:] environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary) preActions = jsonDictionary.json(atKeyPath: "preActions") ?? [] @@ -155,6 +160,10 @@ extension TargetScheme: JSONEncodable { dict["buildImplicitDependencies"] = buildImplicitDependencies } + if buildArchitectures != TargetScheme.buildArchitecturesDefault { + dict["buildArchitectures"] = buildArchitectures.toJSONValue() + } + if let language = language { dict["language"] = language } diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift index 38a1be65..423bf8e8 100644 --- a/Sources/XcodeGenKit/SchemeGenerator.swift +++ b/Sources/XcodeGenKit/SchemeGenerator.swift @@ -489,7 +489,8 @@ extension Scheme { targets: Scheme.buildTargets(for: target, project: project), buildImplicitDependencies: targetScheme.buildImplicitDependencies, preActions: targetScheme.preActions, - postActions: targetScheme.postActions + postActions: targetScheme.postActions, + buildArchitectures: targetScheme.buildArchitectures ), run: .init( config: debugConfig, diff --git a/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme b/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme index 298045bf..2649ac5b 100644 --- a/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme +++ b/Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme @@ -5,6 +5,7 @@ Date: Sun, 13 Sep 2026 23:28:10 +1000 Subject: [PATCH 7/7] Restore TestProject fixture The previous commit accidentally included a TestProject project.pbxproj regenerated by a local test run, which dropped the synced folder exception set. Co-Authored-By: Claude Opus 5 --- .../Project.xcodeproj/project.pbxproj | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index bd14f2c4..bbfb8e41 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -766,7 +766,6 @@ 8FE05BF7897ECFD58B7AC8B1 /* CrossOverlayFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CrossOverlayFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 93C033648A37D95027845BD3 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 9528528C989D24FE3E6C533E /* App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "App-Info.plist"; sourceTree = ""; }; - 97B24898F0B7D52E494FFE2D /* Base */ = {isa = PBXFileReference; name = Base; path = "Base.lproj/excluded-file"; sourceTree = ""; }; 9A87A926D563773658FB87FE /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 9D4AB3FCF725428EFB56F542 /* Configuration.storekit */ = {isa = PBXFileReference; path = Configuration.storekit; sourceTree = ""; }; 9F27382DD66E26C059E26EFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; @@ -833,6 +832,17 @@ FED40A89162E446494DDE7C7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 9A259ACEBCE19CC5F22B6DD4 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + ExcludedFile.swift, + Info.plist, + ); + target = 0867B0DACEF28C11442DE8F7 /* App_iOS */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + /* Begin PBXFileSystemSynchronizedRootGroup section */ A2F1B5386E15A261AC8A4DEE /* SyncedChild */ = { isa = PBXFileSystemSynchronizedRootGroup; @@ -846,6 +856,9 @@ }; AE2AB2772F70DFFF402AA02B /* SyncedFolder */ = { isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 9A259ACEBCE19CC5F22B6DD4 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, + ); explicitFileTypes = { }; explicitFolders = ( @@ -1013,7 +1026,6 @@ 1F2DE413CF2CB54988158172 /* App */ = { isa = PBXGroup; children = ( - C25CE4948590059515C303C3 /* excluded-file */, 2F80635127D17ECB7748067B /* FolderWithDot2.0 */, CE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */, 9E17D598D98065767A04740F /* Localizable.strings */, @@ -3358,14 +3370,6 @@ name = Localizable.strings; sourceTree = ""; }; - C25CE4948590059515C303C3 /* excluded-file */ = { - isa = PBXVariantGroup; - children = ( - 97B24898F0B7D52E494FFE2D /* Base */, - ); - name = "excluded-file"; - sourceTree = ""; - }; C872631362DDBAFCE71E5C66 /* Interface.storyboard */ = { isa = PBXVariantGroup; children = (