[
  {
    "path": ".gitattributes",
    "content": "CHANGELOG merge=union\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\non:\n  push: {}\n  pull_request: {}\njobs:\n  run:\n    runs-on: macos-15\n    name: Xcode ${{ matrix.xcode }}\n    strategy:\n      matrix:\n        xcode: [\"16.4\", \"26.2\"]\n    env:\n      DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer\n    steps:\n      - uses: actions/checkout@master\n      - name: Resolve\n        run: swift package resolve\n      - name: Build\n        run: swift build\n      - name: Test\n        run: set -o pipefail && swift test 2>&1 | xcpretty\n      - name: Gen fixtures\n        run: scripts/gen-fixtures.sh\n      - name: Check fixtures\n        run: scripts/diff-fixtures.sh\n      - name: Build fixtures\n        env:\n          GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: scripts/build-fixtures.sh\n  run-linux:\n    runs-on: ubuntu-latest\n    name: Linux\n    steps:\n      - uses: actions/checkout@master\n      - name: Build and run tests\n        run: swift test --enable-test-discovery\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.swiftpm\n/.build\n/Packages\nxcuserdata\n*.xccheckout\n*.xcuserstate\nXcodeGen.xcodeproj\nxcodegen.zip\nxcodegen.artifactbundle.zip\n.vscode/launch.json\nDerivedData\n.context\n"
  },
  {
    "path": ".swiftformat",
    "content": "--exclude .build\n--exclude .swiftpm\n--swiftversion 5.1\n--disable redundantSelf\n--disable sortedImports\n--disable blankLinesAtStartOfScope\n--disable blankLinesAtEndOfScope\n--disable unusedArguments\n--disable hoistPatternLet\n--disable numberFormatting\n--disable redundantRawValues\n--disable andOperator\n--ifdef noindent\n--ranges nospace\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\n## Next Version\n\n## 2.45.3\n\n### Fixed\n- Fix folder source PBXFileReference path regression with createIntermediateGroups #1605 @yonaskolb\n- Fix synced folders: includes silently ignored + no deduplication across targets #1604 @4brunu\n\n## 2.45.2\n\n### Fixed\n- Validate empty source paths to prevent project root inclusion #1601 @yonaskolb\n- Fix missing productRefGroup in generated projects #1591 @ruslic19\n\n## 2.45.1\n\n### Added\n- Added built in `.icon` folder support for IconComposer #1600 @yonaskolb\n\n## 2.45.0\n\n### Added\n- Added ability to specify project format version via `projectFormat` option #1566 @anivaros\n- Added `explicitFolders` property to `TargetSource` that is passed through to `PBXFileSystemSynchronizedRootGroup`, to turn entire subfolders into Resources #1596 @macguru\n- Allow synced folders to be sorted using `groupOrdering` #1596 @macguru\n- Added `excludes` support for `syncedFolder` sources with glob pattern matching #1587 @mirkokg\n\n### Fixed\n- Fixed synced folders ignoring `createIntermediateGroups=YES` and always being created at the root level #1596 @macguru\n- Fix membership exceptions not working for nested synced folders with intermediate groups enabled #1596 @macguru\n- Fix `supportedDestinations` presets being injected when `settingPresets` is `none` #1599 @macguru\n- Automatically exclude `Info.plist` from synced folder membership when it's within the synced folder #1587 @mirkokg\n- Add empty copy resources build phase for synced folders so resources are copied correctly #1587 @mirkokg\n\n### Internal\n- Update to XcodeProj 9.10.1 #1597 @yonaskolb\n- Fix CI: add explicit xcodebuild destinations and update Xcode matrix #1594 @yonaskolb\n- Update ArtifactBundleGen to 0.0.8 #1570 @georgenavarro\n\n## 2.44.1\n\n### Fixed\n- Set the correct object version of 77 for Xcode 16 projects @jakobfelsatdm #1563\n- Support major.minor SPM package versions which would otherwise fail to decode to a string in yaml specs #1546 @RomanPodymov\n- Fix regression for `parallelizable` in scheme. It now resolves to \"Enabled\" and not \"Swift Testing Only\" #1565 @CraigSiemens\n\n## 2.44.0\n\n### Added\n- Basic support for Xcode 16's synchronized folders #1541 @yonaskolb\n  - `TargetSource.type` can now be `syncedFolder`\n  - `Options.defaultSourceDirectoryType` can be set to `syncedFolder` for the default type in all sources in the project (defaults to `group`)\n  - Benefits include faster generation and no cache invalidation or need to regenerate when files are added or removed from these folders\n  - Note that not all TargetSource options like excludes are supported, just a simple path. Please test and see what is missing in your projects\n- Added sanitizer options to run and test actions in Scheme #1550 @hi-kumar\n\n### Fixed\n- Added validation to ensure that all values in `settings.configs` are mappings. Previously, passing non-mapping values did not raise an error, making it difficult to detect misconfigurations. Now, `SpecParsingError.invalidConfigsMappingFormat` is thrown if misused. #1547 @Ryu0118\n- Use `USER` instead of `LOGNAME` for XCUserData #1559 @KostyaSha\n\n## 2.43.0\n\n### Added\n\n- Added `excludeFromProject` from local packages #1512 @maximkrouk\n- Added support for `preferredScreenCaptureFormat` in schemes #1450 @vakhidbetrakhmadov\n\n### Changes\n\n- `.appex` files are now copied to plugins directory by default #1531 @iljaiwas\n- The `preGenCommand` is now run before validation and caching #1500 #1519 @simonbs @dalemyers\n- Improve performance of spec validation #1522 @zewuchen\n- The `enableGPUValidationMode` enum is deprecated and is now a boolean #1515 @marcosgriselli @yonaskolb\n\n### Fixed\n\n- **Breaking**: `fileGroups` are now relative paths when in included files, like other paths #1534 @shnhrrsn\n- **Breaking**: Local package paths are now relative paths when in included files, like other paths #1498 @juri\n- Optional groups are no longer skipped when missing and generating projects from a different directory #1529 @SSheldon\n\n### Internal\n\n- Fix Swift 6.0 warnings #1513 @marcosgriselli\n- Update package swift tools to 5.9 #1489 @0111b\n- Add Xcode 16 to CI #1439 @giginet\n- Fix test project building on CI #1537 @yonaskolb\n- Skip failing tests on Linux #1517 @marcosgriselli\n- XcodeProj updated to 8.24.3 #1515 @marcosgriselli @yonaskolb\n\n## 2.42.0\n\n### Added\n\n- Better support for local Swift packages in Xcode 15 #1465 @kinnarr\n- Added `macroExpansion` to test actions in schemes #1468 @erneestoc\n\n### Changed\n\n- Better default macroExpansion target in schemes #1471 @erneestoc\n\n### Removed\n\n- Removed `xcodegen dump --type graphviz` as graphviz no longer builds in Swift 6 and is no longer maintained. If anyone uses this feature and wishes to keep it, please submit a PR providing a suitable alternative. #1485 @giginet\n\n## 2.41.0\n\n### Added\n\n- Added `xcodegen cache` command that writes the cache. Useful for `post-commit` git hook integration #1476 @yonaskolb\n\n### Changed\n\n- Include folders in file sorting #1466 @jflan-dd\n\n### Fixed\n\n- Fixed `supportedDestinations` validation when it contains watchOS for multiplatform apps. #1470 @tatsuky\n\n## 2.40.1\n\n### Fixed\n\n- Reverted `.xcprivacy` handling. They will now again be treated as resources by default @yonaskolb\n\n## 2.40.0\n\n### Added\n\n- Added support for local Swift packages at the project root by specifying a \"\" group #1413 @hiltonc\n- Added a custom `shell` to a scheme's pre and post actions #1430 @balazs-vimn\n\n### Changed\n\n- `.xcprivacy` files are now not added to any build phases by default #1464 @yonaskolb\n\n## 2.39.1\n\n### Added\n\n- Proper defaults for `.cp` and `.cxx` files #1447 @eschwieb\n\n### Fixed\n\n- Fixed bundle access crash #1448 @freddi-kit\n- Pinned XcodeProj version to fix breaking changes when XcodeGen is used as a dependency #1449 @yonaskolb\n\n## 2.39.0\n\n### Added\n\n- Support Artifact Bundle #1388 @freddi-kit\n- Added support for `.xcstrings` String Catalogs #1421 @nicolasbosi95\n- Added default `LD_RUNPATH_SEARCH_PATHS` for visionOS #1444 @Dahlgren\n- Added `watchOS` as a supported cross platform destination #1438 @tatsuky\n\n### Fixed\n\n- Fixed custom local package groups not being created #1416 @JaapManenschijn\n- Fixed spec validation error type #1439 @Lutzifer\n- Create parent group for local package groups if it does not exist already #1417 @JaapManenschijn\n\n### Internal\n\n- Updated Rainbow version #1424 @nysander\n\n## 2.38.0\n\n### Added\n\n- [Multi-destination targets](https://github.com/yonaskolb/XcodeGen/blob/master/Docs/ProjectSpec.md#supported-destinations) #1336 @amatig\n  - Added `supportedDestinations` to target\n  - Added optional new `platform` value of `auto` when using `supportedDestinations`\n  - Added `destinationFilters` for sources and dependencies\n  - Added `inferDestinationFiltersByPath`, a convenience filter for sources\n- `.mlpackage` files now default to being a source type #1398 @aaron-foreflight\n- Added support for `Build Tool Plug-ins` in `AggregateTarget` #1390 @BarredEwe\n\n### Fixed\n\n- Fixed source file `includes` not working when no paths were found #1337 @shnhrrsn\n- Supports specifying multiple package products #1395 @simonbs\n\n## 2.37.0\n\n### Added\n\n- Added support for adding `Build Tool Plug-ins` to targets #1374 @BarredEwe\n\n## 2.36.1\n\n### Fixed\n\n- Revert addition of `ENABLE_MODULE_VERIFIER` build setting for causing issues in tests and some setups #1387 @yonaskolb\n\n## 2.36.0\n\n### Added\n\n- Added `scheme.enableGPUValidationMode` #1294 @LouisLWang\n- Added visionOS support #1379 @shiba1014\n- Added ability to disable Thread performance checker in Schemes #1380 @piellarda\n- Added support for `RuntimeIssue` breakpoints #1384 @yonaskolb\n\n### Changed\n\n- The project object version has been updated for Xcode 14.3 #1368 @leonardorock\n- Updated recommended settings for Xcode 14.3 #1385 @yonaskolb\n- Dropped support for Xcode 12 and 13, due to XcodeProj update #1384 @yonaskolb\n\n### Fixed\n\n- Fix external dependencies from being removed by Xcode #1354 @OdNairy\n- Stop creating orphaned object references when reusing references to external dependencies #1377 @liamnichols\n\n## 2.35.0\n\n### Added\n\n- Added support for shared breakpoints #177 @alexruperez @myihsan\n- Added support for `putResourcesBeforeSourcesBuildPhase` in a target #1351 @mat1th\n\n### Fixed\n\n- Fix case where source paths may not be deduplicated correctly resulting in duplicate groups and/or a crash in running Xcodegen #1341 @dalemyers\n\n## 2.34.0\n\n### Changed\n\n- Added support for `swiftcrossimport` folders. #1317 @Iron-Ham\n- Added support for [Scheme Management](Docs/ProjectSpec.md##scheme-management) #1142 @wendyliga, @teameh\n\n### Fixed\n\n- Fix includes when the projectRoot is a relative path #1262 @CraigSiemens\n- Renamed build phase `Embed App Extensions` to `Embed Foundation Extensions` to fix Xcode 14 warning #1310 @casperriboe\n\n## 2.33.0\n\n### Added\n\n- Added support for `enableGPUFrameCaptureMode` #1251 @bsudekum\n- Config setting presets can now also be loaded from the main bundle when bundling XcodeGenKit #1135 @SofteqDG\n- Added ability to generate multiple projects in one XcodeGen launch #1270 @skofgar\n- Use memoization during recursive SpecFiles creation. This provides a drastic performance boost with lots of recursive includes #1275 @ma-oli\n\n### Fixed\n\n- Fix scheme not being generated for aggregate targets #1250 @CraigSiemens\n- Fix recursive include path when relativePath is not set #1275 @ma-oli\n- Include projectRoot in include paths #1275 @ma-oli\n\n### Internal\n- Updated to Yams 5.0.1 #1297 @s2mr\n- Delete ignored `try` keyword #1298 @s2mr\n\n## 2.32.0\n\n### Added\n\n- Add support for `mlmodelc` files #1236 @antonsergeev88\n- Add `enable` option for `include` #1242 @freddi-kit\n\n### Fixed\n\n- Fix checking environment variable in `include` #1242 @freddi-kit\n- Fix profile action for frameworks in Xcode 14 #1245 @SSheldon\n\n## 2.31.0\n\n### Added\n\n- Added a new CopyFilesBuildPhase, \"Embed ExtensionKit Extensions\" #1230 @mtj0928\n- Added duplicate dependencies validation #1234 @aleksproger\n\n## 2.30.0\n\n### Added\n\n- Added support for new target type `extensionkit-extension` in Xcode 14 #1228 @aleksproger\n\n### Changed\n\n- Speed up generating build settings for large projects #1221 @jpsim\n\n### Fixed\n\n- Fix XcodeGen building as library after breaking XcodeProj update 8.8.0 #1228 @aleksproger\n\n## 2.29.0\n\nSome support for Xcode Test Plans has been added. For now test plans are not generated by XcodeGen and must be created in Xcode and checked in, and then referenced by path. If the test targets are added, removed or renamed, the test plans may need to be updated in Xcode\n\n#### Added\n\n- Schemes and Target Schemes can now reference existing Test Plans under `{scheme}.test.testPlans` and `{target}.scheme.testPlans`, respectively. #716 @yonaskolb @omares\n\n#### Fixed\n\n- Fixed an issue where DocC was not added to source file list #1202 @hiragram\n\n#### Changed\n\n- Updated XcodeProj to 8.7.1 #1213 @yonaskolb\n\n## 2.28.0\n\n#### Added\n\n- Support for specifying custom group locations for SPM packages. #1173 @John-Connolly\n\n### Fixed\n\n- Fix Monterey macOS shell version, shell login flag for environments #1167 @bimawa\n- Fixed crash caused by a simultaneous write during a glob processing #1177 @tr1ckyf0x\n\n### Changed\n\n- Run target source pattern matching in parallel #1197 @alvarhansen\n\n## 2.27.0\n\n#### Added\n\n- Support test target for local Swift Package #1074 @freddi-kit\n- Added `coverageTargets` for target test schemes. This enables to gather code coverage for specific targets. #1189 @gabriellanata\n- Fixed issue where .gyb files could not be added to source file list #1191 @hakkurishian\n\n### Fixed\n\n- Fixed crash caused by a simultaneous write during a glob processing #1177 @tr1ckyf0x\n- Skip generating empty compile sources build phases for watch apps #1185 @evandcoleman\n\n## 2.26.0\n\n### Added\n\n- Added the option to specify a `location` in a test target #1150 @KrisRJack\n\n### Changed\n\n- Speed up source inclusion checking for big projects #1122 @PaulTaykalo\n\n## 2.25.0\n\n### Added\n\n- Allow specifying a `copy` setting for each dependency. #1038 @JakubBednar\n\n### Fixed\n\n- Fix broken codesign option for bundle dependency #1104 @kateinoigakukun\n- Ensure fileTypes are mapped to JSON value #1112 @namolnad\n- Fix platform filter for package dependecies #1123 @raptorxcz\n- Fix Xcode 13 build #1130 @raptorxcz @mthole\n\n### Changed\n\n- Update XcodeProj to 8.2.0 #1125 @nnsnodnb\n\n## 2.24.0\n\n### Added\n\n- Added support for DocC Catalogs #1091 @brevansio\n- Added support for \"driver-extension\" and \"system-extension\" product types #1092 @vgorloff\n- Add support for conditionally linking dependencies for specific platforms #1087 @daltonclaybrook\n- Add ability to specify UI testing screenshot behavior in test schemes #942 @daltonclaybrook\n\n### Changed\n\n- **Breaking**: Rename the `platform` field on `Dependency` to `platformFilter` #1087 @daltonclaybrook\n\n## 2.23.1\n\n### Changed\n\n- Reverted \"Change FRAMEWORK_SEARCH_PATH for xcframeworks (#1015)\", introduced in 2.20.0. XCFrameworks need to be\n  referenced directly in the project for Xcode's build system to extract the appropriate frameworks #1081 @elliottwilliams\n\n## 2.23.0\n\n#### Added\n\n- Added ability to set custom platform for dependency #934 @raptorxcz\n\n#### Fixed\n\n- Added `()` to config variant trimming charater set to fix scheme config variant lookups for some configs like `Debug (Development)` that broke in 2.22.0 #1078 @DavidWoohyunLee\n- Fixed Linux builds on Swift 5.4 #1083 @yonaskolb\n\n## 2.22.0\n\n#### Added\n\n- Support `runPostActionsOnFailure` for running build post scripts on failing build #1075 @freddi-kit\n\n#### Changed\n\n- Xcode no longer alerts to project changes after regeneration, due to internal workspace not regenerating if identical #1072 @yonaskolb\n\n#### Fixed\n\n- Fixed no such module `DOT` error when package is used as a dependency #1067 @yanamura\n- Fixed scheme config variant lookups for some configs like `ProdDebug` and `Prod-Debug` that broke in 2.21.0 #1070 @yonaskolb\n\n## 2.21.0\n\n#### Added\n\n- Support weak link for Swift Package Dependency #1064 @freddi-kit\n\n#### Changed\n\n- Carthage frameworks are no longer embedded for \"order-only\" target dependencies. This avoid redundant embeds in situations where a target's sources _import_ a Carthage framework but do not have a binary dependency on it (like a test target which runs in a host app). #1041 @elliottwilliams\n\n#### Fixed\n\n- The `Core` target is renamed to avoid collisions with other packages. #1057 @elliottwilliams\n- Lookup scheme config variants by whole words, fixing incorrect assignment in names that contain subtrings of each other (eg PreProd and Prod) #976 @stefanomondino\n\n## 2.20.0\n\n#### Added\n\n- Allow specifying a `github` name like `JohnSundell/Ink` instead of a full `url` for Swift Packages #1029 @yonaskolb\n- Added explicit `LastUpgradeCheck` and `LastUpgradeVersion` override support so it's possible to override these properties without using the `project.xcodeVersion`. [1013](https://github.com/yonaskolb/XcodeGen/pull/1013) @Andre113\n- Added `macroExpansion` for `run` in `schemes` #1036 @freddi-kit\n- Added `askForAppToLaunch` for `profile` in `schemes` #1035 @freddi-kit\n- Added support for selectedTests in schemes `Test` configuration. #913 @ooodin\n\n#### Fixed\n\n- Fixed regression on `.storekit` configuration files' default build phase. #1026 @jcolicchio\n- Fixed framework search paths when using `.xcframework`s. #1015 @FranzBusch\n- Fixed bug where schemes without a build target would crash instead of displaying an error #1040 @dalemyers\n- Fixed files with names ending in **Info.plist** (such as **GoogleServices-Info.plist**) from being omitted from the Copy Resources build phase. Now, only the resolved info plist file for each specific target is omitted. #1027 @liamnichols\n\n#### Internal\n\n- Build universal binaries for release. XcodeGen now runs natively on Apple Silicon. #1024 @thii\n\n## 2.19.0\n\n#### Added\n\n- Added support for building and running on Linux platforms. Tested for compatibility with Swift 5.3+ and Ubuntu 18.04. #988 @elliottwilliams\n- Added `useBaseInternationalization` to Project Spec Options to opt out of Base Internationalization. #961 @liamnichols\n- Added `storeKitConfiguration` to allow specifying StoreKit Configuration in Scheme and TargetScheme, supporting either xcodeproj or xcworkspace via `schemePathPrefix` option. #964 @jcolicchio\n- Added more detailed error message with method arguments. #990 @bannzai\n- Added `basedOnDependencyAnalysis` to Project Spec Build Script to be able to choose not to skip the script. #992 @myihsan\n- Added `BuildRule.runOncePerArchitecture` to allow running build rules once per architecture. #950 @sascha\n- Added discovered dependency file for a build script #1012 @polac24 @fggeraissate\n\n#### Changed\n\n- **Breaking**: Info.plists with custom prefixes are no longer added to the Copy Bundle Resources build phase #945 @anivaros\n- **Breaking**: `workingDirectory` of included legacy targets is now made relative to including project #981 @jcolicchio\n- **Breaking**: Make `simulateLocation` respect `schemePathPrefix` option. #973 @jcolicchio\n\n#### Fixed\n\n- Fixed error message output for `minimumXcodeGenVersion`. #967 @joshwalker\n- Remove force-unwrapping causing crash for `LegacyTarget`s #982 @jcolicchio\n- Fixed a race condition in an internal JSON decoder, which would occasionally fail with an error like `Parsing project spec failed: Error Domain=Unspecified error Code=0`. #995 @elliottwilliams\n- Fixed issue where frameworks with `MACH_O_TYPE: staticlib` were being incorrectly embedded. #1003 @mrabiciu\n\n#### Internal\n\n- Updated to Yams 4.0.0 #984 @swiftty\n\n## 2.18.0\n\n#### Added\n\n- Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. #916 @codeman9\n- Added ability to set custom LLDBInit scripts for launch and test schemes #929 @polac24\n- Adds App Clip support. #909 @brentleyjones @dflems\n- Application extension schemes now default to `launchAutomaticallySubstyle = 2` and the correct debugger and launcher identifiers #932 @brentleyjones\n- Updated SettingsPresets to use new defaults from Xcode 12. #953 @liamnichols\n- Enable Base Internationalization by default as per Xcode 12 behavior. #954 @liamnichols\n\n#### Changed\n\n- Change default project version to Xcode 12 #960 @yonaskolb\n\n#### Internal\n\n- Updates CI to run on Xcode 12. #936 @dflems @yonaskolb\n\n#### Fixed\n\n- Select the first runnable build target, if present. #957 @codeman9\n- Allow SDK dependencies to be embedded. #922 @k-thorat\n- Allow creating intermediary groups outside of the project directory. #892 @segiddins\n- Fix appex's Runpath Search Paths under macOS target. #952 @rinsuki\n- `onlyCopyFilesOnInstall` is extended for the Embed App Extensions build phase. #948 @RomanPodymov\n\n## 2.17.0\n\n#### Added\n\n- Added `options.fileTypes` which lets you set cross project defaults for certain file extensions #914 @yonaskolb\n- Added `onlyCopyFilesOnInstall` option to targets for the Embed Files build phase. #912 @jsorge\n\n#### Fixed\n\n- Treat all directories with known UTI as file wrapper. #896 @KhaosT\n- Generated schemes for application extensions now contain `wasCreatedForAppExtension = YES`. #898 @muizidn\n- Allow package dependencies to use `link: false` #920 @k-thorat\n- Fixed issue computing relative paths.  #915 @andrewreach\n\n#### Internal\n\n- Updated to XcodeProj 7.13.0 #908 @brentleyjones\n\n## 2.16.0\n\n#### Added\n\n- Improve speed of metadata parsing and dependency resolution. #803 @michaeleisel\n- Improve support for iOS sticker packs and add support for `launchAutomaticallySubstyle` to run schemes. #824 @scelis\n- Add --project-root option to generate command. #828 @ileitch\n- Add an ability to set an order of groups with `options.groupOrdering` #613 @Beniamiiin\n- Add the ability to output a dependency graph in graphviz format #852 @jeffctown\n- Adds uncluttering the project manifest dumped to YAML from empty values #858 @paciej00\n- Added ability to name the executable target when declaring schemes. #869 @elland\n- Added ability to set executable to Ask to Launch. #871 @pinda\n\n#### Fixed\n\n- Fixed issue when linking and embedding static frameworks: they should be linked and NOT embed. #820 @acecilia\n- Fixed issue when generating projects for paths with a dot in the folder for swift sources. #826 @asifmohd\n- Prefix static library target filenames with 'lib' to match Xcode. #831 @ileitch\n- Fixed duplicate addition of carthage static frameworks. #829 @funzin\n- Fix handling of SWIFT_INSTALL_OBJC_HEADER when its value is YES/NO. #827 @ileitch\n- Set `preActions` and `postActions` on the `build` action of a TargetScheme instead of the other actions. #823 @brentleyjones\n- Prevent test targets from being set as a scheme's launch action #835 @brentleyjones\n- Implicitly include bundles in the Copy Bundle Resources build phase. #838 @skirchmeier\n- Fixed dumping a project manifest which contains an array of project references #840 @paciej00\n- Generate correct PBXTargetDependency for external targets. #843 @ileitch\n- Fix linking of multiple products from the same Swift Package #830 @toshi0383\n- Don't deduplicate files in `include` with different path but same name. #849 @akkyie\n- Don't link transitive static carthage libraries. #853 @akkyie\n- Optimize simplifying paths for faster project generation. #857 @akkyie\n- Fixed issue where wrapper folders may not include correctly in the generated project. #862 @KhaosT\n- Compile `xcmappingmodel` files instead of copying bundle resources. #834 @jcolicchio\n- Fixed issue where `Complie Sources` build phase is generated for resource bundles even when they have no files to compile #878 @nkukushkin\n\n## 2.15.1\n\n#### Fixed\n\n- Fixed issue which caused watch app schemes to be generated incorrectly, preventing these apps from launching. #798 @daltonclaybrook\n- Added build presets for the target type `framework.static`. #819 @acecilia\n- Fixed XcodeProj resolution and updated to 7.10.0 #822 @soffes\n\n## 2.15.0\n\n#### Added\n\n- Add support for local Swift Packages in `packages` using `path`. #808 @freddi-kit\n- Add `buildImplicitDependencies` as an option on `TargetScheme`. #810 @evandcoleman\n\n#### Fixed\n\n- Fixed resolving path to local Swift Packages #796 @freddi-kit\n- Added ability to stop on every main thread checker issue on Run schemes and TargetSchemes #799 @ionutivan\n- Avoid copying ObjC interface header when SWIFT_INSTALL_OBJC_HEADER=false. #805 @kateinoigakukun\n\n## 2.14.0\n\n#### Added\n\n- Add ability to embed and code sign Swift package dependencies with dynamic products. #788 @alexruperez\n\n#### Fixed\n\n- Revert \"Add Base to known regions even if one doesn't exist\" #791 @bryansum\n- Set `defaultConfigurationName` for every target which is defined in a project. #787 @ken0nek\n- Set `TEST_TARGET_NAME` only when a project has UITest bundle. #792 @ken0nek\n- Set xcodeproj path in project.xcworkspace/contents.xcworkspacedata #793 @ken0nek\n\n## 2.13.1\n\n#### Fixed\n\n- Validate scheme test action and test coverage target references before generating. #775 @liamnichols\n- Fixed parsing prerelease identifiers in Swift package versions #779 @yonaskolb\n- Fixed using legacy targets as dependencies #778 @yonaskolb\n\n#### Internal\n\n- Updated to XcodeProj 7.8.0 #777 @yonaskolb\n- Use <https://github.com/mxcl/Version> #779 @yonaskolb\n\n## 2.13.0\n\n#### Added\n\n- Support External Target References via subprojects. #701 @evandcoleman\n\n#### Fixed\n\n- Fixed compilation as library by locking down XcodeProj version #767 @yonaskolb\n- Stabilized sorting of groups with duplicate names/paths. #671 @ChristopherRogers\n- Moved `Copy Bundle Resources` to after `Link with Libraries` build phase #768 @yonaskolb\n\n#### Internal\n\n- Updated to XcodeProj 7.7.0 #767 @yonaskolb\n\n## 2.12.0\n\n#### Added\n\n- Added pre and post command options. Useful for running `pod install` in combination with `--use-cache` #759 @yonaskolb\n- Support for language and region settings on a target basis #728 @FranzBusch\n- Added option to generate only Info.plist files with `--only-plists` #739 @namolnad\n- Added the option to specify a `simulateLocation` in a scheme #722 @basvankuijck\n- Support for On Demand Resources tags #753 @sipao\n\n#### Fixed\n\n- Fixed resolving a relative path for `projectReference.path` #740 @kateinoigakukun\n- Don't add framework dependency's directory to `FRAMEWORK_SEARCH_PATHS` if it is implicit #744 @ikesyo @yutailang0119\n- Fixed resolving relative path passed to `XcodeProj` #751 @PycKamil\n- Prefer configurations named \"Debug\" or \"Release\" for default scheme build configurations #752 @john-flanagan\n- Added an extra check for package versions. #755 @basvankuijck\n\n#### Internal\n\n- Update to SwiftCLI 6.0 and use the new property wrappers #749 @yonaskolb\n\n## 2.11.0\n\n#### Added\n\n- Add Carthage static framework dependencies support. #688 @giginet\n- Added `xcodegen dump` command #710 @yonaskolb\n- Added `--no-env` option to disable environment variables expansion #704 @rcari\n- Added custom group support for target sources #621 @sroebert @rcari\n- Added new dependency type, `bundle`. This allows targets to copy bundles from other projects #616 @bsmith11\n\n#### Fixed\n\n- Improved variable expansion runtime #704 @rcari\n- Fixed missing headers for static framework targets #705 @wag-miles\n- Using more file types from XcodeProj for PBXFileReferences resulting in less project diffs #715 @yonaskolb\n- Fixed localized `*.intentdefinition` not being added to build source phases #720 @giginet\n- Fixed `selectedLauncherIdentifier` not being set `Xcode.IDEFoundation.Launcher.PosixSpawn` when `debugEnabled: false` is defined in test action #725 @ken0nek\n- Fixed unnecessary dependencies related to SwiftPM #726 @tid-kijyun\n\n#### Changed\n\n- Deprecated `$old_form` variables in favor of `${new_form}` variables #704 @rcari\n- Updated XcodeProj to 7.4.0 #709 @yonaskolb\n- Updated to Swift 5.1 #714 @yonaskolb\n\n## 2.10.1\n\n#### Fixed\n\n- Add Base to knownRegions even if one doesn't exist #694 @bryansum\n- Fixed missing `onlyGenerateCoverageForSpecifiedTargets` issue #700 @kateinoigakukun\n- Fixed regression on dependencies `link` flag #703 @rcari\n\n## 2.10.0\n\n#### Added\n\n- Support Target Reference to another project. #655 @kateinoigakukun\n- Added `coverageTargets` for test target. This enables to gather code coverage for specific targets. #656 @kateinoigakukun\n\n#### Fixed\n\n- Add base localisation by default even if no base localised files were found. Fixes warning in Xcode 11 #685 @yonaskolb\n- Don't generate CFBundleExecutable in default generated Info.plist for `bundle` target types #689 @FranzBusch\n- Fixed resolving relative paths with custom project destination #681 @giginet\n- Fixed resolving relative paths for Info.plist #683 @giginet\n- Fixed macOS unit test target TEST_HOST #696 @mjarvis\n\n#### Internal\n\n- Restructure targets #698 @yonaskolb\n\n## 2.9.0\n\n#### Added\n\n- Added Scheme Templates #672 @bclymer\n\n#### Fixed\n\n- Fixed macOS unit test setting preset #665 @yonaskolb\n- Add `rcproject` files to sources build phase instead of resources #669 @Qusic\n- Prefer default configuration names for generated schemes #673 @giginet\n- Fixed some resource files being placed to \"Recovered References\" group #679 @nivanchikov\n\n#### Internal\n\n- Updated to SwiftCLI 5.3.2 #667 @giginet\n- Fixed tests in case-sensitive file system #670 @Qusic\n\n## 2.8.0\n\n#### Added\n\n- Added support for Swift Package dependencies #624 @yonaskolb\n- Added `includes` to `sources` for a Target. This follows the same glob-style as `excludes` but functions as a way to only include files that match a specified pattern. Useful if you only want a certain file type, for example specifying `**/*.swift`. #637 @bclymer\n- Support `dylib` SDK. #650 @kateinoigakukun\n- Added `language` and `region` options for `run` and `test` scheme #654 @kateinoigakukun\n- Added `debugEnabled` option for `run` and `test` scheme #657 @kateinoigakukun\n\n#### Fixed\n\n- Expand template variable in Array of Any #651 @kateinoigakukun\n- Significantly improve performance when running with a large number files. #658 @kateinoigakukun\n- Removed some more diffs between the generated .pbxproj and when Xcode resaves it #663 @yonaskolb\n\n#### Internal\n\n- Removed needless `Array` initialization. #661 @RomanPodymov\n- Updated to XcodeProj 7.1.0 #624 @yonaskolb\n\n## 2.7.0\n\n#### Added\n\n- Added Bash 4 style recursive globbing (`**/*`) in target sources `excludes` #636 @bclymer\n- Added ability to disable main thread checker in Schemes #601 @wag-miles\n\n#### Fixed\n\n- Fixed included specs that were referenced multiple times from duplicating content #599 @haritowa\n- Fixed `.orig` files being added to the project #627 @keith\n\n#### Changed\n\n- Allow linking of dependencies into static libraries when `link` is set to true #635 @kateinoigakukun\n\n## 2.6.0\n\n#### Added\n\n- Added ability to skip tests #582 @kadarandras\n- Added ability to set `attributes` on build files #583 @min\n- Allow using environment variables in the form of `${SOME_VARIABLE}`. This might be a **breaking** change when a target template attribute is also defined as an environment variable #594 @tomquist\n- Added support for `watchapp2-container` and `framework.static` product types #604 @yonaskolb\n\n#### Fixed\n\n- Fixed `.pch` files being bundled as resources #597 @thii\n- Fixed an issue that prevents watchOS Intents Extension from running correctly. #571 @KhaosT\n\n#### Changed\n\n- Updated the default `compatibilityVersion` project setting from `Xcode 9.3` to `Xcode 10.0` #581 @acecilia\n- Updated to XcodeProj 7.0.0. Note that the length of generated UUIDs has changed #604 @yonaskolb\n\n#### Internal\n\n- Added ability to encode ProjectSpec #545 @ryohey\n\n## 2.5.0\n\n#### Added\n\n- Added support for `app-extension.intents-service` target type #536 @yonaskolb\n- Added support for custom `root` in `sdk` dependency #562 @raptorxcz\n\n#### Changed\n\n- Updated to xcodeproj 6.7.0 including its performance improvements #536 @yonaskolb\n- Updated default generated settings for Xcode 10.2 #555 @yonaskolb\n- Changed order of file generation so that plists are now generated before the project, so they will be included in the projects files #544 @tomquist\n- Updated Yams to 2.0.0 @yonaskolb\n\n#### Fixed\n\n- Fixed groups from sources outside a project spec's directory from being flattened. #550 @sroebert\n- Fixed `optional` file sources not being added to the project #557 @yonaskolb\n- Fixed Carthage dependencies being incorrectly embedded in WatchKit app bundles instead of a WatchKit app extension #558 @KhaosT\n\n## 2.4.0\n\n#### Fixed\n\n- Fixed installation when building in Swift 5 #549 @yonaskolb\n\n#### Changed\n\n- Updated to Swift 5 and dropped Swift 4.2 #549 @yonaskolb\n\n## 2.3.0\n\n#### Added\n\n- Added ability to automatically find all the frameworks for Carthage dependencies via the global `options.findCarthageFrameworks` or dependency specific `dependency.findFrameworks`. See the [Carthage](Docs/Usage.md#carthage) usage docs for more info #506 @rpassis @yonaskolb\n- Added support for nested target templates #534 @tomquist\n- Added ability to define `templateAttributes` within a target to be able to parameterize templates. #533 @tomquist\n- Added ability to set `link` to false in framework dependencies #532 @dimatosaurus\n- Added `missingConfigFiles` to `options.disabledValidations` to optionally skip checking for the existence of config files.\n- Added ability to define a per-platform `deploymentTarget` for Multi-Platform targets. #510 @ainopara\n\n#### Changed\n\n- **DEPRECATION**: Placeholders `$target_name` and `$platform` have been deprecated in favour of `${target_name}` and `${platform}`. Support for the old placeholders will be removed in a future version #533 @tomquist\n\n#### Fixed\n\n- Sources outside a project spec's directory will be correctly referenced as relative paths in the project file. #524\n- Fixed error when `optional` directory source is missing #527 @yonaskolb\n- Fixed excludes within included spec #535 @yonaskolb\n- Fixed paths in target templates within included files not being relative #537 @yonaskolb\n- Fix multi-platform target templates #541 @yonaskolb\n- Fixed sources in an included target not being relative when the sources are mix of string and dictionaries #542 @yonaskolb\n\n## 2.2.0\n\n#### Added\n\n- Added ability to generate empty directories via `options.generateEmptyDirectories` #480 @Beniamiiin\n- Added support for the `instrumentsPackage` product type #482 @ksulliva\n- Added support for `inputFileLists` and `outputFileLists` within project build scripts #500 @lukewakeford\n- Added support for a `$target_name` replacement string within target templates #504 @yonaskolb\n- Added `createIntermediateGroups` to individual Target Sources which overrides the top level option #505 @yonaskolb\n\n#### Changed\n\n- **BREAKING**: All the paths within `include` files are now relative to that file and not the root spec. This can be disabled with a `relativePaths: false` on the include. See the [documentation](https://github.com/yonaskolb/XcodeGen/blob/master/Docs/ProjectSpec.md#include) for more details #489 @ellneal\n- Updated the Xcode compatibility version from 3.2 to 9.3 #497 @yonaskolb\n- Exact matches to config names in build settings won't partial apply to other configs #503 @yonaskolb\n- UUIDs in the project are standard and don't contain any type prefixes anymore\n\n#### Fixed\n\n- Fixed `--project` argument not taking effect #487 @monowerker\n- Fixed Sticker Packs from generating an empty Source file phase which caused in error in the new build system #492 @rpassis\n- Fixed generated schemes for tool targets not setting the executable #496 @yonaskolb\n- Fixed resolving Carthage dependencies for iOS app with watchOS target. [465](https://github.com/yonaskolb/XcodeGen/pull/465) @raptorxcz\n\n## 2.1.0\n\n#### Added\n\n- Added an experiment new caching feature. Pass `--use-cache` to opt in. This will read and write from a cache file to prevent unnecessarily generating the project. Give it a try as it may become the default in a future release #412 @yonaskolb\n\n#### Changed\n\n- Changed spelling of build phases to **preBuildPhase** and **postBuildPhase**. The older names are deprecated but still work [402](https://github.com/yonaskolb/XcodeGen/pull/402) @brentleyjones\n- Moved generation to a specific subcommand `xcodegen generate`. Simple `xcodegen` will continue to work for now #437 @yonaskolb\n- If `INFOPLIST_FILE` has been set on a target, then an `info` path won't ovewrite it #443 @feischl97\n\n#### Fixed\n\n- Fixed XPC Service package type in generated `Info.plist` #435 @alvarhansen\n- Fixed phase ordering for modulemap and static library header Copy File phases. [402](https://github.com/yonaskolb/XcodeGen/pull/402) @brentleyjones\n- Fixed intermittent errors when running multiple `xcodegen`s concurrently #450 @bryansum\n- Fixed `--project` argument not working #437 @yonaskolb\n- Fixed unit tests not hooking up to host applications properly by default. They now generate a `TEST_HOST` and a `TestTargetID` #452 @yonaskolb\n- Fixed static libraries not including external frameworks in their search paths #454 @brentleyjones\n- Add `.intentdefinition` files to sources build phase instead of resources #442 @yonaskolb\n- Add `mlmodel` files to sources build phase instead of resources #457 @dwb357\n\n## 2.0.0\n\n#### Added\n\n- Added `weak` linking setting for dependencies #411 @alvarhansen\n- Added `info` to targets for generating an `Info.plist` #415 @yonaskolb\n- Added `entitlements` to targets for generating an `.entitlement` file #415 @yonaskolb\n- Added `sdk` dependency type for linking system frameworks and libs #430 @yonaskolb\n- Added `parallelizable` and `randomExecutionOrder` to `Scheme` test targets in an expanded form #434 @yonaskolb\n- Validate incorrect config setting definitions #431 @yonaskolb\n- Automatically set project `SDKROOT` if there is only a single platform within the project #433 @yonaskolb\n\n#### Changed\n\n- Performance improvements for large projects #388 @yonaskolb @kastiglione\n- Upgraded to xcodeproj 6 #388 @yonaskolb\n- Upgraded to Swift 4.2 #388 @yonaskolb\n- Remove iOS codesigning sdk restriction in setting preset #414 @yonaskolb\n- Changed default project version to Xcode 10.0 and default Swift version to 4.2 #423 @yonaskolb\n- Added ability to not link Carthage frameworks #432 @yonaskolb\n\n#### Fixed\n\n- Fixed code signing issues #414 @yonaskolb\n- Fixed `TargetSource.headerVisibility` not being set in initializer #419 @jerrymarino\n- Fixed crash when using Xcode Legacy targets as dependencies #427 @dflems\n\n## 1.11.2\n\nIf 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\n\n#### Fixed\n\n- Fixed release builds in Swift 4.2 #404 @pepibumur\n- Fixed default settings for macOS unit-tests #387 @frankdilo\n- Fixed Copy Headers phase ordering for Xcode 10 #401 @brentleyjones\n- Fixed generated schemes on aggregate targets #394 @vgorloff\n\n#### Changed\n\n- Added `en` as default value for knownRegions #390 @Saik0s\n- Update `PathKit`, `Spectre`, `Yams` and `xcodeproj` dependencies\n\n## 1.11.1\n\n#### Fixed\n\n- Fixed `FRAMEWORK_SEARCH_PATHS` for `framework` dependency paths with spaces #382 @brentleyjones\n- Fixed aggregate targets not being found with `transitivelyLinkDependencies` #383 @brentleyjones\n\n## 1.11.0\n\n#### Added\n\n- Added `showEnvVars` to build scripts to disable printing the environment #351 @keith\n- Added `requiresObjCLinking` to `target` #354 @brentleyjones\n- Added `targetTemplates` #355 @yonaskolb\n- Added `aggregateTargets` #353 @yonaskolb\n- Added `options.groupSortPosition` #356 @yonaskolb\n- Added ability to specify `copyFiles` build phase for sources #345 @brentleyjones\n- Added ability to specify a `minimumXcodeGenVersion` #349 @brentleyjones\n- Added `customArchiveName` and `revealArchiveInOrganizer` to `archive`  #367 @sxua\n\n#### Fixed\n\n- Sort files using localizedStandardCompare #341 @rohitpal440\n- Use the latest `xcdatamodel` when sorted by version #341 @rohitpal440\n- Fixed compiler flags being set on non source files in mixed build phase target sources #347 @brentleyjones\n- Fixed `options.xcodeVersion` not being parsed #348 @brentleyjones\n- Fixed non-application targets using `carthage copy-frameworks` #361 @brentleyjones\n- Set `xcdatamodel` based on `xccurrentversion` if available #364 @rpassis\n- XPC Services are now correctly copied #368 @brentley\n- Fixed `.metal` files being added to resources #380 @vgorloff\n\n#### Changed\n\n- Improved linking for `static.library` targets #352 @brentleyjones\n- Changed default group sorting to be after files #356 @yonaskolb\n- Moved `Frameworks` and `Products` top level groups to bottom #356 @yonaskolb\n- `modulemap` files are automatically copied to the products directory for static library targets #346 @brentleyjones\n- Public header files are automatically copied to the products directory for static library targets #365 @brentleyjones\n- Swift Objective-C Interface Header files are automatically copied to the products directory for static library targets #366 @brentleyjones\n- `FRAMEWORK_SEARCH_PATHS` are adjusted for `framework` dependencies #373 @brentley\n- `library.static` targets have `SKIP_INSTALL` set to `YES` #358 @brentley\n- Copy files phases have descriptive names #360 @brentley\n\n#### Internal\n\n- Moved brew formula to homebrew core\n- Added `CONTRIBUTING.md`\n\n## 1.10.3\n\n#### Fixed\n\n- Fixed Mint installations finding `SettingPresets` #338 @yonaskolb\n\n## 1.10.2\n\n#### Changed\n\n- Set `transitivelyLinkDependencies` to false by default\n\n## 1.10.1\n\n#### Fixed\n\n- Fixed `transitivelyLinkDependencies` typo #332 @brentleyjones\n- Fixed framework target dependencies not being code signed by default #332 @yonaskolb\n\n#### Changed\n\n- Code sign all dependencies by default except target executables #332 @yonaskolb\n\n## 1.10.0\n\n#### Added\n\n- Added build rule support #306 @yonaskolb\n- Added support for frameworks in sources #308 @keith\n- Added ability to automatically embed transient dependencies. Controlled with `transitivelyLinkDependencies` #327 @brentleyjones\n\n#### Changed\n\n- Upgraded to Swift 4.1\n- Improved Carthage dependency lookup performance with many targets #298 @keith\n- By default don't CodeSignOnCopy `target` dependencies. This can still be controlled with `Dependency.codeSign` #324 @yonaskolb\n\n#### Fixed\n\n- Fixed PBXBuildFile and PBXFileReference being incorrectly generated for Legacy targets #296 @sascha\n- Fixed required sources build phase not being generated if there are no sources #307 @yonaskolb\n- Fixed install script in binary release #303 @alvarhansen\n- Removed `ENABLE_TESTABILITY` from framework setting presets #299 @allu22\n- Fixed homebrew installation #297 @vhbit\n- `cc` files are now automatically recognized as source files #317 @maicki\n- Fixed `commandLineArguments` not parsing when they had dots in them #323 @yonaskolb\n- Fixed excluding directories that only have sub directories #326 @brentleyjones\n- Made `PBXContainerItemProxy` ID more deterministic\n- Fixed generated framework schemes from being executable #328 @brentleyjones\n\n## 1.9.0\n\n#### Added\n\n- Scheme pre and post actions can now be added to `target.scheme` #280 @yonaskolb\n- Individual files can now be added to `fileGroups` #293 @yonaskolb\n\n#### Changed\n\n- Updated to `xcproj` 4.3.0 for Xcode 9.3 updates\n- Update default Xcode version to 9.3 including new settings #284 @LinusU\n- **Breaking for ProjectSpec library users** Changed `ProjectSpec` to `Project` and `ProjectSpec.Options` to `SpecOptions`  #281 @jerrymarino\n\n#### Fixed\n\n- Fixed manual build phase of `none` not being applied to folders #288 @yonaskolb\n- Quoted values now correctly get parsed as strings #282 @yonaskolb\n- Fixed adding a root source folder when `createIntermediateGroups` is on #291 @yonaskolb\n- Fixed Homebrew installations issues on some machines #289 @vhbit\n- Fixed files that are added as root sources from having invalid parent groups outside the project directory #293 @yonaskolb\n\n## 1.8.0\n\n#### Added\n\n- Added Project `defaultConfig` #269 @keith\n- Added Target `attributes` #276 @yonaskolb\n- Automatically set `DevelopmentTeam` and `ProvisioningStyle` within `TargetAttributes` if relevant build settings are defined #277 @yonaskolb\n\n#### Fixed\n\n- Fixed default `LD_RUNPATH_SEARCH_PATHS` for app extensions #272 @LinusU\n\n#### Internal\n\n- Make `LegacyTarget` init public #264 @jerrymarino\n- Upgrade to _xcproj_ to 4.2.0, _Yams_ to 0.6.0 and _PathKit_ to 0.9.1 @yonaskolb\n\n## 1.7.0\n\n#### Added\n\n- Added support for scheme environment variables #239 @turekj @toshi0383\n- Added `carthageExecutablePath` option #244 @akkyie\n- Added `parallelizeBuild` and `buildImplicitDependencies` to Schemes #241 @rahul-malik\n @yonaskolb\n- Added support for Core Data `xcdatamodeld` files #249 @yonaskolb\n- Projects are now generated atomically by writing to a temporary directory first #250 @yonaskolb\n- Added script for adding precompiled binary to releases #246 @toshi0383\n- Added optional `headerVisibilty` to target source. This still defaults to public #252 @yonaskolb\n- Releases now include a pre-compiled binary and setting presets, including an install script\n\n#### Fixed\n\n- Fixed Mint installation from reading setting presets #248 @yonaskolb\n- Fixed setting `buildPhase` on a `folder` source. This allows for a folder of header files #254 @toshi0383\n- Carthage dependencies are not automatically embedded into test targets #256 @yonaskolb\n- Carthage dependencies now respect the `embed` property #256 @yonaskolb\n- iMessage extensions now have proper setting presets in regards to app icon and runtime search paths #255 @yonaskolb\n- Excluded files are not added within .lproj directories #238 @toshi0383\n\n## 1.6.0\n\n#### Added\n\n- Added scheme pre-actions and post-actions #231 @kastiglione\n- Added `options.disabledValidations` including `missingConfigs` to disable project validation errors #220 @keith\n- Generate UI Test Target Attributes #221 @anreitersimon\n\n#### Fixed\n\n- Filter out duplicate source files #217 @allu22\n- Fixed how `lastKnownFileType` and `explicitFileType` were generated across platforms #115 @toshi0383\n- Removed a few cases of project diffs when opening the project in Xcode @yonaskolb\n- Fixed Swift not being embedded by default in watch apps @yonaskolb\n\n#### Changed\n\n- Change arrays to strings in setting presets #218 @allu22\n- Updated to xcproj 4.0 #227\n\n## 1.5.0\n\n#### Added\n\n- added support for `gatherCoverageData` flag in target schemes #170 @alexruperez\n- added support for `commandLineOptions` in target schemes #172 @rahul-malik\n- added Project spec as a SwiftPM library for reuse in other projects #164 @soffes\n- added `implicit` option for framework dependencies #166 @sbarow\n- added `--quite` option to CLI #167 @soffes\n- can now print version with `-v` in addition to `--version` #174 @kastiglione\n- added support for legacy targets #175 @bkase\n- added support for indentation options #190 @bkase\n- added source excludes #135 @peymankh @\n- added `options.xcodeVersion` #197 @yonaskolb @peymankh\n- add test targets to Scheme #195 @vhbit\n- add option to make a source file optional incase it will be generated later #200 @vhbit\n- finalize Scheme spec #201 @yonaskolb\n- added `buildPhase` setting to target source for overriding the guessed build phase of files #206 @yonaskolb\n- added `deploymentTarget` setting to project and target #205 @yonaskolb\n\n#### Changed\n\n- huge performance improvements when writing the project file due to changes in xcproj\n- updated dependencies\n- minor logging changes\n- updated Project Spec documentation\n- scan for `Info.plist` lazely #194 @kastiglione\n- change setting presets so that icon settings only get applied to application targets #204 @yonaskolb\n- changed scheme build targets format #203 @yonaskolb\n- when specifying a `--spec` argument, the default for the `--project` path is now the directory containing the spec #211 @yonaskolb\n\n#### Fixed\n\n- fixed shell scripts escaping quotes twice #186 @allu22\n- fixed `createIntermediateGroups` when using a relative spec path #184 @kastiglione\n- fixed command line arguments for test and profile from being overridden #199 @vhbit\n- fixed files deep within a hierarchy having the path for a name\n- fixed source files from being duplicated if referenced with different casing #212 @yonaskolb\n- fixed target product name not being written. Fixes integration with R.swift #213 @yonaskolb\n\n## 1.4.0\n\n#### Added\n\n- added `--version` flag #112 @mironal\n- added support for adding individual file sources #106 @bkase\n- added source compiler flag support #121 @bkase\n- added `ProjectSpec.options.createIntermediateGroups` #108 @bkase\n- added better json loading support #127 @rahul-malik\n- added source `name` for customizing names of source directories and file #146 @yonaskolb\n- added folder reference source support via a new `type` property #151 @yonaskolb\n- added `ProjectSpec.options.developmentLanguage` #155 @yonaskolb\n\n#### Changed\n\n- updated to xcproj 1.2.0 #113 @yonaskolb\n- build settings from presets will be removed if they are provided in `xcconfig` files #77 @toshi0383\n- all files and groups are sorted by type and then alphabetically #144 @yonaskolb\n- target sources can now have an expanded form #119 @yonaskolb\n- empty build phases are now not generated #149 @yonaskolb\n- make UUIDs more deterministic #154 @yonaskolb\n\n#### Fixed\n\n- only add headers to frameworks and libraries #118 @ryohey\n- fixed localized files with the same name #126 @ryohey\n- fix intermediate sources #144 @yonaskolb\n- fix cyclical target dependencies not working #147 @yonaskolb\n- fix directory bundles not being added properly when referenced directly #148 @yonaskolb\n- made `mm`, `c` and `S` file be parsed as source files #120 @bkase @enmiller\n- fix the generation of localized variant groups if there is no `Base.lproj` #157 @ryohey\n- all localizations found are added to a projects known regions #157 @ryohey\n\n#### Internal\n\n- refactoring\n- more tests\n- added release scripts\n\n## 1.3.0\n\n#### Added\n\n- generate output files for Carthage copy-frameworks script #84 @mironal\n- added options.settingPreset to choose which setting presets get applied #100 @yonaskolb\n- added `link` option for target dependencies #109 @keith\n\n#### Changed\n\n- updated to xcproj 0.4.1 #85 @enmiller\n- don't copy base settings if config type has been left out #100 @yonaskolb\n- generate localised files under a single variant group #70 @ryohey\n- don't apply common project settings to configs with no type #100 @yonaskolb\n- config references in settings can now be partially matched and are case insensitive #111 @yonaskolb\n- other small internal changes @yonaskolb\n\n#### Fixed\n\n- embed Carthage frameworks for macOS #82 @toshi0383\n- fixed copying of watchOS app resources #96 @keith\n- automatically ignore more file types for a target's sources (entitlements, gpx, apns) #94 @keith\n- change make build to a PHONY task #98 @keith\n- allow copying of resource files from dependant targets #95 @keith\n- fixed library linking #93 @keith\n- fixed duplicate carthage file references #107 @yonaskolb\n- an error is now shown if you try and generate a target scheme and don't have debug and release builds @yonaskolb\n\n## 1.2.4\n\n#### Fixed\n\n- setting presets only apply `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: YES` to applications\n- don't add carthage dependency to `copy-frameworks` script if `embed: false`\n- sort group children on APFS\n\n#### Changed\n\n- update to xcproj 0.3.0\n\n## 1.2.3\n\n#### Fixed\n\n- Fixed wrong carthage directory name reference for macOS #74 @toshi0383\n- Removed unnecessary `carthage copy-frameworks` for macOS app target #76 @toshi0383\n- Added some missing default settings for framework targets. `SKIP_INSTALL: YES` fixes archiving\n- Filter out nulls from setting presets if specifying an empty string\n\n## 1.2.2\n\n#### Added\n\n- automatically set `TEST_TARGET_NAME` on UI test targets if one of the dependencies is an application target\n\n#### Fixed\n\n- set `DYLIB_INSTALL_NAME_BASE` to `@rpath` in framework target presets\n- fixed tvOS launch screen setting. `ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME` is now `LaunchImage` not `tvOS LaunchImage`\n\n## 1.2.0\n\n#### Added\n\n- `include` now supports a single string as well as a list\n- add support setting xcconfig files on a project with `configFiles` #64\n- add `fileGroups` to project spec for adding groups of files that aren't target source files #64\n- better output (more info, emoji, colors)\n- add `options.bundleIdPrefix` for autogenerating `PRODUCT_BUNDLE_IDENTIFIER` #67\n- add `:REPLACE` syntax when merging `include` #68\n- add `mint` installation support\n\n#### Fixed\n\n- fixed homebrew installation\n- fixed target xcconfig files not working via `configFiles` #64\n- look for `INFOPLIST_FILE` setting in project and xcconfig files before adding it automatically. It was just looking in target settings before #64\n- exit with error on failure\n\n## 1.1.0\n\n#### Changed\n\n- set project version to Xcode 9 - `LastUpgradeVersion` attribute to `0900`\n- set default Swift version to 4.0 - `SWIFT_VERSION` build setting to `4.0`\n\n### 1.0.1\n\n### Fixed\n\n- fixed incorrect default build script shell path\n- fixed install scripts\n\n## 1.0.0\n\n#### Added\n\n- Swift 4 support #52\n- Support for C and C++ files #48 by @antoniocasero\n- Xcode 9 default settings\n\n#### Fixed\n\n- fixed empty string in YAML not being parsed properly #50 by @antoniocasero\n\n#### Changed\n\n- updated to xcodeproj 0.1.2 #56\n- **BREAKING**: changed target definitions from list to map #54\n\n## 0.6.1\n\n#### Added\n\n- Ability to set PBXProject attributes #45\n\n#### Changed\n\n- Don't bother linking target frameworks for target dependencies.\n- Move code signing default settings from all iOS targets to iOS application targets, via Product + Platform setting preset files #46\n\n## 0.6.0\n\n#### Added\n\n- Allow a project spec to include other project specs #44\n\n#### Changed\n\n- Changed default spec path to `project.yml`\n- Changed default project directory to the current directory instead of the spec file's directory\n\n## 0.5.1\n\n#### Fixed\n\n- Fix embedded framework dependencies\n- Add `CODE_SIGN_IDENTITY[sdk=iphoneos*]` back to iOS targets\n- Fix build scripts with \"\" generating invalid projects #43\n\n## 0.5.0\n\n#### Added\n\n- Added multi platform targets #35\n- Automatically generate platform specific `FRAMEWORK_SEARCH_PATHS` for Carthage dependencies #38\n- Automatically find Info.plist and set `INFOPLIST_FILE` build setting if it doesn't exist on a target #40\n- Add options for controlling embedding of dependencies #37\n\n#### Fixed\n\n- Fixed localized files not being added to a target's resources\n\n#### Changed\n\n- Renamed Setting Presets to Setting Groups\n- Carthage group is now created under top level Frameworks group\n\n## 0.4.0\n\n##### Added\n\n- Homebrew support #16 by @pepibumur\n- Added `runOnlyWhenInstalling` to build scripts #32\n- Added `carthageBuildPath` option #34\n\n#### Fixed\n\n- Fixed installations of XcodeGen not applying build setting presets for configs, products, and platforms, due to missing resources\n\n#### Changed\n\n- Upgraded to <https://github.com/swift-xcode/xcodeproj> 0.1.1 #33\n\n## 0.3.0 - Extensions and Scheme Tests\n\n#### Added\n\n- Support for app extension dependencies, using the same `target: MyExtension` syntax #19\n- Added test targets to generated target schemes via `Target.scheme.testTargets` #21\n\n#### Changed\n\n- Updated xcodeproj to 0.0.9\n\n#### Fixed\n\n- Fixed watch and messages apps not copying carthage dependencies\n\n#### Breaking changes\n\n- Changed `Target.generatedSchemes` to `Target.scheme.configVariants`\n\n## 0.2.0 - Build scripts\n\n#### Added\n\n- Added Target build scripts with `Target.prebuildScripts` and `Target.postbuildScripts` #17\n- Support for absolute paths in target sources, run script files, and config files\n- Add validation for incorrect `Target.configFiles`\n\n#### Fixed\n\n- Fixed some project objects sometimes having duplicate ids\n\n## 0.1.0\n\nFirst official release\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to XcodeGen\n\nThere are various ways to contribute to XcodeGen, and all are welcome and appreciated!\n\n- [Bug Reports](#bug-reports)\n- [Feature Requests](#feature-requests)\n- [Answering Questions](#answering-questions)\n- [Example Specs](#example-specs)\n- [Documentation](#documentation)\n- [Code](#code)\n\n## Bug reports\nOpen issues about problems you may be encountering. When doing so please mention the version you're using `xcodegen --version`.\n\n## Feature Requests\nIf you have a good idea for a feature or enhancement open an issue. \n\n## Answering Questions\nLook through the open issues and answer any questions you can.\n\n## Example specs\nSubmit your open source xcodegen spec to the [Examples](Docs/Examples.md) page.\n\n## Documentation\nImprove the documentation in the [Docs](Docs) directory.\n\n## Code\nYou can submit your own code. This can be bug fixes or new features. If you're not sure what to work on check out the open [Issues](https://github.com/yonaskolb/XcodeGen/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc)\n\n### Getting started\nMake sure you have at least Xcode 9.2 installed.\n\nFirst clone the repo:\n```shell\ngit clone https://github.com/yonaskolb/XcodeGen.git\ncd XcodeGen\nmake\n```\n\nTo make editing easier you can generate the Xcode project using Swift PM:\n\n```shell\nswift package generate-xcodeproj\n```\n\n### Targets\n- `ProjectSpec`: Project spec definitions, loading, parsing and validation\n- `XcodeGen`: XcodeGen CLI\n- `XcodeGenKit`: All the logic for generation\n- `XcodeGenKitTests`: Generation tests\n\n### Tests\nBefore submitting your PR run the tests to make sure they pass. This can be done either in Xcode or by running `swift test`.\n\nAs part of the tests there is a [TestProject](/Tests/Fixtures/TestProject) fixture that will be generated, and if the generated xcode project has any diff in it the test will fail. If the diff is a valid change, commit it as part of your changes.\n\n> Note that sometimes having the `TestProject` open in Xcode will generate it's own diffs, so make sure to have it closed when running the tests.\n\nIf your change contains any new features or logic changes please add a unit test of your own to cover it. If it's a new feature, see if it can be integrated into the `TestProject` by adding any required files and then editing the [project spec](/Tests/Fixtures/TestProject/project.yml).\n\n### Submitting your PR\nPlease give a small summary of what has changed. Also add any github issues links (`Resolves #100`).\n\nOnce your PR is created, please add a changelog entry to [CHANGELOG.md](/CHANGELOG.md) along with the PR number.\n"
  },
  {
    "path": "Docs/Examples.md",
    "content": "# Examples\n\nThese are a bunch of real world examples of XcodeGen project specs. Feel free to add your own via PR.\n\n- [toshi0383/Bitrise-iOS](https://github.com/toshi0383/Bitrise-iOS/blob/master/project.yml)\n- [johndpope/swift-models](https://github.com/johndpope/swift-models/tree/stable/Inference)\n- [atelier-socle/AppRepositoryTemplate](https://github.com/atelier-socle/AppRepositoryTemplate/blob/master/project.yml)\n- [atelier-socle/FrameworkRepositoryTemplate](https://github.com/atelier-socle/FrameworkRepositoryTemplate/blob/master/project.yml)\n- [scelis/XcodeGen-TestStickers](https://github.com/scelis/XcodeGen-TestStickers/blob/master/project.yml)\n- [minvws/nl-covid19-notification-app-ios](https://github.com/minvws/nl-covid19-notification-app-ios/blob/master/project.yml)\n- [pvinis/react-native-xcodegen](https://github.com/pvinis/react-native-xcodegen/blob/master/templates)\n- [covid19cz/erouska-ios](https://github.com/covid19cz/erouska-ios/blob/develop/project.yml)\n- [markst/hotreloading-vscode-ios](https://github.com/markst/hotreloading-vscode-ios)\n- [MultiPlatformApp](https://github.com/hgq287/HGSwift/tree/master/Examples/MultiPlatformApp) - A modern **SwiftUI** multi-platform (iOS & macOS) example featuring a modular 3-tier architecture and shared logic.\n"
  },
  {
    "path": "Docs/FAQ.md",
    "content": "# Frequently asked questions\n- [Can I still check in my project](#can-i-still-check-in-my-project)\n- [Can I use CocoaPods](#can-i-use-cocoapods)\n- [Can I use Crashlytics](#can-i-use-crashlytics)\n- [How do I setup code signing](#how-do-i-setup-code-signing)\n\n## Can I still check in my project\nAbsolutely. You will get the most out of XcodeGen by adding your project to your `.gitignore`, as this way you avoid merge conflicts. But you can also check it in as a halfway step.\n>Note that you can run `xcodegen` as a step in your build process on CI.\n\n## What happens when I switch branches\nIf files were added or removed in the new checkout you will most likely need to run `xcodegen` again so that your project will reference all your files.\n\nIt's recommended to set up some [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) to automate the process:\n- run `xcodegen generate --use-cache` on the following hooks. This will make sure the project is up to date when checking out, merging and rebasing\n  - `post-checkout`\n  - `post-rewrite`\n  - `post-merge`\n- run `xcodegen cache` on `pre-commit`. This will make sure that when switching branches the cache will be updated in case you made local changes, or are ammending a commit that added a new file.\n \n## Can I use CocoaPods\nYes, you will just need to run `pod install` after the project is generated to integrate Cocoapods changes.\n\nIt's recommended to use a combination of `--use-cache` and the `postGenCommand` option which will only generate the project if required, and then only run `pod install` if the project has been regenerated.\n\n## Can I use Crashlytics\nYes, but you need to use a little trick when using CocoaPods. Add this script in your `Podfile`:\n\n```ruby:Podfile\n// Your dependencies\npod 'Firebase/Crashlytics'\n\nscript_phase name: 'Run Firebase Crashlytics',\n             shell_path: '/bin/sh',\n             script: '\"${PODS_ROOT}/FirebaseCrashlytics/run\"',\n             input_files: ['$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)']\n```\n\nThis script will be added after `[CP] Embed Pods Frameworks.`\n\n## How do I setup code signing\n\nAt the moment there are no special options for code signing in XcodeGen, and this must be configured via regular build settings. For code signing to work, you need to tell Xcode which development team to use. This requires setting the `DEVELOPMENT_TEAM` and possibly `CODE_SIGN_STYLE` build settings. See [Configuring build settings](Usage.md#configuring-build-settings) for how to do that\n"
  },
  {
    "path": "Docs/ProjectSpec.md",
    "content": "# Project Spec\n\nThe project spec can be written in either YAML or JSON. All the examples below use YAML.\n\n- [x] required property\n- [ ] optional property\n\nSome of the YAML examples below don't show all the required properties. For example not all target examples will have a platform or type, even though they are required.\n\nYou can also use environment variables in your configuration file, by using `${SOME_VARIABLE}` in a string.\n\n- [Project](#project)\n  - [Include](#include)\n  - [Options](#options)\n  - [GroupOrdering](#groupordering)\n  - [FileType](#filetype)\n  - [Breakpoints](#breakpoints)\n    - [Breakpoint Action](#breakpoint-action)\n  - [Configs](#configs)\n  - [Setting Groups](#setting-groups)\n- [Settings](#settings)\n- [Target](#target)\n  - [Product Type](#product-type)\n  - [Platform](#platform)\n  - [Supported Destinations](#supported-destinations)\n  - [Sources](#sources)\n    - [Target Source](#target-source)\n  - [Dependency](#dependency)\n  - [Config Files](#config-files)\n  - [Plist](#plist)\n  - [Build Tool Plug-ins](#build-tool-plug-ins)\n  - [Build Script](#build-script)\n  - [Build Rule](#build-rule)\n  - [Target Scheme](#target-scheme)\n  - [Legacy Target](#legacy-target)\n- [Aggregate Target](#aggregate-target)\n- [Target Template](#target-template)\n- [Scheme](#scheme)\n  - [Build](#build)\n  - [Common Build Action options](#common-build-action-options)\n  - [Execution Action](#execution-action)\n  - [Run Action](#run-action)\n  - [Test Action](#test-action)\n    - [Test Target](#test-target)\n    - [Other Parameters](#other-parameters)\n    - [Testable Target Reference](#testable-target-reference)\n  - [Archive Action](#archive-action)\n  - [Simulate Location](#simulate-location)\n  - [Scheme Management](#scheme-management)\n  - [Environment Variable](#environment-variable)\n  - [Test Plan](#test-plan)\n- [Scheme Template](#scheme-template)\n- [Swift Package](#swift-package)\n  - [Remote Package](#remote-package)\n  - [Local Package](#local-package)\n- [Project Reference](#project-reference)\n\n## Project\n\n- [x] **name**:  **String** - Name of the generated project\n- [ ] **include**:  **[Include](#include)** - One or more paths to other specs\n- [ ] **options**: **[Options](#options)** - Various options to override default behaviour\n- [ ] **attributes**: **[String: Any]** - The PBXProject attributes. This is for advanced use. If no value is set for `LastUpgradeCheck`, it will be defaulted to ``{\"LastUpgradeCheck\": \"XcodeVersion\"}`` with `xcodeVersion` being set by [Options](#options)`.xcodeVersion`\n- [ ] **breakpoints**: [Breakpoints](#breakpoints) - Add shared breakpoints to the generated project\n- [ ] **configs**: **[Configs](#configs)** - Project build configurations. Defaults to `Debug` and `Release` configs\n- [ ] **configFiles**: **[Config Files](#config-files)** - `.xcconfig` files per config\n- [ ] **settings**: **[Settings](#settings)** - Project specific settings. Default base and config type settings will be applied first before any settings defined here\n- [ ] **settingGroups**: **[Setting Groups](#setting-groups)** - Setting groups mapped by name\n- [ ] **targets**: **[String: [Target](#target)]** - The list of targets in the project mapped by name\n- [ ] **fileGroups**: **[String]** - A list of paths to add to the root of the project. These aren't files that will be included in your targets, but that you'd like to include in the project hierarchy anyway. For example a folder of xcconfig files that aren't already added by any target sources, or a Readme file.\n- [ ] **schemes**: **[Scheme](#scheme)** - A list of schemes by name. This allows more control over what is found in [Target Scheme](#target-scheme)\n- [ ] **schemeTemplates**: **[String: [Scheme Template](#scheme-template)]** - a list of schemes that can be used as templates for actual schemes which reference them via a `template` property. They can be used to extract common scheme settings. Works great in combination with `include`.\n- [ ] **targetTemplates**: **[String: [Target Template](#target-template)]** - a list of targets that can be used as templates for actual targets which reference them via a `template` property. They can be used to extract common target settings. Works great in combination with `include`.\n- [ ] **packages**: **[String: [Swift Package](#swift-package)]** - a map of Swift packages by name.\n- [ ] **projectReferences**: **[String: [Project Reference](#project-reference)]** - a map of project references by name\n\n### Include\n\nOne or more specs can be included in the project spec. This can be used to split your project spec into multiple files, for easier structuring or sharing between multiple specs. Included specs can also include other specs and so on.\n\nInclude can either be a list of includes or a single include. They will be merged in order and then the current spec will be merged on top.\n\nAn include can be provided via a string (the path) or an object of the form:\n\n**Include Object**\n\n- [x] **path**: **String** - The path to the included file.\n- [ ] **relativePaths**: **Bool** - Dictates whether the included spec specifies paths relative to itself (the default) or the root spec file.\n- [ ] **enable**: **Bool** - Dictates whether the specified spec should be included or not. You can also specify it by environment variable.\n```yaml\ninclude:\n  - includedFile.yml\n  - path: path/to/includedFile.yml\n    relativePaths: false\n    enable: ${INCLUDE_ADDITIONAL_YAML}\n```\n\nBy default specs are merged additively. That is for every value:\n\n- if existing value and new value are both dictionaries merge them and continue down the hierarchy\n- if existing value and new value are both an array then add the new value to the end of the array\n- otherwise replace the existing value with the new value\n\nThis merging behaviour can be overridden on a value basis. If you wish to replace a whole value (set a new dictionary or new array instead of merging them) then just affix `:REPLACE` to the key\n\n\n```yaml\ninclude:\n  - base.yml\nname: CustomSpec\ntargets:\n  MyTarget: # target lives in base.yml\n    sources:REPLACE:\n      - my_new_sources\n```\n\nNote that target names can also be changed by adding a `name` property to a target.\n\n### Options\n\n- [ ] **minimumXcodeGenVersion**: **String** - The minimum version of XcodeGen required.\n- [ ] **carthageBuildPath**: **String** - The path to the carthage build directory. Defaults to `Carthage/Build`. This is used when specifying target carthage dependencies\n- [ ] **carthageExecutablePath**: **String** - The path to the carthage executable. Defaults to `carthage`. You can specify when you use custom built or locally installed Carthage using [Mint](https://github.com/yonaskolb/Mint), for example.\n- [ ] **createIntermediateGroups**: **Bool** - If this is specified and set to `true`, then intermediate groups will be created for every path component between the folder containing the source and next existing group it finds or the base path. For example, when enabled if a source path is specified as `Vendor/Foo/Hello.swift`, the group `Vendor` will created as a parent of the `Foo` group. This can be overridden in a specific [Target source](#target-source)\n- [ ] **bundleIdPrefix**: **String** - If this is specified then any target that doesn't have an `PRODUCT_BUNDLE_IDENTIFIER` (via all levels of build settings) will get an autogenerated one by combining `bundleIdPrefix` and the target name: `bundleIdPrefix.name`. The target name will be stripped of all characters that aren't alphanumerics, hyphens, or periods. Underscores will be replaced with hyphens.\n- [ ] **settingPresets**: **String** - This controls the settings that are automatically applied to the project and its targets. These are the same build settings that Xcode would add when creating a new project. Project settings are applied by config type. Target settings are applied by the product type and platform. By default this is set to `all`\n\t- `all`: project and target settings\n\t- `project`: only project settings\n\t- `targets`: only target settings\n\t- `none`: no settings are automatically applied\n- [ ] **developmentLanguage**: **String** - Sets the development language of the project. Defaults to `en`\n- [ ] **usesTabs**: **Bool** - If this is specified, the Xcode project will override the user's setting determining whether or not tabs or spaces should be used in the project.\n- [ ] **indentWidth**: **Int** - If this is specified, the Xcode project will override the user's setting for indent width in number of spaces.\n- [ ] **tabWidth**: **Int** - If this is specified, the Xcode project will override the user's setting for indent width in number of spaces.\n- [ ] **xcodeVersion**: **String** - The version of Xcode. This defaults to the latest version periodically. You can specify it in the format `0910` or `9.1`\n- [ ] **projectFormat**: **String** - The version of Xcode project. By default this is set to `xcode16_0`\n  - `xcode16_3`: Xcode 16.3\n  - `xcode16_0`: Xcode 16.0\n  - `xcode15_3`: Xcode 15.3\n  - `xcode15_0`: Xcode 15.0\n  - `xcode14_0`: Xcode 14.0\n\n- [ ] **deploymentTarget**: **[[Platform](#platform): String]** - A project wide deployment target can be specified for each platform otherwise the default SDK version in Xcode will be used. This will be overridden by any custom build settings that set the deployment target eg `IPHONEOS_DEPLOYMENT_TARGET`. Target specific deployment targets can also be set with [Target](#target).deploymentTarget.\n- [ ] **disabledValidations**: **[String]** - A list of validations that can be disabled if they're too strict for your use case. By default this is set to an empty array. Currently these are the available options:\n  - `missingConfigs`: Disable errors for configurations in yaml files that don't exist in the project itself. This can be useful if you include the same yaml file in different projects\n  - `missingConfigFiles`: Disable checking for the existence of configuration files. This can be useful for generating a project in a context where config files are not available.\n  - `missingTestPlans`: Disable checking if test plan paths exist. This can be useful if your test plans haven't been created yet.\n- [ ] **defaultConfig**: **String** - The default configuration for command line builds from Xcode. If the configuration provided here doesn't match one in your [configs](#configs) key, XcodeGen will fail. If you don't set this, the first configuration alphabetically will be chosen.\n- [ ] **groupSortPosition**: **String** - Where groups are sorted in relation to other files. Either:\n  - `none` - sorted alphabetically with all the other files\n  - `top` - at the top, before files\n  - `bottom` (default) - at the bottom, after other files\n- [ ] **groupOrdering**: **[[GroupOrdering]](#groupOrdering)** - An order of groups.\n- [ ] **transitivelyLinkDependencies**: **Bool** - If this is `true` then targets will link to the dependencies of their target dependencies. If a target should embed its dependencies, such as application and test bundles, it will embed these transitive dependencies as well. Some complex setups might want to set this to `false` and explicitly specify dependencies at every level. Targets can override this with [Target](#target).transitivelyLinkDependencies. Defaults to `false`.\n- [ ] **generateEmptyDirectories**: **Bool** - If this is `true` then empty directories will be added to project too else will be missed. Defaults to `false`.\n- [ ] **findCarthageFrameworks**: **Bool** - When this is set to `true`, all the individual frameworks for Carthage framework dependencies will automatically be found. This property can be overridden individually for each carthage dependency - for more details see See **findFrameworks** in the [Dependency](#dependency) section. Defaults to `false`.\n- [ ] **localPackagesGroup**: **String** - The group name that local packages are put into. This defaults to `Packages`. Use `\"\"` to specify the project root.\n- [ ] **fileTypes**: **[String: [FileType](#filetype)]** - A list of default file options for specific file extensions across the project. Values in [Sources](#sources) will overwrite these settings.\n- [ ] **preGenCommand**: **String** - A bash command to run before the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like generating resources files before the project is regenerated.\n- [ ] **postGenCommand**: **String** - A bash command to run after the project has been generated. If the project isn't generated due to no changes when using the cache then this won't run. This is useful for running things like `pod install` only if the project is actually regenerated.\n- [ ] **useBaseInternationalization**: **Bool** If this is `false` and your project does not include resources located in a **Base.lproj** directory then `Base` will not be included in the projects 'known regions'. The default value is `true`. \n- [ ] **schemePathPrefix**: **String** - A path prefix for relative paths in schemes, such as StoreKitConfiguration. The default is `\"../../\"`, which is suitable for non-workspace projects. For use in workspaces, use `\"../\"`.\n- [ ] **defaultSourceDirectoryType**: **String** - When a [Target source](#target-source) doesn't specify a type and is a directory, this is the type that will be used. If nothing is specified for either then `group` will be used.\n  - `group` (default)\n  - `folder`\n  - `syncedFolder`: Can be used starting from **projectFormat** `xcode16_0`\n\n```yaml\noptions:\n  deploymentTarget:\n    watchOS: \"2.0\"\n    tvOS: \"10.0\"\n  postGenCommand: pod install\n```\n\n### GroupOrdering\n\nDescribe an order of groups. Available parameters:\n\n- [ ] **pattern**: **String** - A group name pattern. Can be just a single string and also can be a regex pattern. Optional option, if you don't set it, it will pattern for the main group, i.e. the project.\n- [ ] **order**: **[String]** - An order of groups.\n\n```yaml\noptions:\n  groupOrdering: \n    - order: [Sources, Resources, Tests, Support files, Configurations]\n    - pattern: '^.*Screen$'\n      order: [View, Presenter, Interactor, Entities, Assembly]\n```\n\nIn this example, we set up the order of two groups. First one is the main group, i.e. the project, note that in this case, we shouldn't set `pattern` option and the second group order is for groups whose names ends with `Screen`.\n\n### FileType\nDefault settings for file extensions. See [Sources](#sources) for more documentation on properties. If you overwrite an extension that XcodeGen already provides by default, you will need to provide all the settings.\n\n- [ ] **file**: **Bool** - Whether this extension should be treated like a file. Defaults to true.\n- [ ] **buildPhase**: **String** - The default build phase.\n- [ ] **attributes**: **[String]** - Additional settings attributes that will be applied to any build files.\n- [ ] **resourceTags**: **[String]** - On Demand Resource Tags that will be applied to any resources. This also adds to the project attribute's knownAssetTags.\n- [ ] **compilerFlags**: **[String]** - A list of compiler flags to add.\n\n### Breakpoints\n\n- [x] **type**: **String** - Breakpoint type\n    - `File`: file breakpoint\n    - `Exception`: exception breakpoint\n    - `SwiftError`: swift error breakpoint\n    - `OpenGLError`: OpenGL breakpoint\n    - `Symbolic`: symbolic breakpoint\n    - `IDEConstraintError`: IDE constraint breakpoint\n    - `IDETestFailure`: IDE test failure breakpoint\n    - `RuntimeIssue`: Runtime issue breakpoint\n- [ ] **enabled**: **Bool** - Indicates whether it should be active. Default to `true`\n- [ ] **ignoreCount**: **Int** - Indicates how many times it should be ignored before stopping, Default to `0`\n- [ ] **continueAfterRunningActions**: **Bool** - Indicates if should automatically continue after evaluating actions, Default to `false`\n- [ ] **path**: **String** - Breakpoint file path (only required by file breakpoints)\n- [ ] **line**: **Int** - Breakpoint line (only required by file breakpoints)\n- [ ] **symbol**: **String** - Breakpoint symbol (only used by symbolic breakpoints)\n- [ ] **module**: **String** - Breakpoint module (only used by symbolic breakpoints)\n- [ ] **scope**: **String** - Breakpoint scope (only used by exception breakpoints)\n    - `All`\n    - `Objective-C` (default)\n    - `C++`\n- [ ] **stopOnStyle**: **String** - Indicates if should stop on style (only used by exception breakpoints)\n    -`throw` (default)\n    -`catch`\n- [ ] **condition**: **String** - Breakpoint condition\n- [ ] **actions**: **[[Breakpoint Action](#breakpoint-action)]** - breakpoint actions\n\n```yaml\nbreakpoints:\n  - type: ExceptionBreakpoint\n    enabled: true\n    ignoreCount: 0\n    continueAfterRunningActions: false\n```\n\n#### Breakpoint Action\n\n- [x] **type**: **String** - Breakpoint action type\n    - `DebuggerCommand`: execute debugger command\n    - `Log`: log message\n    - `ShellCommand`: execute shell command\n    - `GraphicsTrace`: capture GPU frame\n    - `AppleScript`: execute AppleScript\n    - `Sound`: play sound\n- [ ] **command**: **String** - Debugger command (only used by debugger command breakpoint action)\n- [ ] **message**: **String** - Log message (only used log message breakpoint action)\n- [ ] **conveyanceType**: **String** - Conveyance type (only used by log message breakpoint action)\n    - `console`: log message to console (default)\n    - `speak`: speak message\n- [ ] **path**: **String** - Shell command file path (only used by shell command breakpoint action)\n- [ ] **arguments**: **String** - Shell command arguments (only used by shell command breakpoint action)\n- [ ] **waitUntilDone**: **Bool** - Indicates whether it should wait until done (only used by shell command breakpoint action). Default to `false`\n- [ ] **script**: **String** - AppleScript (only used by AppleScript breakpoint action)\n- [ ] **sound**: **String** - Sound name (only used by sound breakpoint action)\n    - `Basso` (default)\n    - `Blow`\n    - `Bottle`\n    - `Frog`\n    - `Funk`\n    - `Glass`\n    - `Hero`\n    - `Morse`\n    - `Ping`\n    - `Pop`\n    - `Purr`\n    - `Sosumi`\n    - `Submarine`\n    - `Tink`\n\n```yaml\nactions:\n  - type: Sound\n    sound: Blow\n```\n\n### Configs\n\nEach config maps to a build type of either `debug` or `release` which will then apply default `Build Settings` to the project. Any value other than `debug` or `release` (for example `none`), will mean no default `Build Settings` will be applied to the project.\n\n```yaml\nconfigs:\n  Debug: debug\n  Beta: release\n  AppStore: release\n```\nIf no configs are specified, default `Debug` and `Release` configs will be created automatically.\n\n### Setting Groups\n\nSetting groups are named groups of `Build Settings` that can be reused elsewhere. Each preset is a [Settings](#settings) schema, so can include other `groups`  or define settings by `configs`.\n\n```yaml\nsettingGroups:\n  preset_generic:\n    CUSTOM_SETTING: value_custom\n  preset_debug:\n    BUILD_SETTING: value_debug\n  preset_release:\n    base:\n      BUILD_SETTING: value_release\n  preset_all:\n    groups:\n      - preset_generic\n    configs:\n      debug:\n        groups:\n          - preset_debug\n      release:\n        groups:\n          - preset_release\n\ntargets:\n  Application:\n    settings:\n      groups: \n        - preset_all\n```\n\n## Settings\n\nSettings correspond to `Build Settings` tab in Xcode. To display Setting Names instead of Setting Titles, select `Editor -> Show Setting Names` in Xcode.\n\nSettings can either be a simple map of `Build Settings` `[String:String]`, or can be more advanced with the following properties:\n\n- [ ] **groups**: **[String]** - List of [Setting Groups](#setting-groups) to include and merge\n- [ ] **configs**: **[String:[Settings](#settings)]** - Mapping of config name to a settings spec. These settings will only be applied for that config. Each key will be matched to any configs that contain the key and is case insensitive. So if you had `Staging Debug` and `Staging Release`, you could apply settings to both of them using `staging`. However if a config name is an exact match to a config it won't be applied to any others. eg `Release` will be applied to config `Release` but not `Staging Release`\n- [ ] **base**: **[String:String]** - Used to specify default settings that apply to any config\n\n```yaml\nsettings:\n  GENERATE_INFOPLIST_FILE: NO\n  CODE_SIGNING_ALLOWED: NO\n  WRAPPER_EXTENSION: bundle\n```\n\nDon't mix simple maps with `groups`, `base` and `configs`.\nIf `groups`, `base`, `configs` are used then simple maps is silently ignored.\n\nIn this example, `CURRENT_PROJECT_VERSION` will be set, but `MARKETING_VERSION` will be ignored:\n```yaml\nsettings:\n  MARKETING_VERSION: 100.0.0\n  base:\n    CURRENT_PROJECT_VERSION: 100.0\n```\n\n```yaml\nsettings:\n  base:\n    PRODUCT_NAME: XcodeGenProduct\n  configs:\n    debug:\n      CODE_SIGN_IDENTITY: iPhone Developer\n      PRODUCT_BUNDLE_IDENTIFIER: com.tomtom.debug_app\n    release:\n      CODE_SIGN_IDENTITY: iPhone Distribution\n      PRODUCT_BUNDLE_IDENTIFIER: com.tomtom.app\n      PROVISIONING_PROFILE_SPECIFIER: \"Xcodegen Release\"\n  groups:\n    - my_settings\n```\n\nSettings are merged in the following order: `groups`, `base`, `configs` (simple maps are ignored).\n\n## Target\n\n- [x] **type**: **[Product Type](#product-type)** - Product type of the target\n- [x] **platform**: **[Platform](#platform)** - Platform of the target\n- [ ] **supportedDestinations**: **[[Supported Destinations](#supported-destinations)]** - List of supported platform destinations for the target.\n- [ ] **deploymentTarget**: **String** - The deployment target (eg `9.2`). If this is not specified the value from the project set in [Options](#options)`.deploymentTarget.PLATFORM` will be used.\n- [ ] **sources**: **[Sources](#sources)** - Source directories of the target\n- [ ] **configFiles**: **[Config Files](#config-files)** - `.xcconfig` files per config\n- [ ] **settings**: **[Settings](#settings)** - Target specific build settings. Default platform and product type settings will be applied first before any custom settings defined here. Other context dependant settings will be set automatically as well:\n\t- `INFOPLIST_FILE`: If it doesn't exist your sources will be searched for `Info.plist` files and the first one found will be used for this setting\n\t- `FRAMEWORK_SEARCH_PATHS`: If carthage framework dependencies are used, the platform build path will be added to this setting\n\t- `OTHER_LDFLAGS`:  See `requiresObjCLinking` below\n  - `TEST_TARGET_NAME`: for ui tests that target an application\n  - `TEST_HOST`: for unit tests that target an application\n- [ ] **dependencies**: **[[Dependency](#dependency)]** - Dependencies for the target\n- [ ] **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, unless `INFOPLIST_FILE` is already defined in  **settings** for this configuration. The following properties are generated automatically if appropriate, the rest will have to be provided.\n  - `CFBundleIdentifier`\n  - `CFBundleInfoDictionaryVersion`\n  - `CFBundleExecutable` **Not generated for targets of type bundle**\n  - `CFBundleName`\n  - `CFBundleDevelopmentRegion`\n  - `CFBundleShortVersionString`\n  - `CFBundleVersion`\n  - `CFBundlePackageType`\n- [ ] **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\n- [ ] **templates**: **[String]** - A list of [Target Templates](#target-template) referenced by name that will be merged with the target in order. Any instances of `${target_name}` within these templates will be replaced with the target name.\n- [ ] **templateAttributes**: **[String: String]** - A list of attributes where each instance of `${attributeName}` within the templates listed in `templates` will be replaced with the value specified.\n- [ ] **transitivelyLinkDependencies**: **Bool** - If this is not specified the value from the project set in [Options](#options)`.transitivelyLinkDependencies` will be used.\n- [ ] **directlyEmbedCarthageDependencies**: **Bool** - If this is `true` Carthage framework dependencies will be embedded using an `Embed Frameworks` build phase instead of the `copy-frameworks` script. Defaults to `true` for all targets except iOS/tvOS/watchOS Applications.\n- [ ] **requiresObjCLinking**: **Bool** - If this is `true` any targets that link to this target will have `-ObjC` added to their `OTHER_LDFLAGS`. This is required if a static library has any categories or extensions on Objective-C code. See [this guide](https://pewpewthespells.com/blog/objc_linker_flags.html#objc) for more details. Defaults to `true` if `type` is `library.static`. If you are 100% sure you don't have categories or extensions on Objective-C code (pure Swift with no use of Foundation/UIKit) you can set this to `false`, otherwise it's best to leave it alone.\n- [ ] **onlyCopyFilesOnInstall**: **Bool** – If this is `true`, the `Embed Frameworks` and `Embed App Extensions` (if available) build phases will have the \"Copy only when installing\" chekbox checked. Defaults to `false`.\n- [ ] **buildToolPlugins**: **[[Build Tool Plug-ins](#build-tool-plug-ins)]** - Commands for the build system that run automatically *during* the build.\n- [ ] **preBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *before* any other build phases\n- [ ] **postCompileScripts**: **[[Build Script](#build-script)]** - Build scripts that run after the Compile Sources phase\n- [ ] **postBuildScripts**: **[[Build Script](#build-script)]** - Build scripts that run *after* any other build phases\n- [ ] **buildRules**: **[[Build Rule](#build-rule)]** - Custom build rules\n- [ ] **scheme**: **[Target Scheme](#target-scheme)** - Generated scheme with tests or config variants\n- [ ] **legacy**: **[Legacy Target](#legacy-target)** - When present, opt-in to make an Xcode \"External Build System\" legacy target instead.\n- [ ] **attributes**: **[String: Any]** - This sets values in the project `TargetAttributes`. It is merged with `attributes` from the project and anything automatically added by XcodeGen, with any duplicate values being override by values specified here. This is for advanced use only. Properties that are already set include:\n\t- `DevelopmentTeam`: if all configurations have the same `DEVELOPMENT_TEAM` setting\n\t- `ProvisioningStyle`: if all configurations have the same `CODE_SIGN_STYLE` setting\n\t- `TestTargetID`: if all configurations have the same `TEST_TARGET_NAME` setting\n- [ ] **putResourcesBeforeSourcesBuildPhase**: **Bool** - If this is `true` the `Copy Resources` step will be placed before the `Compile Sources` build step.\n\n### Product Type\n\nThis will provide default build settings for a certain product type. It can be any of the following:\n\n- `application`\n- `application.on-demand-install-capable`\n- `application.messages`\n- `application.watchapp`\n- `application.watchapp2`\n- `application.watchapp2-container`\n- `app-extension`\n- `app-extension.intents-service`\n- `app-extension.messages`\n- `app-extension.messages-sticker-pack`\n- `bundle`\n- `bundle.ocunit-test`\n- `bundle.ui-testing`\n- `bundle.unit-test`\n- `extensionkit-extension`\n- `framework`\n- `instruments-package`\n- `library.dynamic`\n- `library.static`\n- `framework.static`\n- `tool`\n- `tv-app-extension`\n- `watchkit-extension`\n- `watchkit2-extension`\n- `xcode-extension`\n- `driver-extension`\n- `system-extension`\n- `xpc-service`\n- ``\"\"`` (used for legacy targets)\n\n### Platform\n\nThis will provide default build settings for a certain platform. It can be any of the following:\n\n- `auto` (available only when we use `supportedDestinations`)\n- `iOS`\n- `tvOS`\n- `macOS`\n- `watchOS`\n- `visionOS` (`visionOS` doesn't support Carthage usage)\n\nNote that when we use supported destinations with Xcode 14+ we can avoid the definition of platform that fallbacks to the `auto` value.\n\n**Multi Platform targets**\n\nYou can also specify an array of platforms. This will generate a target for each platform.\nIf `deploymentTarget` is specified for a multi platform target, it can have different values per platform similar to how it's defined in [Options](#options). See below for an example.\nIf you reference the string `${platform}` anywhere within the target spec, that will be replaced with the platform.\n\nThe generated targets by default will have a suffix of `_${platform}` applied, you can change this by specifying a `platformSuffix` or `platformPrefix`.\n\nIf no `PRODUCT_NAME` build setting is specified for a target, this will be set to the target name, so that this target can be imported under a single name.\n\n```yaml\ntargets:\n  MyFramework:\n    sources: MyFramework\n    platform: [iOS, tvOS]\n    deploymentTarget:\n      iOS: 9.0\n      tvOS: 10.0\n    type: framework\n    settings:\n      base:\n        INFOPLIST_FILE: MyApp/Info.plist\n        PRODUCT_BUNDLE_IDENTIFIER: com.myapp\n        MY_SETTING: platform ${platform}\n      groups:\n        - ${platform}\n```\n\nThe above will generate 2 targets named `MyFramework_iOS` and `MyFramework_tvOS`, with all the relevant platform build settings. They will both have a `PRODUCT_NAME` of `MyFramework`\n\n### Supported Destinations\n\nThis will provide a mix of default build settings for the chosen platform destinations. It can be any of the following:\n\n- `iOS`\n- `tvOS`\n- `macOS`\n- `macCatalyst`\n- `visionOS`\n- `watchOS`\n\n```yaml\ntargets:\n  MyFramework:\n    type: framework\n    supportedDestinations: [iOS, tvOS]\n    deploymentTarget:\n      iOS: 9.0\n      tvOS: 10.0\n    sources:\n      - path: MySources\n        inferDestinationFiltersByPath: true\n      - path: OtherSources\n        destinationFilters: [iOS]\n```\n\nNote that the definition of supported destinations can be applied to almost every type of bundle making everything more easy to manage (app targets, unit tests, UI tests etc). App targets currently do not support the watchOS destination. Create a separate target using `platform` for watchOS apps. See Apple's [Configuring a multiplatform app](https://developer.apple.com/documentation/xcode/configuring-a-multiplatform-app-target) for details.\n\n### Sources\n\nSpecifies the source directories for a target. This can either be a single source or a list of sources. Applicable source files, resources, headers, and `.lproj` files will be parsed appropriately.\n\nA source can be provided via a string (the path) or an object of the form:\n\n#### Target Source\n\n- [x] **path**: **String** - The path to the source file or directory.\n- [ ] **name**: **String** - Can be used to override the name of the source file or directory. By default the last component of the path is used for the name\n- [ ] **group**: **String** - Can be used to override the parent group of the source file or directory. By default a group is created at the root with the name of this source file or directory or intermediate groups are created if `createIntermediateGroups` is set to `true`. Multiple groups can be created by separating each one using a `/`. If multiple target sources share the same `group`, they will be put together in the same parent group.\n- [ ] **compilerFlags**: **[String]** or **String** - A list of compilerFlags to add to files under this specific path provided as a list or a space delimited string. Defaults to empty.\n- [ ] **excludes**: **[String]** - A list of [global patterns](https://en.wikipedia.org/wiki/Glob_(programming)) representing the files to exclude. These rules are relative to `path` and _not the directory where `project.yml` resides_. XcodeGen uses Bash 4's Glob behaviors where globstar (**) is enabled.\n- [ ] **includes**: **[String]** - A list of global patterns in the same format as `excludes` representing the files to include. These rules are relative to `path` and _not the directory where `project.yml` resides_. If **excludes** is present and file conflicts with **includes**, **excludes** will override the **includes** behavior.\n- [ ] **explicitFolders**: **[String]** - Only valid for `syncedFolder` type. A list of global patterns in the same format as `excludes` to child folders that Xcode should treat as folder references.\n- [ ] **destinationFilters**: **[[Supported Destinations](#supported-destinations)]** - List of supported platform destinations the files should filter to. Defaults to all supported destinations.\n- [ ] **inferDestinationFiltersByPath**: **Bool** - This is a convenience filter that helps you to filter the files if their paths match these patterns `**/<supportedDestination>/*` or `*_<supportedDestination>.swift`. Note, if you use `destinationFilters` this flag will be ignored.\n- [ ] **createIntermediateGroups**: **Bool** - This overrides the value in [Options](#options).\n- [ ] **optional**: **Bool** - Disable missing path check. Defaults to false.\n- [ ] **buildPhase**: **String** - This manually sets the build phase this file or files in this directory will be added to, otherwise XcodeGen will guess based on the file extension. Note that `Info.plist` files will never be added to any build phases, no matter what this setting is. Possible values are:\n\t- `sources` - Compile Sources phase\n\t- `resources` - Copy Bundle Resources phase\n\t- `headers` - Headers Phase\n\t- `copyFiles` - Copy Files Phase. Must be specified as an object with the following fields:\n\t\t- [x] **destination**: **String** - Destination of the Copy Files phase. This can be one of the following values:\n\t\t\t- `absolutePath`\n\t\t\t- `productsDirectory`\n\t\t\t- `wrapper`\n\t\t\t- `executables`\n\t\t\t- `resources`\n\t\t\t- `javaResources`\n\t\t\t- `frameworks`\n\t\t\t- `sharedFrameworks`\n\t\t\t- `sharedSupport`\n\t\t\t- `plugins`\n\t\t- [ ] **subpath**: **String** - The path inside of the destination to copy the files.\n\t- `none` - Will not be added to any build phases\n- [ ] **type**: **String**: This can be one of the following values\n\t- `file`: a file reference with a parent group will be created (Default for files or directories with extensions)\n\t- `group`: a group with all it's containing files. (Default for directories without extensions)\n\t- `folder`: a folder reference.\n\t- `syncedFolder`: Xcode 16's synchronized folders, also knows as buildable folders\n- [ ] **headerVisibility**: **String** - The visibility of any headers. This defaults to `public`, but can be either:\n\t- `public`\n\t- `private`\n\t- `project`\n- [ ] **attributes**: **[String]** - Additional settings attributes that will be applied to any build files.\n- [ ] **resourceTags**: **[String]** - On Demand Resource Tags that will be applied to any resources. This also adds to the project attribute's knownAssetTags\n\n```yaml\ntargets:\n  MyTarget:\n    sources: MyTargetSource\n  MyOtherTarget:\n    supportedDestinations: [iOS, tvOS]\n    sources:\n      - MyOtherTargetSource1\n      - path: MyOtherTargetSource2\n        inferDestinationFiltersByPath: true\n        name: MyNewName\n        excludes:\n          - \"ios/*.[mh]\"\n          - \"configs/server[0-2].json\"\n          - \"*-Private.h\"\n          - \"**/*.md\" # excludes all files with the .md extension\n          - \"ios/**/*Tests.[hm]\" # excludes all files with an h or m extension within the ios directory.\n        compilerFlags:\n          - \"-Werror\"\n          - \"-Wextra\"\n      - path: MyOtherTargetSource3\n        destinationFilters: [iOS]\n        compilerFlags: \"-Werror -Wextra\"\n      - path: ModuleMaps\n        buildPhase:\n          copyFiles:\n            destination: productsDirectory\n            subpath: include/$(PRODUCT_NAME)\n      - path: Resources\n        type: folder\n      - path: Path/To/File.asset\n        resourceTags: [tag1, tag2]\n```\n\n### Dependency\n\nA dependency can be one of a 6 types:\n\n- `target: name` - links to another target. If you are using project references you can specify a target within another project by using `ProjectName/TargetName` for the name\n- `framework: path` - links to a framework or XCFramework\n- `carthage: name` - helper for linking to a Carthage framework (not XCFramework)\n- `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)\n- `package: name` - links to a Swift Package. The name must match the name of a package defined in the top level `packages`\n- `bundle: name` - adds the pre-built bundle for the supplied name to the copy resources build phase. This is useful when a dependency exists on a static library target that has an associated bundle target, both existing in a separate project. Only usable in target types which can copy resources.\n\n**Linking options**:\n\n- [ ] **embed**: **Bool** - Whether to embed the dependency. Defaults to true for application target and false for non application targets.\n- [ ] **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).\n- [ ] **codeSign**: **Bool** - Whether the `codeSignOnCopy` setting is applied when embedding framework. Defaults to true.\n- [ ] **removeHeaders**: **Bool** - Whether the `removeHeadersOnCopy` setting is applied when embedding the framework. Defaults to true.\n- [ ] **weak**: **Bool** - Whether the `Weak` setting is applied when linking the framework. Defaults to false.\n- [ ] **platformFilter**: **String** - This field is specific to Mac Catalyst. It corresponds to the \"Platforms\" dropdown in the Frameworks & Libraries section of Target settings in Xcode. Available options are: **iOS**, **macOS** and **all**. Defaults is **all**.\n- [ ] **destinationFilters**: **[[Supported Destinations](#supported-destinations)]** - List of supported platform destinations this dependency should filter to. Defaults to all supported destinations.\n- [ ] **platforms**: **[[Platform](#platform)]** - List of platforms this dependency should apply to. Defaults to all applicable platforms.\n- **copy** - Copy Files Phase for this dependency. This only applies when `embed` is true. Must be specified as an object with the following fields:\n    - [x] **destination**: **String** - Destination of the Copy Files phase. This can be one of the following values:\n        - `absolutePath`\n        - `productsDirectory`\n        - `wrapper`\n        - `executables`\n        - `resources`\n        - `javaResources`\n        - `frameworks`\n        - `sharedFrameworks`\n        - `sharedSupport`\n        - `plugins`\n    - [ ] **subpath**: **String** - The path inside of the destination to copy the files.\n\n**Implicit Framework options**:\n\nThis only applies to `framework` dependencies. Implicit framework dependencies are useful in Xcode Workspaces which have multiple `.xcodeproj` that are not embedded within each other yet have a dependency on a framework built in an adjacent `.xcodeproj`.  By having `Find Implicit Dependencies` checked within your scheme `Build Options` Xcode can link built frameworks in `BUILT_PRODUCTS_DIR`.\n\n- [ ] **implicit**: **Bool** - Whether the framework is an implicit dependency. Defaults to `false` .\n\n**Carthage Dependency**\n\n- [ ] **findFrameworks**: **Bool** - Whether to find Carthage frameworks automatically. Defaults to `true` .\n- [ ] **linkType**: **String** - Dependency link type. This value should be `dynamic` or `static`. Default value is `dynamic` .\n\nCarthage frameworks are expected to be in `CARTHAGE_BUILD_PATH/PLATFORM/FRAMEWORK.framework` where:\n\n - `CARTHAGE_BUILD_PATH` = `options.carthageBuildPath` or `Carthage/Build` by default\n - `PLATFORM` = the target's platform\n - `FRAMEWORK` = the specified name.\n\n To link an XCFramework produced by Carthage (in `CARTHAGE_BUILD_PATH/FRAMEWORK.xcframework`), use a normal `framework:`\n dependency. The helper logic provided by this dependency type is not necessary.\n\nAll the individual frameworks of a Carthage dependency can be automatically found via `findFrameworks: true`. This overrides the value of [Options](#options).findCarthageFrameworks. Otherwise each one will have to be listed individually.\nXcodegen uses `.version` files generated by Carthage in order for this framework lookup to work, so the Carthage dependencies will need to have already been built at the time XcodeGen is run.\n\nIf any applications contain carthage dependencies within itself or any dependent targets, a carthage copy files script is automatically added to the application containing all the relevant frameworks. A `FRAMEWORK_SEARCH_PATHS` setting is also automatically added\n\nCarthage officially supports static frameworks. In this case, frameworks are expected to be in `CARTHAGE_BUILD_PATH/PLATFORM/Static/FRAMEWORK.framework`.\nYou can specify `linkType` to `static` to integrate static ones.\n\n```yaml\nprojectReferences:\n  FooLib:\n    path: path/to/FooLib.xcodeproj\ntargets:\n  MyTarget:\n    supportedDestinations: [iOS, tvOS]\n    dependencies:\n      - target: MyFramework\n        destinationFilters: [iOS]\n      - target: FooLib/FooTarget\n      - framework: path/to/framework.framework\n        destinationFilters: [tvOS]\n      - carthage: Result\n        findFrameworks: false\n        linkType: static\n        destinationFilters: [iOS]\n      - sdk: Contacts.framework\n      - sdk: libc++.tbd\n      - sdk: libz.dylib\n  MyFramework:\n    type: framework\n```\n\n**SDK Dependency**\n\n- [ ] **root**: **String** - Root of framework path, for example `DEVELOPER_DIR`. Default value is `BUILT_PRODUCTS_DIR`\n\n```yaml\ntargets:\n  MyTestTarget:\n    dependencies:\n      - target: MyFramework\n      - framework: path/to/framework.framework\n      - sdk: Contacts.framework\n      - sdk: Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest\n        root: DEVELOPER_DIR\n  MyFramework:\n    type: framework\n```\n\n**Package dependency**\n- [ ] **product**: **String** - The product to use from the package. This defaults to the package name, so is only required if a Package has multiple libraries or a library with a differing name. Use this over `products` when you want to define different linking options per product.\n- [ ] **products**: **String** - A list of products to use from the package. This can be used when depending on multiple products from a package.\n\n```yaml\npackages:\n  Yams:\n    url: https://github.com/jpsim/Yams\n    majorVersion: 2.0.0\n  SwiftPM:\n    url: https://github.com/apple/swift-package-manager\n    branch: swift-5.0-branch\ntargets:\n  App:\n    dependencies:\n      - package: Yams \n      - package: SwiftPM\n        product: SPMUtility\n```\n\nDepending on multiple products from a package:\n\n```yaml\npackages:\n  FooFeature:\n    path: Packages/FooFeature\ntargets:\n  App:\n    dependencies:\n      - package: FooFeature\n        products:\n          - FooDomain\n          - FooUI\n```\n\n### Config Files\n\nSpecifies `.xcconfig` files for each configuration.\n\n```yaml\nconfigFiles:\n  Debug: debug.xcconfig\n  Release: release.xcconfig\ntargets:\n  App:\n    configFiles:\n      Debug: App/debug.xcconfig\n      Release: App/release.xcconfig\n```\n### Plist\nPlists 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.\n\n- [x] **path**: **String** - This is the path where the plist will be written to\n- [x] **properties**: **[String: Any]** - This is a map of all the plist keys and values\n\n```yml\ntargets:\n  App:\n    info:\n      path: App/Info.plist\n      properties:\n        UISupportedInterfaceOrientations: [UIInterfaceOrientationPortrait]\n        UILaunchStoryboardName: LaunchScreen\n    entitlements:\n      path: App/App.entitlements\n      properties:\n        com.apple.security.application-groups: group.com.app\n```\n\n### Build Tool Plug-ins\n\nTo add `Build Tool Plug-ins`, you need to add information about plugins to [Target](#target):\n\n- **buildToolPlugins**: List of plugins to connect to the target\n\nEach plugin includes information:\n\n- [x] **plugin**: **String** - plugin name \n- [x] **package**: **String** - the name of the package that contains the plugin\n\nСonnect the plugin to the desired target:\n\n```yaml\ntargets:\n  App:\n    buildToolPlugins:\n      - plugin: MyPlugin\n        package: MyPackage\n```\n\nDon't forget to add a package containing the plugin we need:\n\n```yaml\npackages:\n  MyPackage:\n    url: https://github.com/MyPackage\n    from: 1.3.0\n```\n\n### Build Script\n\nRun script build phases can be added at 3 different points in the build:\n\n- **preBuildScripts**: Before any other build phases\n- **postCompileScripts**: After the compile sources build phase\n- **postBuildScripts**: After any other build phases\n\nEach script can contain:\n\n- [x] **path**: **String** - a relative or absolute path to a shell script\n- [x] **script**: **String** - an inline shell script\n- [ ] **name**: **String** - name of a script. Defaults to `Run Script`\n- [ ] **inputFiles**: **[String]** - list of input files\n- [ ] **outputFiles**: **[String]** - list of output files\n- [ ] **inputFileLists**: **[String]** - list of input .xcfilelist\n- [ ] **outputFileLists**: **[String]** - list of output .xcfilelist\n- [ ] **shell**: **String** - shell used for the script. Defaults to `/bin/sh`\n- [ ] **showEnvVars**: **Bool** - whether the environment variables accessible to the script show be printed to the build log. Defaults to `true`\n- [ ] **runOnlyWhenInstalling**: **Bool** - whether the script is only run when installing (`runOnlyForDeploymentPostprocessing`). Defaults to `false`\n- [ ] **basedOnDependencyAnalysis**: **Bool** - whether to skip the script if inputs, context, or outputs haven't changed. Defaults to `true`\n- [ ] **discoveredDependencyFile**: **String** - discovered dependency .d file. Defaults to none\n\nEither a **path** or **script** must be defined, the rest are optional.\n\nA multiline script can be written using the various YAML multiline methods, for example with `|` as below:\n\n```yaml\ntargets:\n  MyTarget:\n    preBuildScripts:\n      - path: myscripts/my_script.sh\n        name: My Script\n        inputFiles:\n          - $(SRCROOT)/file1\n          - $(SRCROOT)/file2\n        inputFileLists:\n          - $(SRCROOT)/inputFiles.xcfilelist\n        outputFiles:\n          - $(DERIVED_FILE_DIR)/file1\n          - $(DERIVED_FILE_DIR)/file2\n        outputFileLists:\n          - $(SRCROOT)/outputFiles.xcfilelist\n        discoveredDependencyFile: $(DERIVED_FILE_DIR)/target.d\n    postCompileScripts:\n      - script: swiftlint\n        name: Swiftlint\n      - script: |\n      \t\tcommand do\n      \t\tothercommand\n    postBuildScripts:\n      - path: myscripts/my_final_script.sh\n        name: My Final Script\n```\n\n### Build Rule\n\n- [ ] **filePattern**: **String** - A glob pattern for the files that will have the build rule run on them. This or `fileType` must be defined\n- [ ] **fileType**: **String** - A file type determined by Xcode. The available types can be seen by hovering your mouse of the `Process` dropdown in the Xcode interface. For example `sourcecode.swift` or `file.xib`. This or `filePattern` must be defined.\n- [ ] **script**: **String** - The script that will be run on each file. This or `compilerSpec` must be defined.\n- [ ] **compilerSpec**: **String**: A reference to a built in apple tool to run on each file. This is for advanced use and the the values for this must be checked. This or `script` must be defined.\n- [ ] **name**: **String** - The name of a build rule. Defaults to `Build Rule`\n- [ ] **outputFiles**: **[String]** - The list of output files\n- [ ] **outputFilesCompilerFlags**: **[String]** - The list of compiler flags to apply to the output files\n- [ ] **runOncePerArchitecture**: **Bool** - a boolean that indicates if this rule should run once per architecture. This defaults to true\n\n```yaml\ntargets:\n  MyTarget:\n    buildRules:\n      - filePattern: \"*.xcassets\"\n        script: generate_assets.py\n      - fileType: sourcecode.swift\n        script: pre_process_swift.py\n      - filePattern: \"*.txt\"\n        name: My Build Rule\n        compilerSpec: com.apple.xcode.tools.swift.compiler\n        outputFiles:\n          - $(SRCROOT)/Generated.swift\n        runOncePerArchitecture: false\n```\n\n### Target Scheme\n\nThis 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).\n\n- [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.\n- [ ] **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)\n- [ ] **gatherCoverageData**: **Bool** - a boolean that indicates if this scheme should gather coverage data. This defaults to false\n- [ ] **coverageTargets**: **[[Testable Target Reference](#testable-target-reference) - a list of targets to gather code coverage. Each entry can either be a simple string, a string using [Project Reference](#project-reference) or [Testable Target Reference](#testable-target-reference)\n- [ ] **disableMainThreadChecker**: **Bool** - a boolean that indicates if this scheme should disable the Main Thread Checker. This defaults to false\n- [ ] **stopOnEveryMainThreadCheckerIssue**: **Bool** - a boolean that indicates if this scheme should stop at every Main Thread Checker issue. This defaults to false\n- [ ] **disableThreadPerformanceChecker**: **Bool** - a boolean that indicates if this scheme should disable the Thread Performance Checker. This defaults to false\n- [ ] **buildImplicitDependencies**: **Bool** - Flag to determine if Xcode should build implicit dependencies of this scheme. By default this is `true` if not set.\n- [ ] **language**: **String** - a String that indicates the language used for running and testing. This defaults to nil\n- [ ] **region**: **String** - a String that indicates the region used for running and testing. This defaults to nil\n- [ ] **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\n- [ ] **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.\n- [ ] **testPlans**:  **[[Test Plan](#test-plan)]** - List of test plan locations that will be referenced in the scheme.\n- [ ] **preActions**: **[[Execution Action](#execution-action)]** - Scripts that are run *before* the build action\n- [ ] **postActions**: **[[Execution Action](#execution-action)]** - Scripts that are run *after* the build action\n- [ ] **management**: **[Scheme Management](#scheme-management)** - Management options for the scheme\n- [ ] **storeKitConfiguration**: **String** - specify storekit configuration to use during run. See [Options](#options).\n\nFor example, the spec below would create 3 schemes called:\n\n- MyApp Test\n- MyApp Staging\n- MyApp Production\n\nEach scheme would use different build configuration for the different build types, specifically debug configs for `run`, `test`, and `analyze`, and release configs for `profile` and `archive`.\nThe MyUnitTests target would also be linked.\n\n```yaml\nconfigs:\n  Test Debug: debug\n  Staging Debug: debug\n  Production Debug: debug\n  Test Release: release\n  Staging Release: release\n  Production Release: release\ntargets:\n  MyApp:\n    scheme:\n      testTargets:\n        - MyUnitTests\n      configVariants:\n        - Test\n        - Staging\n        - Production\n      gatherCoverageData: true\n      coverageTargets:\n        - MyTarget1\n        - ExternalTarget/OtherTarget1\n      commandLineArguments:\n        \"-MyEnabledArg\": true\n        \"-MyDisabledArg\": false\n      environmentVariables:\n        MY_ENV_VAR: VALUE\n  MyUnitTests:\n    sources: Tests\n```\n\n### Legacy Target\n\nBy providing a legacy target, you are opting in to the \"Legacy Target\" mode. This is the \"External Build Tool\" from the Xcode GUI. This is useful for scripts that you want to run as dependencies of other targets, but you want to make sure that it only runs once even if it is specified as a dependency from multiple other targets.\n\n- [x] ***toolPath***: String - Path to the build tool used in the legacy target.\n- [ ] ***arguments***: String - Build arguments used for the build tool in the legacy target\n- [ ] ***passSettings***: Bool - Whether or not to pass build settings down to the build tool in the legacy target.\n- [ ] ***workingDirectory***: String - The working directory under which the build tool will be invoked in the legacy target.\n\n## Aggregate Target\n\nThis is used to override settings or run build scripts in specific targets\n\n- [x] **targets**: **[String]** - The list of target names to include as target dependencies\n- [ ] **configFiles**: **[Config Files](#config-files)** - `.xcconfig` files per config\n- [ ] **settings**: **[Settings](#settings)** - Target specific build settings.\n- [ ] **buildToolPlugins**: **[[Build Tool Plug-ins](#build-tool-plug-ins)]** - Commands for the build system that run automatically *during* the build\n- [ ] **buildScripts**: **[[Build Script](#build-script)]** - Build scripts to run\n- [ ] **scheme**: **[Target Scheme](#target-scheme)** - Generated scheme\n- [ ] **attributes**: **[String: Any]** - This sets values in the project `TargetAttributes`. It is merged with `attributes` from the project and anything automatically added by XcodeGen, with any duplicate values being override by values specified here\n\n## Target Template\n\nThis is a template that can be referenced from a normal target using the `templates` property. The properties of this template are the same as a [Target](#target).\nAny instances of `${target_name}` within each template will be replaced by the final target name which references the template.\nAny attributes defined within a targets `templateAttributes` will be used to replace any attribute references in the template using the syntax `${attribute_name}`.\n\n\n```yaml\ntargets:\n  MyFramework:\n    templates: \n      - Framework\n    templateAttributes:\n      frameworkName: AwesomeFramework\n    sources:\n      - SomeSources\ntargetTemplates:\n  Framework:\n    platform: iOS\n    type: framework\n    sources:\n      - ${frameworkName}/${target_name}\n```\n\n## Scheme\n\nSchemes allows for more control than the convenience [Target Scheme](#target-scheme) on [Target](#target)\n\n- [x] ***build***: Build options\n- [ ] ***run***: The run action\n- [ ] ***test***: The test action\n- [ ] ***profile***: The profile action\n- [ ] ***analyze***: The analyze action\n- [ ] ***archive***: The archive action\n- [ ] ***management***: management metadata\n\n### Build\n\n- [x] **targets**: **[String:String]** or **[String:[String]]** - A map of target names to build and which build types they should be enabled for. The build types can be `all`, `none`, or an array of the following types:\n\t- `run` or `running`\n\t- `test` or `testing`\n\t- `profile` or `profiling`\n\t- `analyze` or `analyzing`\n\t- `archive` or `archiving`\n\n- [ ] **parallelizeBuild**: **Bool** - Whether or not your targets should be built in parallel. By default this is `true` if not set.\n  - `true`: Build targets in parallel\n  - `false`: Build targets serially\n- [ ] **buildImplicitDependencies**: **Bool** - Flag to determine if Xcode should build implicit dependencies of this scheme. By default this is `true` if not set.\n\n  - `true`: Discover implicit dependencies of this scheme\n  - `false`: Only build explicit dependencies of this scheme\n\n- [ ] **runPostActionsOnFailure**: **Bool** - Flag to determine if Xcode should run post scripts despite failure build. By default this is `false` if not set.\n- `true`: Run post scripts even if build is failed\n- `false`: Only run post scripts if build success\n\n\n```yaml\ntargets:\n  MyTarget: all\n  FooLib/FooTarget: [test, run]\nparallelizeBuild: true\nbuildImplicitDependencies: true\n```\n\n### Common Build Action options\n\nThe different actions share some properties:\n\n- [ ] **config**: **String** - All build actions can be set to use a certain config. If a config, or the build action itself, is not defined the first configuration found of a certain type will be used, depending on the type:\n\t- `debug`: run, test, analyze\n\t- `release`: profile, archive\n- [ ] **commandLineArguments**: **[String:Bool]** - `run`, `test` and `profile` actions have a map of command line arguments to whether they are enabled\n- [ ] **preActions**: **[[Execution Action](#execution-action)]** - Scripts that are run *before* the action\n- [ ] **postActions**: **[[Execution Action](#execution-action)]** - Scripts that are run *after* the action\n- [ ] **environmentVariables**: **[[Environment Variable](#environment-variable)]** or **[String:String]** - `run`, `test` and `profile` actions can define the environment variables. When passing a dictionary, every key-value entry maps to a corresponding variable that is enabled.\n- [ ] **enableGPUFrameCaptureMode**: **GPUFrameCaptureMode** - Property value set for `GPU Frame Capture`. Possible values are `autoEnabled`, `metal`, `openGL`, `disabled`. Default is `autoEnabled`.\n- [ ] **enableGPUValidationMode**: **Bool** - Property value set for `Metal API Validation`. This defaults to true.\n- [ ] **disableMainThreadChecker**: **Bool** - `run` and `test` actions can define a boolean that indicates that this scheme should disable the Main Thread Checker. This defaults to false\n- [ ] **stopOnEveryMainThreadCheckerIssue**: **Bool** - a boolean that indicates if this scheme should stop at every Main Thread Checker issue. This defaults to false\n- [ ] **disableThreadPerformanceChecker**: **Bool** - `run` action can define a boolean that indicates that this scheme should disable the Thread Performance Checker. This defaults to false\n- [ ] **language**: **String** - `run` and `test` actions can define a language that is used for Application Language\n- [ ] **region**: **String** - `run` and `test` actions can define a language that is used for Application Region\n- [ ] **debugEnabled**: **Bool** - `run` and `test` actions can define a whether debugger should be used. This defaults to true.\n- [ ] **simulateLocation**: **[Simulate Location](#simulate-location)** - `run` action can define a simulated location\n- [ ] **askForAppToLaunch**: **Bool** - `run` and `profile` actions can define the executable set to ask to launch. This defaults to false.\n- [ ] **launchAutomaticallySubstyle**: **String** - `run` action can define the launch automatically substyle ('2' for extensions).\n- [ ] **storeKitConfiguration**: **String** - `run` action can specify a storekit configuration. See [Options](#options).\n- [ ] **macroExpansion**: **String** - `run` and `test` actions can define the macro expansion from other target. This defaults to nil.\n\n### Execution Action\n\nScheme run scripts added via **preActions** or **postActions**. They run before or after a build action, respectively, and in the order defined. Each execution action can contain:\n\n- [x] **script**: **String** - an inline shell script\n- [ ] **name**: **String** - name of a script. Defaults to `Run Script`\n- [ ] **settingsTarget**: **String** - name of a build or test target whose settings will be available as environment variables.\n\nA multiline script can be written using the various YAML multiline methods, for example with `|`. See [Build Script](#build-script).\n\n### Run Action\n- [ ] **executable**: **String** - the name of the target to launch as an executable. Defaults to the first runnable build target in the scheme, or the first build target if a runnable build target is not found\n- [ ] **customLLDBInit**: **String** - the absolute path to the custom `.lldbinit` file\n- [ ] **customWorkingDirectory**: **String** - a path to use as the working directory when launching the executable.\n\n### Test Action\n\n- [ ] **gatherCoverageData**: **Bool** - a boolean that indicates if this scheme should gather coverage data. This defaults to false\n- [ ] **coverageTargets**: **[[Testable Target Reference](#testable-target-reference)]** - a list of targets to gather code coverage. Each entry can either be a simple string, a string using [Project Reference](#project-reference) or [Testable Target Reference](#testable-target-reference)\n- [ ] **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)\n- [ ] **customLLDBInit**: **String** - the absolute path to the custom `.lldbinit` file\n- [ ] **captureScreenshotsAutomatically**: **Bool** - indicates whether screenshots should be captured automatically while UI Testing. This defaults to true.\n- [ ] **deleteScreenshotsWhenEachTestSucceeds**: **Bool** - whether successful UI tests should cause automatically-captured screenshots to be deleted. If `captureScreenshotsAutomatically` is false, this value is ignored. This defaults to true.\n- [ ] **testPlans**:  **[[Test Plan](#test-plan)]** - List of test plan locations that will be referenced in the scheme.\n- [ ] **preferredScreenCaptureFormat**: **String** - automatic screen capture format to use while UI Testing. Possible values are `screenshots`, `screenRecording`. Default is `screenRecording`.\n\n#### Test Target\nA target can be one of a 2 types:\n\n- **name**: **String** - The name of the target.\n- **target**: **[Testable Target Reference](#testable-target-reference)** - The information of the target. You can specify more detailed information than `name:`.\n\nAs syntax sugar, you can also specify **[Testable Target Reference](#testable-target-reference)** without `target`.\n\n#### Other Parameters\n\n- [ ] **parallelizable**: **Bool** - Whether to run tests in parallel. Defaults to false\n- [ ] **randomExecutionOrder**: **Bool** - Whether to run tests in a random order. Defaults to false\n- [ ] **location**: **String** - GPX file or predefined value for simulating location. See [Simulate Location](#simulate-location) for location examples.\n- [ ] **skipped**: **Bool** - Whether to skip all of the test target tests. Defaults to false\n- [ ] **skippedTests**: **[String]** - List of tests in the test target to skip. Defaults to empty\n- [ ] **selectedTests**: **[String]** - List of tests in the test target to whitelist and select. Defaults to empty. This will override `skippedTests` if provided\n\n#### Testable Target Reference\nA Testable Target Reference can be one of 3 types:\n- `package: {local-swift-package-name}/{target-name}`: Name of local swift package and its target.\n- `local: {target-name}`:  Name of local target.\n- `project: {project-reference-name}/{target-name}`:  Name of local swift package and its target.\n\n### Archive Action\n\n- [ ] **customArchiveName**: **String** - the custom name to give to the archive\n- [ ] **revealArchiveInOrganizer**: **Bool** - flag to determine whether the archive will be revealed in Xcode's Organizer after it's done building\n\n\n### Simulate Location\n- [x] **allow**: **Bool** - enable location simulation \n- [ ] **defaultLocation**: **String** - set the default location, possible values:\n\t- `London, England`\n\t- `Johannesburg, South Africa`\n\t- `Moscow, Russia`\n\t- `Mumbai, India`\n\t- `Tokyo, Japan`\n\t- `Sydney, Australia`\n\t- `Hong Kong, China`\n\t- `Honolulu, HI, USA`\n\t- `San Francisco, CA, USA`\n\t- `Mexico City, Mexico`\n\t- `New York, NY, USA`\n\t- `Rio de Janeiro, Brazil`\n\t- `<relative-path-to-gpx-file>` (e.g. ./location.gpx)   \n\t Setting the **defaultLocation** to a custom gpx file, you also need to add that file to `fileGroups` for Xcode be able to use it:\n\t \n```yaml\ntargets:\n  MyTarget:\n    fileGroups:\n      - location.gpx\n```\n\nNote that the path the gpx file will be prefixed according to the `schemePathPrefix` option in order to support both `.xcodeproj` and `.xcworkspace` setups. See [Options](#options).\n\n### Scheme Management\n- [ ] **shared**: **Bool** - indicates whether the scheme is shared\n- [ ] **orderHint**: **Int** - used by Xcode to sort the schemes\n- [ ] **isShown**: **Bool** - indicates whether the sheme is shown in the scheme list\n\n### Environment Variable\n\n- [x] **variable**: **String** - variable's name.\n- [x] **value**: **String** - variable's value.\n- [ ] **isEnabled**: **Bool** - indicates whether the environment variable is enabled. This defaults to true.\n\n```yaml\nschemes:\n  Production:\n    build:\n      targets:\n        MyTarget1: all\n        MyTarget2: [run, archive]\n    run:\n      config: prod-debug\n      commandLineArguments:\n        \"-MyEnabledArg\": true\n        \"-MyDisabledArg\": false\n      environmentVariables:\n        RUN_ENV_VAR: VALUE\n    test:\n      config: prod-debug\n      commandLineArguments:\n        \"-MyEnabledArg\": true\n        \"-MyDisabledArg\": false\n      gatherCoverageData: true\n      coverageTargets:\n        - MyTarget1\n        - ExternalTarget/OtherTarget1\n        - package: LocalPackage/TestTarget\n      targets: \n        - Tester1 \n        - name: Tester2\n          parallelizable: true\n          randomExecutionOrder: true\n          skippedTests: [Test/testExample()]\n        - package: APIClient/APIClientTests\n          parallelizable: true\n          randomExecutionOrder: true\n      environmentVariables:\n        - variable: TEST_ENV_VAR\n          value: VALUE\n          isEnabled: false\n    profile:\n      config: prod-release\n    analyze:\n      config: prod-debug\n    archive:\n      config: prod-release\n      customArchiveName: MyTarget\n      revealArchiveInOrganizer: false\n```\n\n### Test Plan\nFor now test plans are not generated by XcodeGen and must be created in Xcode and checked in, and then referenced by path. If the test targets are added, removed or renamed, the test plans may need to be updated in Xcode.\n\n- [x] **path**: **String** - path that provides the `xctestplan` location.\n- [ ] **defaultPlan**: **Bool** - a bool that defines if given plan is the default one. Defaults to false. If no default is set on any test plan, the first plan is set as the default.\n\n```yaml\nschemes:\n  TestTarget:\n    test:\n      testPlans:\n        - path: app.xctestplan\n          defaultPlan: true\n```\n\n## Scheme Template\n\nThis is a template that can be referenced from a normal scheme using the `templates` property. The properties of this template are the same as a [Scheme](#scheme). This functions identically in practice to [Target Template](#target-template).\nAny instances of `${scheme_name}` within each template will be replaced by the final scheme name which references the template.\nAny attributes defined within a scheme's `templateAttributes` will be used to replace any attribute references in the template using the syntax `${attribute_name}`.\n\n```yaml\nschemes:\n  MyModule:\n    templates:\n      - FeatureModuleScheme\n    templateAttributes:\n      testTargetName: MyModuleTests\n\nschemeTemplates:\n  FeatureModuleScheme:\n    templates:\n      - TestScheme\n    build:\n      targets:\n       ${scheme_name}: build\n\n  TestScheme:\n    test:\n      gatherCoverageData: true\n      targets:\n        - name: ${testTargetName}\n          parallelizable: true\n          randomExecutionOrder: true\n```\n\nThe result will be a scheme that builds `MyModule` when you request a build, and will test against `MyModuleTests` when you request to run tests. This is particularly useful when you work in a very modular application and each module has a similar structure.\n\n## Swift Package\nSwift packages are defined at a project level, and then linked to individual targets via a [Dependency](#dependency).\n\n### Remote Package\n\n- [x] **url**: **URL** - the url to the package\n- [x] **version**: **String** - the version of the package to use. It can take a few forms:\n  - `majorVersion: 1.2.0` or `from: 1.2.0`\n  - `minorVersion: 1.2.1`\n  - `exactVersion: 1.2.1` or `version: 1.2.1`\n  - `minVersion: 1.0.0, maxVersion: 1.2.9`\n  - `branch: master`\n  - `revision: xxxxxx`\n- [ ] **github** : **String**- this is an optional helper you can use for github repos. Instead of specifying the full url in `url` you can just specify the github org and repo\n  \n### Local Package\n\n- [x] **path**: **String** - the path to the package in local. The path must be directory with a `Package.swift`.\n- [ ] **group** : **String**- Optional path that specifies the location where the package will live in your xcode project. Use `\"\"` to specify the project root.\n- [ ] **excludeFromProject** : **String**- Optional flag to exclude the package from the generated project (useful if the package is already added via xcworkspace and the project is not intended for standalone use), defaults to `false`\n\n```yml\npackages:\n  Yams:\n    url: https://github.com/jpsim/Yams\n    from: 2.0.0\n  Ink:\n    github: JohnSundell/Ink\n    from: 0.5.0\n  RxClient:\n    path: ../RxClient\n  AppFeature:\n    path: ../Packages\n    group: Domains/AppFeature\n    excludeFromProject: false\n```\n\n## Project Reference\n\nProject References are defined at a project level, and then you can use the project name to refer its target via a [Scheme](#scheme)\n\n- [x] **path**: **String** - The path to the `xcodeproj` file to reference.\n\n```yml\nprojectReferences:\n  YamsProject:\n    path: ./Carthage/Checkouts/Yams/Yams.xcodeproj\nschemes:\n  TestTarget:\n    build:\n      targets:\n        YamsProject/Yams: [\"run\"]\n```\n"
  },
  {
    "path": "Docs/Usage.md",
    "content": "\n- [Configuring build settings](#configuring-build-settings)\n    - [Setting Presets](#setting-presets)\n    - [Settings](#settings)\n    - [Setting Groups](#setting-groups)\n    - [xcconfig files](#xcconfig-files)\n- [Dependencies](#dependencies)\n    - [CocoaPods](#cocoapods)\n    - [Carthage](#carthage)\n    - [Swift Package](#swift-package)\n    - [SDK](#sdk)\n    - [Framework](#framework)\n\n# Configuring build settings\nThere are various ways of configuring build settings\n\nXcode resolves a certain build setting for a configuration and target by looking up the different levels until it finds a value. This can be seen in Xcode when the `Levels` option is on in the `Build Settings` tab. The different levels of build settings are:\n\n- target\n- target xcconfig file\n- project\n- project xcconfig file\n- sdk defaults\n\nXcodeGen will apply settings to a target or project level by merging different methods\n- [Setting Presets](#setting-presets)\n- [Setting Groups](#setting-groups)\n- [Settings](#settings) `base`\n- [Settings](#settings) for a specific `config`\n\nThe values from [xcconfig files](#xcconfig-files) will then sit a level above this. Note that as a convenience, any settings in an xcconfig file will also overwrite any settings from [Setting Presets](#setting-presets)\n\n>Note that when defining build settings you need to know the write name and value. In Xcode build settings are shown by default with a nicely formatted title and value. To be able to see what the actual build setting names and values are make sure you're in a `Build Settings` tab and go `Editor -> Show Setting Titles` and also `Editor -> Show Definitions`. This will then give you the actual names and values that XcodeGen expects.\n\n### Setting Presets\nXcodeGen applies default settings to your project and targets similar to how Xcode creates them when you create a new project or target.\nDebug and Release settings will be applied to your project. Targets will also get specific settings depending on the platform and product type.\n\n>You can change or disable how these setting presets are applied via the `options.settingPresets` which you can find more about in [Options](ProjectSpec.md#options)\n\n### Settings\nThe `project` and each `target` have a `settings` object that you can define. This can be a simple map of build settings or can provide build settings per `config` via `configs` or `base`. See [Settings](ProjectSpec.md#settings) for more details.\n\n```yaml\nsettings:\n  DEVELOPMENT_TEAM: T45H45J\ntargets:\n  App:\n    settings:\n      base:\n        CODE_SIGN_ENTITLEMENTS: App/Entitlements.entitlements\n      configs:\n        Debug:\n          DEBUG_MODE: YES\n        Release:\n          DEBUG_MODE: NO\n     \n```\n\n### Setting Groups\nEach `settings` can also reference one or more setting groups which let you reuse groups of build settings across targets or configurations. See [Setting Groups](ProjectSpec.md#setting-groups) for more details. Note that each setting group is also a full [Settings](ProjectSpec.md#settings) object, so you can reference other groups or define settings by config.\n\n```yaml\nsettingGroups:\n  app:\n    DEVELOPMENT_TEAM: T45H45J\ntargets:\n  App:\n    settings:\n      groups: [app]\n```\n\n### xcconfig files\nThe `project` and each `target` have a `configFiles` object that lets you reference `.xcconfig` files per configuration.\n\n>This is good guide to xcconfig files [https://pewpewthespells.com/blog/xcconfig_guide](https://pewpewthespells.com/blog/xcconfig_guide.html)\n\n```yaml\nconfigFiles:\n  Debug: debug.xcconfig\n  Release: release.xcconfig\ntargets:\n  App:\n    configFiles:\n      Debug: App/debug.xcconfig\n      Release: App/release.xcconfig\n```\n\n### xcodebuild environment variables\nYou can also always override any build settings on CI when building by passing specific build settings to xcodebuild like so:\n\n```sh\nDEVELOPMENT_TEAM=XXXXXXXXX xcodebuild ...\n```\n\n# Dependencies\n\nEach target can declare one or more dependencies. See [Dependency](ProjectSpec.md#dependency) in the ProjectSpec for more info about all the properties\n\n### CocoaPods\nUse 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.\n\n### Carthage\nXcodeGen makes integrating Carthage dependencies super easy!\n\nYou simply reference them in each target that requires them and XcodeGen does the rest by automatically linking and embedding the carthage frameworks where necessary.\n\n```yaml\ntargets:\n  App:\n    dependencies:\n      - target: Framework\n      - carthage: Kingfisher\n  Framework:\n    dependencies:\n      - carthage: Alamofire\n```\n\nSome Carthage dependencies actually vend multiple frameworks. For example `github \"ReactiveCocoa/ReactiveCocoa\" ~> 8.0` vends 2 frameworks `ReactiveCocoa` and `ReactiveMapKit`.\nBy default these all have to be listed if you want to link and use them:\n\n```yml\ntargets:\n  App:\n    dependencies:\n      - carthage: ReactiveCocoa\n      - carthage: ReactiveMapKit \n```\n\nXcodeGen can look these up for you automatically! This can be enabled with a global `options.findCarthageFrameworks` or can be overridden for each Carthage dependency. Note that if this is enabled, the Carthage dependencies need to have already been built before XcodeGen is run. This is because XcodeGen loads `.version` files that Carthage writes in the `Carthage/Build` directory which lists the all the frameworks. The name you use must also be the name of the `.version` file Carthage writes to `Carthage/Build`. Be aware that in some cases this name can differ from the name of the repo in the Cartfile and even the framework name. If the `.version` file is not found or fails parsing, XcodeGen will fallback to the regular Framework lookup in the relevant Carthage directory.\n\n```yml\noptions:\n  findCarthageFrameworks: true\ntargets:\n  App:\n    dependencies:\n      - carthage: ReactiveCocoa # will find ReactiveMapKit as well\n      - carthage: OtherCarthageDependency\n        findFrameworks: false # disables the global option\n```\n\nXcodeGen 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`\n\n```yaml\noptions:\n  carthageExecutablePath: mint run Carthage/Carthage\n```\n\nBy default XcodeGen looks for carthage frameworks in `Carthage/Build`. You can change this with the `carthageBuildPath` option\n\n```yaml\noptions:\n  carthageBuildPath: ../../Carthage/Build\n```\n\n### Swift Package\nSwift Packages can be integrated by defining them at the project level and then referencing them in targets\n\n```yaml\npackages:\n  Yams:\n    url: https://github.com/jpsim/Yams\n    from: 2.0.0\n  SwiftPM:\n    url: https://github.com/apple/swift-package-manager\n    branch: swift-5.0-branch\n  RxClient:\n    path: ../RxClient\ntargets:\n  App:\n    dependencies:\n      # by default the package product that is linked to is the same as the package name\n      - package: Yams\n      - package: SwiftPM\n      - package: RxClient\n      - package: SwiftPM\n        product: SPMUtility # specify a specific product\n```\nIf you want to check in the `Package.resolved` file so that everyone is on the same versions, you need to check in `ProjectName.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved`\n\n> Note that Swift Packages don't work in projects with configurations other than `Debug` and `Release`. That limitation is tracked here bugs.swift.org/browse/SR-10927\n\nSpecified local packages get put into a `Packages` group in the root of the project by default. This can be changed with `options.localPackagesGroup`.\n\n### SDK\nSystem frameworks and libs can be linked by using the `sdk` dependency type. You can either specify frameworks or libs by using a `.framework`, `.tbd` or `dylib` filename, respectively\n\n```yaml\ntargets:\n  App:\n    dependencies:\n      - sdk: Contacts.framework\n      - sdk: libc++.tbd\n      - sdk: libz.dylib\n```\n\n### Framework\nIndividual frameworks can also be linked by specifying a path to them\n\n```yamlå\ntargets:\n  App:\n    dependencies:\n      - framework: Vendor/MyFramework.framework\n```\n\n# Build Tool Plug-ins\nXCodeGen supports working with [Swift Package Plug-ins](https://github.com/apple/swift-package-manager/blob/main/Documentation/Plugins.md#using-a-package-plugin).\n\nTo use plugins, you need to specify in your target which plugin you want to connect, and don't forget to connect the package to target.\n\n```yaml\npackages:\n  Prefire:\n    url: https://github.com/BarredEwe/Prefire\n    from: 1.3.0\ntargets:\n  App:\n    buildToolPlugins:\n      - plugin: PrefirePlaybookPlugin\n        package: Prefire\n```\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Yonas Kolb\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "TOOL_NAME = XcodeGen\nexport EXECUTABLE_NAME = xcodegen\nVERSION = 2.45.3\n\nPREFIX = /usr/local\nINSTALL_PATH = $(PREFIX)/bin/$(EXECUTABLE_NAME)\nSHARE_PATH = $(PREFIX)/share/$(EXECUTABLE_NAME)\nCURRENT_PATH = $(PWD)\nREPO = https://github.com/yonaskolb/$(TOOL_NAME)\nSWIFT_BUILD_FLAGS = --disable-sandbox -c release --arch arm64 --arch x86_64\nBUILD_PATH = $(shell swift build $(SWIFT_BUILD_FLAGS) --show-bin-path)\nEXECUTABLE_PATH = $(BUILD_PATH)/$(EXECUTABLE_NAME)\n\n.PHONY: install build uninstall format_code release\n\ninstall: build\n\tmkdir -p $(PREFIX)/bin\n\tcp -f $(EXECUTABLE_PATH) $(INSTALL_PATH)\n\tmkdir -p $(SHARE_PATH)\n\tcp -R $(CURRENT_PATH)/SettingPresets $(SHARE_PATH)/SettingPresets\n\nbuild:\n\tswift build $(SWIFT_BUILD_FLAGS)\n\nuninstall:\n\trm -f $(INSTALL_PATH)\n\trm -rf $(SHARE_PATH)\n\nformat_code:\n\tswiftformat .\n\nrelease:\n\tsed -i '' 's|\\(let version = Version(\"\\)\\(.*\\)\\(\")\\)|\\1$(VERSION)\\3|' Sources/XcodeGen/main.swift\n\tsed -i '' 's|\\(.package(url: \"https://github.com/yonaskolb/XcodeGen.git\", from: \"\\)\\(.*\\)\\(\")\\)|\\1$(VERSION)\\3|' README.md\n\n\tgit add .\n\tgit commit -m \"Update to $(VERSION)\"\n\t#git tag $(VERSION)\n\npublish: archive\n\techo \"published $(VERSION)\"\n\narchive: build\n\t./scripts/archive.sh \"$(EXECUTABLE_PATH)\"\n\tswift package plugin --allow-writing-to-package-directory generate-artifact-bundle \\\n\t\t--package-version $(VERSION) \\\n\t\t--executable-name $(EXECUTABLE_NAME) \\\n\t\t--build-config release \\\n\t\t--include-resource-path LICENSE\n"
  },
  {
    "path": "Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"aexml\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tadija/AEXML.git\",\n      \"state\" : {\n        \"revision\" : \"db806756c989760b35108146381535aec231092b\",\n        \"version\" : \"4.7.0\"\n      }\n    },\n    {\n      \"identity\" : \"artifactbundlegen\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/freddi-kit/ArtifactBundleGen\",\n      \"state\" : {\n        \"revision\" : \"33f4a65acb296dcde04aeb828b6850fcf9dceb6c\",\n        \"version\" : \"0.0.8\"\n      }\n    },\n    {\n      \"identity\" : \"jsonutilities\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/yonaskolb/JSONUtilities.git\",\n      \"state\" : {\n        \"revision\" : \"128d2ffc22467f69569ef8ff971683e2393191a0\",\n        \"version\" : \"4.2.0\"\n      }\n    },\n    {\n      \"identity\" : \"pathkit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/PathKit.git\",\n      \"state\" : {\n        \"revision\" : \"3bfd2737b700b9a36565a8c94f4ad2b050a5e574\",\n        \"version\" : \"1.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"rainbow\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/onevcat/Rainbow.git\",\n      \"state\" : {\n        \"revision\" : \"e0dada9cd44e3fa7ec3b867e49a8ddbf543e3df3\",\n        \"version\" : \"4.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"spectre\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/Spectre.git\",\n      \"state\" : {\n        \"revision\" : \"26cc5e9ae0947092c7139ef7ba612e34646086c7\",\n        \"version\" : \"0.10.1\"\n      }\n    },\n    {\n      \"identity\" : \"swiftcli\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jakeheis/SwiftCLI.git\",\n      \"state\" : {\n        \"revision\" : \"2e949055d9797c1a6bddcda0e58dada16cc8e970\",\n        \"version\" : \"6.0.3\"\n      }\n    },\n    {\n      \"identity\" : \"version\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/mxcl/Version\",\n      \"state\" : {\n        \"revision\" : \"a94b48f36763c05629fc102837398505032dead9\",\n        \"version\" : \"2.0.0\"\n      }\n    },\n    {\n      \"identity\" : \"xcodeproj\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tuist/XcodeProj.git\",\n      \"state\" : {\n        \"revision\" : \"01bb77000bc8c23a09ea2058f4954612f03cb705\",\n        \"version\" : \"9.10.1\"\n      }\n    },\n    {\n      \"identity\" : \"yams\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jpsim/Yams.git\",\n      \"state\" : {\n        \"revision\" : \"01835dc202670b5bb90d07f3eae41867e9ed29f6\",\n        \"version\" : \"5.0.1\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Package.resources",
    "content": "SettingPresets\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.9\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"XcodeGen\",\n    platforms: [.macOS(.v11)],\n    products: [\n        .executable(name: \"xcodegen\", targets: [\"XcodeGen\"]),\n        .library(name: \"XcodeGenKit\", targets: [\"XcodeGenKit\"]),\n        .library(name: \"ProjectSpec\", targets: [\"ProjectSpec\"]),\n    ],\n    dependencies: [\n        .package(url: \"https://github.com/kylef/PathKit.git\", from: \"1.0.1\"),\n        .package(url: \"https://github.com/jpsim/Yams.git\", from: \"5.0.0\"),\n        .package(url: \"https://github.com/yonaskolb/JSONUtilities.git\", from: \"4.2.0\"),\n        .package(url: \"https://github.com/kylef/Spectre.git\", from: \"0.9.2\"),\n        .package(url: \"https://github.com/onevcat/Rainbow.git\", from: \"4.0.0\"),\n        .package(url: \"https://github.com/tuist/XcodeProj.git\", exact: \"9.10.1\"),\n        .package(url: \"https://github.com/jakeheis/SwiftCLI.git\", from: \"6.0.3\"),\n        .package(url: \"https://github.com/mxcl/Version\", from: \"2.0.0\"),\n        .package(url: \"https://github.com/freddi-kit/ArtifactBundleGen\", exact: \"0.0.8\")\n    ],\n    targets: [\n        .executableTarget(name: \"XcodeGen\", dependencies: [\n            \"XcodeGenCLI\",\n            .product(name: \"Version\", package: \"Version\"),\n        ]),\n        .target(name: \"XcodeGenCLI\", dependencies: [\n            \"XcodeGenKit\",\n            \"ProjectSpec\",\n            .product(name: \"SwiftCLI\", package: \"SwiftCLI\"),\n            .product(name: \"Rainbow\", package: \"Rainbow\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            .product(name: \"Version\", package: \"Version\"),\n        ]),\n        .target(name: \"XcodeGenKit\", dependencies: [\n            \"ProjectSpec\",\n            .product(name: \"JSONUtilities\", package: \"JSONUtilities\"),\n            .product(name: \"XcodeProj\", package: \"XcodeProj\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            \"XcodeGenCore\",\n        ], resources: [\n            .copy(\"SettingPresets\")\n        ]),\n        .target(name: \"ProjectSpec\", dependencies: [\n            .product(name: \"JSONUtilities\", package: \"JSONUtilities\"),\n            .product(name: \"XcodeProj\", package: \"XcodeProj\"),\n            .product(name: \"Yams\", package: \"yams\"),\n            \"XcodeGenCore\",\n            .product(name: \"Version\", package: \"Version\"),\n        ]),\n        .target(name: \"XcodeGenCore\", dependencies: [\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            .product(name: \"Yams\", package: \"yams\"),\n        ]),\n        .target(name: \"TestSupport\", dependencies: [\n            .product(name: \"XcodeProj\", package: \"XcodeProj\"),\n            .product(name: \"Spectre\", package: \"Spectre\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n        ]),\n        .testTarget(name: \"XcodeGenKitTests\", dependencies: [\n            \"XcodeGenKit\",\n            .product(name: \"Spectre\", package: \"Spectre\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            \"TestSupport\",\n        ]),\n        .testTarget(name: \"FixtureTests\", dependencies: [\n            \"XcodeGenKit\",\n            .product(name: \"Spectre\", package: \"Spectre\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            \"TestSupport\",\n        ]),\n        .testTarget(name: \"XcodeGenCoreTests\", dependencies: [\n            \"XcodeGenCore\",\n            .product(name: \"Spectre\", package: \"Spectre\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            \"TestSupport\",\n        ]),\n        .testTarget(name: \"ProjectSpecTests\", dependencies: [\n            \"ProjectSpec\",\n            .product(name: \"Spectre\", package: \"Spectre\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            \"TestSupport\",\n        ]),\n        .testTarget(name: \"PerformanceTests\", dependencies: [\n            \"XcodeGenKit\",\n            .product(name: \"Spectre\", package: \"Spectre\"),\n            .product(name: \"PathKit\", package: \"PathKit\"),\n            \"TestSupport\",\n        ]),\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n<a href=\"https://github.com/yonaskolb/XcodeGen\">\n<img src=\"Assets/Logo_animated.gif\" alt=\"XcodeGen\" />\n</a>\n</p>\n<p align=\"center\">\n  <a href=\"https://github.com/yonaskolb/XcodeGen/releases\">\n    <img src=\"https://img.shields.io/github/release/yonaskolb/xcodegen.svg\"/>\n  </a>\n  <a href=\"https://swiftpackageindex.com/yonaskolb/XcodeGen\">\n    <img src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fyonaskolb%2FXcodeGen%2Fbadge%3Ftype%3Dplatforms\" alt=\"Swift Package Manager Platforms\" />\n  </a>\n  <a href=\"https://swiftpackageindex.com/yonaskolb/XcodeGen\">\n    <img src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fyonaskolb%2FXcodeGen%2Fbadge%3Ftype%3Dswift-versions\" alt=\"Swift Versions\" />\n  </a>\n  <a href=\"https://github.com/yonaskolb/XcodeGen/blob/master/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/yonaskolb/XcodeGen.svg\"/>\n  </a>\n</p>\n\n# XcodeGen\n\nXcodeGen is a command line tool written in Swift that generates your Xcode project using your folder structure and a project spec.\n\nThe project spec is a YAML or JSON file that defines your targets, configurations, schemes, custom build settings and many other options. All your source directories are automatically parsed and referenced appropriately while preserving your folder structure. Sensible defaults are used in many places, so you only need to customize what is needed. Very complex projects can also be defined using more advanced features.\n\n- ✅ Generate projects on demand and remove your `.xcodeproj` from git, which means **no more merge conflicts**!\n- ✅ Groups and files in Xcode are always **synced** to your directories on disk\n- ✅ Easy **configuration** of projects which is human readable and git friendly\n- ✅ Easily copy and paste **files and directories** without having to edit anything in Xcode\n- ✅ Share build settings across multiple targets with **build setting groups**\n- ✅ Automatically generate Schemes for **different environments** like test and production\n- ✅ Easily **create new projects** with complicated setups on demand without messing around with Xcode\n- ✅ Generate from anywhere including on **CI**\n- ✅ Distribute your spec amongst multiple files for easy **sharing** and overriding\n- ✅ Easily create **multi-platform** frameworks\n- ✅ Integrate **Carthage** frameworks without any work\n\nGiven an example project spec:\n\n```yaml\nname: MyProject\ninclude:\n  - base_spec.yml\noptions:\n  bundleIdPrefix: com.myapp\npackages:\n  Yams:\n    url: https://github.com/jpsim/Yams\n    from: 2.0.0\ntargets:\n  MyApp:\n    type: application\n    platform: iOS\n    deploymentTarget: \"10.0\"\n    sources: [MyApp]\n    settings:\n      configs:\n        debug:\n          CUSTOM_BUILD_SETTING: my_debug_value\n        release:\n          CUSTOM_BUILD_SETTING: my_release_value\n    dependencies:\n      - target: MyFramework\n      - carthage: Alamofire\n      - framework: Vendor/MyFramework.framework\n      - sdk: Contacts.framework\n      - sdk: libc++.tbd\n      - package: Yams\n  MyFramework:\n    type: framework\n    platform: iOS\n    sources: [MyFramework]\n```\nA project would be created with 2 connected targets, with all the required configurations and build settings. See the [Project Spec](Docs/ProjectSpec.md) documentation for all the options you can specify, and [Usage](Docs/Usage.md) for more general documentation.\n\n## Installing\n\nMake sure the latest stable (non-beta) version of Xcode is installed first.\n\n### [Mint](https://github.com/yonaskolb/mint)\n```sh\nmint install yonaskolb/xcodegen\n```\n\n### Make\n\n```shell\ngit clone https://github.com/yonaskolb/XcodeGen.git\ncd XcodeGen\nmake install\n```\n\n### Homebrew\n\n```shell\nbrew install xcodegen\n```\n\n### Swift Package Manager\n\n**Use as CLI**\n\n```shell\ngit clone https://github.com/yonaskolb/XcodeGen.git\ncd XcodeGen\nswift run xcodegen\n```\n\n**Use as dependency**\n\nAdd the following to your Package.swift file's dependencies:\n\n```swift\n.package(url: \"https://github.com/yonaskolb/XcodeGen.git\", from: \"2.45.3\"),\n```\n\nAnd then import wherever needed: `import XcodeGenKit`\n\n## Usage\n\nSimply run:\n\n```shell\nxcodegen generate\n```\n\nThis will look for a project spec in the current directory called `project.yml` and generate an Xcode project with the name defined in the spec.\n\nOptions:\n\n- **--spec**: An optional path to a `.yml` or `.json` project spec. Defaults to `project.yml`. (It is also possible to link to multiple spec files by comma separating them. Note that all other flags will be the same.)\n- **--project**: An optional path to a directory where the project will be generated. By default this is the directory the spec lives in.\n- **--quiet**: Suppress informational and success messages.\n- **--use-cache**: Used to prevent unnecessarily generating the project. If this is set, then a cache file will be written to when a project is generated. If `xcodegen` is later run but the spec and all the files it contains are the same, the project won't be generated.\n- **--cache-path**: A custom path to use for your cache file. This defaults to `~/.xcodegen/cache/{PROJECT_SPEC_PATH_HASH}`\n\nThere are other commands as well such as `xcodegen dump` which lets one output the resolved spec in many different formats, or write it to a file. Use `xcodegen help` to see more detailed usage information.\n\n## Editing\n```shell\ngit clone https://github.com/yonaskolb/XcodeGen.git\ncd XcodeGen\nswift package generate-xcodeproj\n```\nThis uses Swift Package Manager to create an `xcodeproj` file that you can open, edit and run in Xcode, which makes editing any code easier.\n\nIf you want to pass any required arguments when running in Xcode, you can edit the scheme to include launch arguments.\n\n## Documentation\n- See [Project Spec](Docs/ProjectSpec.md) documentation for all the various properties and options that can be set\n- See [Usage](Docs/Usage.md) for more specific usage and use case documentation\n- See [FAQ](Docs/FAQ.md) for a list of some frequently asked questions\n- See [Examples](Docs/Examples.md) for some real world XcodeGen project specs out in the wild\n\n## Alternatives\nIf XcodeGen doesn't meet your needs try these great alternatives:\n- [Tuist](https://github.com/tuist/tuist)\n- [Xcake](https://github.com/igor-makarov/xcake)\n- [struct](https://github.com/workshop/struct)\n\n## Attributions\nThis tool is powered by:\n\n- [XcodeProj](https://github.com/tuist/XcodeProj)\n- [JSONUtilities](https://github.com/yonaskolb/JSONUtilities)\n- [Spectre](https://github.com/kylef/Spectre)\n- [PathKit](https://github.com/kylef/PathKit)\n- [Yams](https://github.com/jpsim/Yams)\n- [SwiftCLI](https://github.com/jakeheis/SwiftCLI)\n\nInspiration for this tool came from:\n\n- [struct](https://github.com/workshop/struct)\n- [Xcake](https://github.com/igor-makarov/xcake)\n- [CocoaPods Xcodeproj](https://github.com/CocoaPods/Xcodeproj)\n\n## Contributions\nPull requests and issues are always welcome. Please open any issues and PRs for bugs, features, or documentation.\n\n[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/0)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/0)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/1)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/1)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/2)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/2)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/3)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/3)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/4)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/4)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/5)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/5)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/6)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/6)[![](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/images/7)](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/7)\n\n## License\n\nXcodeGen is licensed under the MIT license. See [LICENSE](LICENSE) for more info.\n"
  },
  {
    "path": "RELEASE.md",
    "content": "# The release process for XcodeGen\n\n1. Make sure `CHANGELOG.md` is up to date:\n   - All merged PRs since the last release have been added with the PR link and author (check `git log <last-tag>..HEAD`)\n   - The new version number is added at the top after `Master`\n1. Update the version at the top of `Makefile`\n1. Run `make release`\n1. Run `make archive`\n1. Push commit and tag to github\n1. Create release from tag on GitHub using the version number and relevant changelog contents, attaching `xcodegen.zip` and `xcodegen.artifactbundle.zip`\n"
  },
  {
    "path": "SettingPresets/Configs/debug.yml",
    "content": "---\n# Settings take from the following file and sorted\n# /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_ProjectSettings.xctemplate/TemplateInfo.plist\nDEBUG_INFORMATION_FORMAT: dwarf\nENABLE_TESTABILITY: YES\nGCC_DYNAMIC_NO_PIC: NO\nGCC_OPTIMIZATION_LEVEL: '0'\nGCC_PREPROCESSOR_DEFINITIONS: [\"$(inherited)\", \"DEBUG=1\"]\nMTL_ENABLE_DEBUG_INFO: INCLUDE_SOURCE\nONLY_ACTIVE_ARCH: YES\n\n# Swift Settings\nSWIFT_ACTIVE_COMPILATION_CONDITIONS: DEBUG\nSWIFT_OPTIMIZATION_LEVEL: -Onone\n"
  },
  {
    "path": "SettingPresets/Configs/release.yml",
    "content": "---\n# Settings take from the following file and sorted\n# /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_ProjectSettings.xctemplate/TemplateInfo.plist\nDEBUG_INFORMATION_FORMAT: dwarf-with-dsym\nENABLE_NS_ASSERTIONS: NO\nMTL_ENABLE_DEBUG_INFO: NO\n\n# Swift Settings\nSWIFT_COMPILATION_MODE: wholemodule\nSWIFT_OPTIMIZATION_LEVEL: -O\n"
  },
  {
    "path": "SettingPresets/Platforms/iOS.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\"]\nSDKROOT: iphoneos\nTARGETED_DEVICE_FAMILY: '1,2'\n"
  },
  {
    "path": "SettingPresets/Platforms/macOS.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/../Frameworks\"]\nSDKROOT: macosx\nCOMBINE_HIDPI_IMAGES: 'YES'\n"
  },
  {
    "path": "SettingPresets/Platforms/tvOS.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\"]\nSDKROOT: appletvos\nTARGETED_DEVICE_FAMILY: 3\n"
  },
  {
    "path": "SettingPresets/Platforms/visionOS.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\"]\nSDKROOT: xros\nTARGETED_DEVICE_FAMILY: 7\n"
  },
  {
    "path": "SettingPresets/Platforms/watchOS.yml",
    "content": "SDKROOT: watchos\nSKIP_INSTALL: 'YES'\nTARGETED_DEVICE_FAMILY: 4\n"
  },
  {
    "path": "SettingPresets/Product_Platform/app-extension_macOS.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/../Frameworks\", \"@executable_path/../../../../Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Product_Platform/application_iOS.yml",
    "content": "CODE_SIGN_IDENTITY: iPhone Developer\nASSETCATALOG_COMPILER_APPICON_NAME: AppIcon\n"
  },
  {
    "path": "SettingPresets/Product_Platform/application_macOS.yml",
    "content": "ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon\n"
  },
  {
    "path": "SettingPresets/Product_Platform/application_tvOS.yml",
    "content": "ASSETCATALOG_COMPILER_APPICON_NAME: App Icon & Top Shelf Image\nASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME: LaunchImage\n"
  },
  {
    "path": "SettingPresets/Product_Platform/application_visionOS.yml",
    "content": "ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon\n"
  },
  {
    "path": "SettingPresets/Product_Platform/application_watchOS.yml",
    "content": "ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon\n"
  },
  {
    "path": "SettingPresets/Product_Platform/bundle.unit-test_macOS.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/../Frameworks\", \"@loader_path/../Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/app-extension.intents-service.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@executable_path/../../Frameworks\", \"@executable_path/../../../../Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/app-extension.messages.yml",
    "content": "ASSETCATALOG_COMPILER_APPICON_NAME: iMessage App Icon\nLD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@executable_path/../../Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/app-extension.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@executable_path/../../Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/bundle.ui-testing.yml",
    "content": "BUNDLE_LOADER: $(TEST_HOST)\nLD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@loader_path/Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/bundle.unit-test.yml",
    "content": "BUNDLE_LOADER: $(TEST_HOST)\nLD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@loader_path/Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/framework.static.yml",
    "content": "CURRENT_PROJECT_VERSION: 1\nDEFINES_MODULE: 'YES'\nCODE_SIGN_IDENTITY: \"\"\nDYLIB_COMPATIBILITY_VERSION: 1\nDYLIB_CURRENT_VERSION: 1\nVERSIONING_SYSTEM: \"apple-generic\"\nINSTALL_PATH: \"$(LOCAL_LIBRARY_DIR)/Frameworks\"\nDYLIB_INSTALL_NAME_BASE: \"@rpath\"\nSKIP_INSTALL: 'YES'\n"
  },
  {
    "path": "SettingPresets/Products/framework.yml",
    "content": "CURRENT_PROJECT_VERSION: 1\nDEFINES_MODULE: 'YES'\nCODE_SIGN_IDENTITY: \"\"\nDYLIB_COMPATIBILITY_VERSION: 1\nDYLIB_CURRENT_VERSION: 1\nVERSIONING_SYSTEM: \"apple-generic\"\nINSTALL_PATH: \"$(LOCAL_LIBRARY_DIR)/Frameworks\"\nDYLIB_INSTALL_NAME_BASE: \"@rpath\"\nSKIP_INSTALL: 'YES'\n"
  },
  {
    "path": "SettingPresets/Products/library.static.yml",
    "content": "SKIP_INSTALL: 'YES'\n"
  },
  {
    "path": "SettingPresets/Products/tv-app-extension.yml",
    "content": "SKIP_INSTALL: 'YES'\nLD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@executable_path/../../Frameworks\"]\n"
  },
  {
    "path": "SettingPresets/Products/watchkit2-extension.yml",
    "content": "LD_RUNPATH_SEARCH_PATHS: [\"$(inherited)\", \"@executable_path/Frameworks\", \"@executable_path/../../Frameworks\"]\nASSETCATALOG_COMPILER_COMPLICATION_NAME: Complication\n"
  },
  {
    "path": "SettingPresets/SupportedDestinations/iOS.yml",
    "content": "SUPPORTED_PLATFORMS: iphoneos iphonesimulator\nTARGETED_DEVICE_FAMILY: '1,2'\nSUPPORTS_MACCATALYST: NO\nSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: YES\nSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD: YES\n"
  },
  {
    "path": "SettingPresets/SupportedDestinations/macCatalyst.yml",
    "content": "SUPPORTS_MACCATALYST: YES\nSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: NO\n"
  },
  {
    "path": "SettingPresets/SupportedDestinations/macOS.yml",
    "content": "SUPPORTED_PLATFORMS: macosx\nSUPPORTS_MACCATALYST: NO\nSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: NO\n"
  },
  {
    "path": "SettingPresets/SupportedDestinations/tvOS.yml",
    "content": "SUPPORTED_PLATFORMS: appletvos appletvsimulator\nTARGETED_DEVICE_FAMILY: '3'\n"
  },
  {
    "path": "SettingPresets/SupportedDestinations/visionOS.yml",
    "content": "SUPPORTED_PLATFORMS: xros xrsimulator\nTARGETED_DEVICE_FAMILY: '7'\nSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD: NO\n"
  },
  {
    "path": "SettingPresets/SupportedDestinations/watchOS.yml",
    "content": "SUPPORTED_PLATFORMS: watchos watchsimulator\nTARGETED_DEVICE_FAMILY: '4'\n"
  },
  {
    "path": "SettingPresets/base.yml",
    "content": "---\n# Settings take from the following file and sorted\n# /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_ProjectSettings.xctemplate/TemplateInfo.plist\nALWAYS_SEARCH_USER_PATHS: NO\nCLANG_ANALYZER_NONNULL: YES\nCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION: YES_AGGRESSIVE\nCLANG_CXX_LANGUAGE_STANDARD: gnu++14\nCLANG_CXX_LIBRARY: libc++\nCLANG_ENABLE_MODULES: YES\nCLANG_ENABLE_OBJC_ARC: YES\nCLANG_ENABLE_OBJC_WEAK: YES\nCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING: YES\nCLANG_WARN_BOOL_CONVERSION: YES\nCLANG_WARN_COMMA: YES\nCLANG_WARN_CONSTANT_CONVERSION: YES\nCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS: YES\nCLANG_WARN_DIRECT_OBJC_ISA_USAGE: YES_ERROR\nCLANG_WARN_DOCUMENTATION_COMMENTS: YES\nCLANG_WARN_EMPTY_BODY: YES\nCLANG_WARN_ENUM_CONVERSION: YES\nCLANG_WARN_INFINITE_RECURSION: YES\nCLANG_WARN_INT_CONVERSION: YES\nCLANG_WARN_NON_LITERAL_NULL_CONVERSION: YES\nCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF: YES\nCLANG_WARN_OBJC_LITERAL_CONVERSION: YES\nCLANG_WARN_OBJC_ROOT_CLASS: YES_ERROR\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER: YES\nCLANG_WARN_RANGE_LOOP_ANALYSIS: YES\nCLANG_WARN_STRICT_PROTOTYPES: YES\nCLANG_WARN_SUSPICIOUS_MOVE: YES\nCLANG_WARN_UNGUARDED_AVAILABILITY: YES_AGGRESSIVE\nCLANG_WARN_UNREACHABLE_CODE: YES\nCLANG_WARN__DUPLICATE_METHOD_MATCH: YES\nCOPY_PHASE_STRIP: NO\nENABLE_STRICT_OBJC_MSGSEND: YES\nGCC_C_LANGUAGE_STANDARD: gnu11\nGCC_NO_COMMON_BLOCKS: YES\nGCC_WARN_64_TO_32_BIT_CONVERSION: YES\nGCC_WARN_ABOUT_RETURN_TYPE: YES_ERROR\nGCC_WARN_UNDECLARED_SELECTOR: YES\nGCC_WARN_UNINITIALIZED_AUTOS: YES_AGGRESSIVE\nGCC_WARN_UNUSED_FUNCTION: YES\nGCC_WARN_UNUSED_VARIABLE: YES\nMTL_FAST_MATH: YES\n\n# Target Settings\nPRODUCT_NAME: $(TARGET_NAME)\n\n# Swift Settings\nSWIFT_VERSION: '5.0'\n"
  },
  {
    "path": "Sources/ProjectSpec/AggregateTarget.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport XcodeProj\n\npublic struct AggregateTarget: ProjectTarget {\n    public var name: String\n    public var type: PBXProductType = .none\n    public var targets: [String]\n    public var settings: Settings\n    public var buildScripts: [BuildScript]\n    public var buildToolPlugins: [BuildToolPlugin]\n    public var configFiles: [String: String]\n    public var scheme: TargetScheme?\n    public var attributes: [String: Any]\n\n    public init(\n        name: String,\n        targets: [String],\n        settings: Settings = .empty,\n        configFiles: [String: String] = [:],\n        buildScripts: [BuildScript] = [],\n        buildToolPlugins: [BuildToolPlugin] = [],\n        scheme: TargetScheme? = nil,\n        attributes: [String: Any] = [:]\n    ) {\n        self.name = name\n        self.targets = targets\n        self.settings = settings\n        self.configFiles = configFiles\n        self.buildScripts = buildScripts\n        self.buildToolPlugins = buildToolPlugins\n        self.scheme = scheme\n        self.attributes = attributes\n    }\n}\n\nextension AggregateTarget: CustomStringConvertible {\n\n    public var description: String {\n        \"\\(name)\\(targets.isEmpty ? \"\" : \": \\(targets.joined(separator: \", \"))\")\"\n    }\n}\n\nextension AggregateTarget: Equatable {\n\n    public static func == (lhs: AggregateTarget, rhs: AggregateTarget) -> Bool {\n        lhs.name == rhs.name &&\n            lhs.targets == rhs.targets &&\n            lhs.settings == rhs.settings &&\n            lhs.configFiles == rhs.configFiles &&\n            lhs.buildScripts == rhs.buildScripts &&\n            lhs.buildToolPlugins == rhs.buildToolPlugins &&\n            lhs.scheme == rhs.scheme &&\n            NSDictionary(dictionary: lhs.attributes).isEqual(to: rhs.attributes)\n    }\n}\n\nextension AggregateTarget: NamedJSONDictionaryConvertible {\n\n    public init(name: String, jsonDictionary: JSONDictionary) throws {\n        self.name = jsonDictionary.json(atKeyPath: \"name\") ?? name\n        targets = jsonDictionary.json(atKeyPath: \"targets\") ?? []\n        settings = try BuildSettingsParser(jsonDictionary: jsonDictionary).parse()\n        configFiles = jsonDictionary.json(atKeyPath: \"configFiles\") ?? [:]\n        buildScripts = jsonDictionary.json(atKeyPath: \"buildScripts\") ?? []\n        buildToolPlugins = jsonDictionary.json(atKeyPath: \"buildToolPlugins\") ?? []\n        scheme = jsonDictionary.json(atKeyPath: \"scheme\")\n        attributes = jsonDictionary.json(atKeyPath: \"attributes\") ?? [:]\n    }\n}\n\nextension AggregateTarget: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"settings\": settings.toJSONValue(),\n            \"targets\": targets,\n            \"configFiles\": configFiles,\n            \"attributes\": attributes,\n            \"buildScripts\": buildScripts.map { $0.toJSONValue() },\n            \"buildToolPlugins\": buildToolPlugins.map { $0.toJSONValue() },\n            \"scheme\": scheme?.toJSONValue(),\n        ] as [String: Any?]\n    }\n}\n\nextension AggregateTarget: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .dictionary([\n                .string(\"configFiles\"),\n                .object(\"buildScripts\", BuildScript.pathProperties),\n            ]),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Array+Extension.swift",
    "content": "extension Array where Element == [String: Any?] {\n    func removingEmptyArraysDictionariesAndNils() -> [[String: Any]] {\n        var new: [[String: Any]] = []\n        forEach { element in\n            new.append(element.removingEmptyArraysDictionariesAndNils())\n        }\n        return new\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Breakpoint.swift",
    "content": "import Foundation\nimport XcodeProj\nimport JSONUtilities\n\npublic typealias BreakpointActionExtensionID = XCBreakpointList.BreakpointProxy.BreakpointContent.BreakpointActionProxy.ActionExtensionID\npublic typealias BreakpointExtensionID = XCBreakpointList.BreakpointProxy.BreakpointExtensionID\n\npublic struct Breakpoint: Equatable {\n\n    public enum BreakpointType: Equatable {\n\n        public struct Exception: Equatable {\n\n            public enum Scope: String, Equatable {\n                case all = \"0\"\n                case objectiveC = \"1\"\n                case cpp = \"2\"\n            }\n\n            public enum StopOnStyle: String, Equatable {\n                case `throw` = \"0\"\n                case `catch` = \"1\"\n            }\n\n            public var scope: Scope\n            public var stopOnStyle: StopOnStyle\n\n            public init(scope: Breakpoint.BreakpointType.Exception.Scope = .objectiveC,\n                        stopOnStyle: Breakpoint.BreakpointType.Exception.StopOnStyle = .throw) {\n                self.scope = scope\n                self.stopOnStyle = stopOnStyle\n            }\n        }\n        case file(path: String, line: Int, column: Int?)\n        case exception(Exception)\n        case swiftError\n        case openGLError\n        case symbolic(symbol: String?, module: String?)\n        case ideConstraintError\n        case ideTestFailure\n        case runtimeIssue\n    }\n\n    public enum Action: Equatable {\n\n        public struct Log: Equatable {\n\n            public enum ConveyanceType: String, Equatable {\n                case console = \"0\"\n                case speak = \"1\"\n            }\n\n            public var message: String?\n            public var conveyanceType: ConveyanceType\n\n            public init(message: String? = nil, conveyanceType: Breakpoint.Action.Log.ConveyanceType = .console) {\n                self.message = message\n                self.conveyanceType = conveyanceType\n            }\n        }\n\n        public enum Sound: String, Equatable {\n            case basso = \"Basso\"\n            case blow = \"Blow\"\n            case bottle = \"Bottle\"\n            case frog = \"Frog\"\n            case funk = \"Funk\"\n            case glass = \"Glass\"\n            case hero = \"Hero\"\n            case morse = \"Morse\"\n            case ping = \"Ping\"\n            case pop = \"Pop\"\n            case purr = \"Purr\"\n            case sosumi = \"Sosumi\"\n            case submarine = \"Submarine\"\n            case tink = \"Tink\"\n        }\n\n        case debuggerCommand(String?)\n        case log(Log)\n        case shellCommand(path: String?, arguments: String?, waitUntilDone: Bool = false)\n        case graphicsTrace\n        case appleScript(String?)\n        case sound(Sound)\n    }\n\n    public var type: BreakpointType\n    public var enabled: Bool\n    public var ignoreCount: Int\n    public var continueAfterRunningActions: Bool\n    public var condition: String?\n    public var actions: [Breakpoint.Action]\n\n    public init(type: BreakpointType,\n                enabled: Bool = true,\n                ignoreCount: Int = 0,\n                continueAfterRunningActions: Bool = false,\n                filePath: String? = nil,\n                line: Int? = nil,\n                condition: String? = nil,\n                actions: [Breakpoint.Action] = []) {\n        self.type = type\n        self.enabled = enabled\n        self.ignoreCount = ignoreCount\n        self.continueAfterRunningActions = continueAfterRunningActions\n        self.condition = condition\n        self.actions = actions\n    }\n}\n\nextension Breakpoint.BreakpointType.Exception.Scope {\n\n    public init(string: String) throws {\n        let string = string.lowercased()\n        switch string {\n        case \"all\":\n            self = .all\n        case \"objective-c\":\n            self = .objectiveC\n        case \"c++\":\n            self = .cpp\n        default:\n            throw SpecParsingError.unknownBreakpointScope(string)\n        }\n    }\n}\n\nextension Breakpoint.BreakpointType.Exception.StopOnStyle {\n\n    public init(string: String) throws {\n        let string = string.lowercased()\n        switch string {\n        case \"throw\":\n            self = .throw\n        case \"catch\":\n            self = .catch\n        default:\n            throw SpecParsingError.unknownBreakpointStopOnStyle(string)\n        }\n    }\n}\n\nextension Breakpoint.Action.Log.ConveyanceType {\n\n    init(string: String) throws {\n        let string = string.lowercased()\n        switch string {\n        case \"console\":\n            self = .console\n        case \"speak\":\n            self = .speak\n        default:\n            throw SpecParsingError.unknownBreakpointActionConveyanceType(string)\n        }\n    }\n}\n\nextension Breakpoint.Action.Sound {\n\n    init(name: String) throws {\n        guard let sound = Self.init(rawValue: name) else {\n            throw SpecParsingError.unknownBreakpointActionSoundName(name)\n        }\n        self = sound\n    }\n}\n\nextension Breakpoint.Action: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        let idString: String = try jsonDictionary.json(atKeyPath: \"type\")\n        let id = try BreakpointActionExtensionID(string: idString)\n        switch id {\n        case .debuggerCommand:\n            let command: String? = jsonDictionary.json(atKeyPath: \"command\")\n            self = .debuggerCommand(command)\n        case .log:\n            let message: String? = jsonDictionary.json(atKeyPath: \"message\")\n            let conveyanceType: Log.ConveyanceType\n            if jsonDictionary[\"conveyanceType\"] != nil {\n                let conveyanceTypeString: String = try jsonDictionary.json(atKeyPath: \"conveyanceType\")\n                conveyanceType = try .init(string: conveyanceTypeString)\n            } else {\n                conveyanceType = .console\n            }\n            self = .log(.init(message: message, conveyanceType: conveyanceType))\n        case .shellCommand:\n            let path: String? = jsonDictionary.json(atKeyPath: \"path\")\n            let arguments: String? = jsonDictionary.json(atKeyPath: \"arguments\")\n            let waitUntilDone = jsonDictionary.json(atKeyPath: \"waitUntilDone\") ?? false\n            self = .shellCommand(path: path, arguments: arguments, waitUntilDone: waitUntilDone)\n        case .graphicsTrace:\n            self = .graphicsTrace\n        case .appleScript:\n            let script: String? = jsonDictionary.json(atKeyPath: \"script\")\n            self = .appleScript(script)\n        case .sound:\n            let sound: Sound\n            if jsonDictionary[\"sound\"] != nil {\n                let name: String = try jsonDictionary.json(atKeyPath: \"sound\")\n                sound = try .init(name: name)\n            } else {\n                sound = .basso\n            }\n            self = .sound(sound)\n        case .openGLError:\n            throw SpecParsingError.unknownBreakpointActionType(idString)\n        }\n    }\n}\n\nextension Breakpoint: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        let idString: String = try jsonDictionary.json(atKeyPath: \"type\")\n        let id = try BreakpointExtensionID(string: idString)\n        switch id {\n        case .file:\n            let path: String = try jsonDictionary.json(atKeyPath: \"path\")\n            let line: Int = try jsonDictionary.json(atKeyPath: \"line\")\n            let column: Int? = jsonDictionary.json(atKeyPath: \"column\")\n            type = .file(path: path, line: line, column: column)\n        case .exception:\n            let scope: BreakpointType.Exception.Scope\n            if jsonDictionary[\"scope\"] != nil {\n                let scopeString: String = try jsonDictionary.json(atKeyPath: \"scope\")\n                scope = try .init(string: scopeString)\n            } else {\n                scope = .objectiveC\n            }\n            let stopOnStyle: BreakpointType.Exception.StopOnStyle\n            if jsonDictionary[\"stopOnStyle\"] != nil {\n                let stopOnStyleString: String = try jsonDictionary.json(atKeyPath: \"stopOnStyle\")\n                stopOnStyle = try .init(string: stopOnStyleString)\n            } else {\n                stopOnStyle = .throw\n            }\n            type = .exception(.init(scope: scope, stopOnStyle: stopOnStyle))\n        case .swiftError:\n            type = .swiftError\n        case .openGLError:\n            type = .openGLError\n        case .symbolic:\n            let symbol: String? = jsonDictionary.json(atKeyPath: \"symbol\")\n            let module: String? = jsonDictionary.json(atKeyPath: \"module\")\n            type = .symbolic(symbol: symbol, module: module)\n        case .ideConstraintError:\n            type = .ideConstraintError\n        case .ideTestFailure:\n            type = .ideTestFailure\n        case .runtimeIssue:\n            type = .runtimeIssue\n        }\n        enabled = jsonDictionary.json(atKeyPath: \"enabled\") ?? true\n        ignoreCount = jsonDictionary.json(atKeyPath: \"ignoreCount\") ?? 0\n        continueAfterRunningActions = jsonDictionary.json(atKeyPath: \"continueAfterRunningActions\") ?? false\n        condition = jsonDictionary.json(atKeyPath: \"condition\")\n        if jsonDictionary[\"actions\"] != nil {\n            actions = try jsonDictionary.json(atKeyPath: \"actions\", invalidItemBehaviour: .fail)\n        } else {\n            actions = []\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/BuildPhaseSpec.swift",
    "content": "//\n//  File.swift\n//  \n//\n//  Created by Yonas Kolb on 1/5/20.\n//\n\nimport Foundation\nimport XcodeProj\nimport JSONUtilities\n\npublic enum BuildPhaseSpec: Equatable {\n    case sources\n    case headers\n    case resources\n    case copyFiles(CopyFilesSettings)\n    case none\n    // Not currently exposed as selectable options, but used internally\n    case frameworks\n    case runScript\n    case carbonResources\n\n    public struct CopyFilesSettings: Equatable, Hashable {\n        public static let xpcServices = CopyFilesSettings(\n            destination: .productsDirectory,\n            subpath: \"$(CONTENTS_FOLDER_PATH)/XPCServices\",\n            phaseOrder: .postCompile\n        )\n\n        public static let plugins = CopyFilesSettings(\n            destination: .plugins,\n            subpath: \"$(CONTENTS_FOLDER_PATH)/PlugIns\",\n            phaseOrder: .postCompile\n        )\n\n        public enum Destination: String {\n            case absolutePath\n            case productsDirectory\n            case wrapper\n            case executables\n            case resources\n            case javaResources\n            case frameworks\n            case sharedFrameworks\n            case sharedSupport\n            case plugins\n\n            public var destination: PBXCopyFilesBuildPhase.SubFolder? {\n                switch self {\n                case .absolutePath: return .absolutePath\n                case .productsDirectory: return .productsDirectory\n                case .wrapper: return .wrapper\n                case .executables: return .executables\n                case .resources: return .resources\n                case .javaResources: return .javaResources\n                case .frameworks: return .frameworks\n                case .sharedFrameworks: return .sharedFrameworks\n                case .sharedSupport: return .sharedSupport\n                case .plugins: return .plugins\n                }\n            }\n        }\n\n        public enum PhaseOrder: String {\n            /// Run before the Compile Sources phase\n            case preCompile\n            /// Run after the Compile Sources and post-compile Run Script phases\n            case postCompile\n        }\n\n        public var destination: Destination\n        public var subpath: String\n        public var phaseOrder: PhaseOrder\n\n        public init(\n            destination: Destination,\n            subpath: String,\n            phaseOrder: PhaseOrder\n        ) {\n            self.destination = destination\n            self.subpath = subpath\n            self.phaseOrder = phaseOrder\n        }\n    }\n\n    public var buildPhase: BuildPhase? {\n        switch self {\n        case .sources: return .sources\n        case .headers: return .headers\n        case .resources: return .resources\n        case .copyFiles: return .copyFiles\n        case .frameworks: return .frameworks\n        case .runScript: return .runScript\n        case .carbonResources: return .carbonResources\n        case .none: return nil\n        }\n    }\n}\n\nextension BuildPhaseSpec {\n\n    public init(string: String) throws {\n        switch string {\n        case \"sources\": self = .sources\n        case \"headers\": self = .headers\n        case \"resources\": self = .resources\n        case \"copyFiles\":\n            throw SpecParsingError.invalidSourceBuildPhase(\"copyFiles must specify a \\\"destination\\\" and optional \\\"subpath\\\"\")\n        case \"none\": self = .none\n        default:\n            throw SpecParsingError.invalidSourceBuildPhase(string.quoted)\n        }\n    }\n}\n\nextension BuildPhaseSpec: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        self = .copyFiles(try jsonDictionary.json(atKeyPath: \"copyFiles\"))\n    }\n}\n\nextension BuildPhaseSpec: JSONEncodable {\n    public func toJSONValue() -> Any {\n        switch self {\n        case .sources: return \"sources\"\n        case .headers: return \"headers\"\n        case .resources: return \"resources\"\n        case .copyFiles(let files): return [\"copyFiles\": files.toJSONValue()]\n        case .none: return \"none\"\n        case .frameworks: fatalError(\"invalid build phase\")\n        case .runScript: fatalError(\"invalid build phase\")\n        case .carbonResources: fatalError(\"invalid build phase\")\n        }\n    }\n}\n\nextension BuildPhaseSpec.CopyFilesSettings: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        destination = try jsonDictionary.json(atKeyPath: \"destination\")\n        subpath = jsonDictionary.json(atKeyPath: \"subpath\") ?? \"\"\n        phaseOrder = .postCompile\n    }\n}\n\nextension BuildPhaseSpec.CopyFilesSettings: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"destination\": destination.rawValue,\n            \"subpath\": subpath,\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/BuildRule.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct BuildRule: Equatable {\n\n    public static let scriptCompilerSpec = \"com.apple.compilers.proxy.script\"\n    public static let filePatternFileType = \"pattern.proxy\"\n    public static let runOncePerArchitectureDefault = true\n\n    public enum FileType: Equatable {\n        case type(String)\n        case pattern(String)\n\n        public var fileType: String {\n            switch self {\n            case let .type(fileType): return fileType\n            case .pattern: return BuildRule.filePatternFileType\n            }\n        }\n\n        public var pattern: String? {\n            switch self {\n            case .type: return nil\n            case let .pattern(pattern): return pattern\n            }\n        }\n    }\n\n    public enum Action: Equatable {\n        case compilerSpec(String)\n        case script(String)\n\n        public var compilerSpec: String {\n            switch self {\n            case let .compilerSpec(compilerSpec): return compilerSpec\n            case .script: return BuildRule.scriptCompilerSpec\n            }\n        }\n\n        public var script: String? {\n            switch self {\n            case .compilerSpec: return nil\n            case let .script(script): return script\n            }\n        }\n    }\n\n    public var fileType: FileType\n    public var action: Action\n    public var outputFiles: [String]\n    public var outputFilesCompilerFlags: [String]\n    public var name: String?\n    public var runOncePerArchitecture: Bool\n\n    public init(\n        fileType: FileType, \n        action: Action, \n        name: String? = nil, \n        outputFiles: [String] = [], \n        outputFilesCompilerFlags: [String] = [], \n        runOncePerArchitecture: Bool = runOncePerArchitectureDefault\n    ) {\n        self.fileType = fileType\n        self.action = action\n        self.name = name\n        self.outputFiles = outputFiles\n        self.outputFilesCompilerFlags = outputFilesCompilerFlags\n        self.runOncePerArchitecture = runOncePerArchitecture\n    }\n}\n\nextension BuildRule: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n\n        if let fileType: String = jsonDictionary.json(atKeyPath: \"fileType\") {\n            self.fileType = .type(fileType)\n        } else {\n            fileType = .pattern(try jsonDictionary.json(atKeyPath: \"filePattern\"))\n        }\n\n        if let compilerSpec: String = jsonDictionary.json(atKeyPath: \"compilerSpec\") {\n            action = .compilerSpec(compilerSpec)\n        } else {\n            action = .script(try jsonDictionary.json(atKeyPath: \"script\"))\n        }\n\n        outputFiles = jsonDictionary.json(atKeyPath: \"outputFiles\") ?? []\n        outputFilesCompilerFlags = jsonDictionary.json(atKeyPath: \"outputFilesCompilerFlags\") ?? []\n        name = jsonDictionary.json(atKeyPath: \"name\")\n        runOncePerArchitecture = jsonDictionary.json(atKeyPath: \"runOncePerArchitecture\") ?? BuildRule.runOncePerArchitectureDefault\n    }\n}\n\nextension BuildRule: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"outputFiles\": outputFiles,\n            \"outputFilesCompilerFlags\": outputFilesCompilerFlags,\n            \"name\": name,\n        ]\n\n        switch fileType {\n        case .pattern(let string):\n            dict[\"filePattern\"] = string\n        case .type(let string):\n            dict[\"fileType\"] = string\n        }\n\n        switch action {\n        case .compilerSpec(let string):\n            dict[\"compilerSpec\"] = string\n        case .script(let string):\n            dict[\"script\"] = string\n        }\n\n        if runOncePerArchitecture != BuildRule.runOncePerArchitectureDefault {\n            dict[\"runOncePerArchitecture\"] = runOncePerArchitecture\n        }\n\n        return dict\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/BuildScript.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct BuildScript: Equatable {\n    public static let runOnlyWhenInstallingDefault = false\n    public static let showEnvVarsDefault = true\n    public static let basedOnDependencyAnalysisDefault = true\n\n    public var script: ScriptType\n    public var name: String?\n    public var shell: String?\n    public var inputFiles: [String]\n    public var outputFiles: [String]\n    public var inputFileLists: [String]\n    public var outputFileLists: [String]\n    public var runOnlyWhenInstalling: Bool\n    public let showEnvVars: Bool\n    public let basedOnDependencyAnalysis: Bool\n    public let discoveredDependencyFile: String?\n\n    public enum ScriptType: Equatable {\n        case path(String)\n        case script(String)\n    }\n\n    public init(\n        script: ScriptType,\n        name: String? = nil,\n        inputFiles: [String] = [],\n        outputFiles: [String] = [],\n        inputFileLists: [String] = [],\n        outputFileLists: [String] = [],\n        shell: String? = nil,\n        runOnlyWhenInstalling: Bool = runOnlyWhenInstallingDefault,\n        showEnvVars: Bool = showEnvVarsDefault,\n        basedOnDependencyAnalysis: Bool = basedOnDependencyAnalysisDefault,\n        discoveredDependencyFile: String? = nil\n    ) {\n        self.script = script\n        self.name = name\n        self.inputFiles = inputFiles\n        self.outputFiles = outputFiles\n        self.inputFileLists = inputFileLists\n        self.outputFileLists = outputFileLists\n        self.shell = shell\n        self.runOnlyWhenInstalling = runOnlyWhenInstalling\n        self.showEnvVars = showEnvVars\n        self.basedOnDependencyAnalysis = basedOnDependencyAnalysis\n        self.discoveredDependencyFile = discoveredDependencyFile\n    }\n}\n\nextension BuildScript: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        name = jsonDictionary.json(atKeyPath: \"name\")\n        inputFiles = jsonDictionary.json(atKeyPath: \"inputFiles\") ?? []\n        outputFiles = jsonDictionary.json(atKeyPath: \"outputFiles\") ?? []\n        inputFileLists = jsonDictionary.json(atKeyPath: \"inputFileLists\") ?? []\n        outputFileLists = jsonDictionary.json(atKeyPath: \"outputFileLists\") ?? []\n\n        if let string: String = jsonDictionary.json(atKeyPath: \"script\") {\n            script = .script(string)\n        } else {\n            let path: String = try jsonDictionary.json(atKeyPath: \"path\")\n            script = .path(path)\n        }\n        shell = jsonDictionary.json(atKeyPath: \"shell\")\n        runOnlyWhenInstalling = jsonDictionary.json(atKeyPath: \"runOnlyWhenInstalling\") ?? BuildScript.runOnlyWhenInstallingDefault\n        showEnvVars = jsonDictionary.json(atKeyPath: \"showEnvVars\") ?? BuildScript.showEnvVarsDefault\n        basedOnDependencyAnalysis = jsonDictionary.json(atKeyPath: \"basedOnDependencyAnalysis\") ?? BuildScript.basedOnDependencyAnalysisDefault\n        discoveredDependencyFile = jsonDictionary.json(atKeyPath: \"discoveredDependencyFile\")\n    }\n}\n\nextension BuildScript: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"inputFiles\": inputFiles,\n            \"inputFileLists\": inputFileLists,\n            \"outputFiles\": outputFiles,\n            \"outputFileLists\": outputFileLists,\n            \"runOnlyWhenInstalling\": runOnlyWhenInstalling,\n            \"name\": name,\n            \"shell\": shell,\n        ]\n\n        if showEnvVars != BuildScript.showEnvVarsDefault {\n            dict[\"showEnvVars\"] = showEnvVars\n        }\n\n        if basedOnDependencyAnalysis != BuildScript.basedOnDependencyAnalysisDefault {\n            dict[\"basedOnDependencyAnalysis\"] = basedOnDependencyAnalysis\n        }\n\n        switch script {\n        case .path(let string):\n            dict[\"path\"] = string\n        case .script(let string):\n            dict[\"script\"] = string\n        }\n\n        if let discoveredDependencyFile = discoveredDependencyFile {\n            dict[\"discoveredDependencyFile\"] = discoveredDependencyFile\n        }\n\n        return dict\n    }\n}\n\nextension BuildScript: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"path\"),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/BuildSettingsContainer.swift",
    "content": "import Foundation\n\npublic protocol BuildSettingsContainer {\n\n    var settings: Settings { get }\n    var configFiles: [String: String] { get }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/BuildSettingsExtractor.swift",
    "content": "import Foundation\nimport JSONUtilities\n\n/// A helper for extracting and validating the `Settings` object from a JSON dictionary.\nstruct BuildSettingsParser {\n    let jsonDictionary: JSONDictionary\n\n    /// Attempts to extract and parse the `Settings` from the dictionary.\n    ///\n    /// - Returns: A valid `Settings` object\n    func parse() throws -> Settings {\n        do {\n            return try jsonDictionary.json(atKeyPath: \"settings\")\n        } catch let specParsingError as SpecParsingError {\n            // Re-throw `SpecParsingError` to prevent the misuse of settings.configs.\n            throw specParsingError\n        } catch {\n            // Ignore all errors except `SpecParsingError`\n            return .empty\n        }\n    }\n\n    /// Attempts to extract and parse setting groups from the dictionary with fallback defaults.\n    ///\n    /// - Returns: Parsed setting groups or default groups if parsing fails\n    func parseSettingGroups() throws -> [String: Settings] {\n        do {\n            return try jsonDictionary.json(atKeyPath: \"settingGroups\", invalidItemBehaviour: .fail)\n        } catch let specParsingError as SpecParsingError {\n            // Re-throw `SpecParsingError` to prevent the misuse of settingGroups.\n            throw specParsingError\n        } catch {\n            // Ignore all errors except `SpecParsingError`\n            return jsonDictionary.json(atKeyPath: \"settingPresets\") ?? [:]\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/BuildToolPlugin.swift",
    "content": "import Foundation\nimport JSONUtilities\n\n/// Specifies the use of a plug-in product in a target.\npublic struct BuildToolPlugin: Equatable {\n\n    /// The name of the plug-in target.\n    public var plugin: String\n    /// The name of the package that defines the plug-in target.\n    public var package: String\n    \n    public init(\n        plugin: String,\n        package: String\n    ) {\n        self.plugin = plugin\n        self.package = package\n    }\n}\n\nextension BuildToolPlugin: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let plugin: String = jsonDictionary.json(atKeyPath: \"plugin\") {\n            self.plugin = plugin\n        } else {\n            throw SpecParsingError.invalidDependency(jsonDictionary)\n        }\n        \n        if let package: String = jsonDictionary.json(atKeyPath: \"package\") {\n            self.package = package\n        } else {\n            throw SpecParsingError.invalidDependency(jsonDictionary)\n        }\n    }\n}\n\nextension BuildToolPlugin {\n    public var uniqueID: String {\n        return \"\\(plugin)/\\(package)\"\n    }\n}\n\nextension BuildToolPlugin: Hashable {\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(plugin)\n        hasher.combine(package)\n    }\n}\n\nextension BuildToolPlugin: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"plugin\": plugin,\n            \"package\": package\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/CacheFile.swift",
    "content": "import Foundation\nimport XcodeGenCore\nimport Version\n\npublic class CacheFile {\n\n    public let string: String\n\n    init?(version: Version, projectDictionary: [String: Any], project: Project) throws {\n\n        guard #available(OSX 10.13, *) else { return nil }\n\n        let files = Set(project.allTrackedFiles)\n            .map { ((try? $0.relativePath(from: project.basePath)) ?? $0).string }\n            .sorted { $0.localizedStandardCompare($1) == .orderedAscending }\n            .joined(separator: \"\\n\")\n\n        let data = try JSONSerialization.data(withJSONObject: projectDictionary, options: [.sortedKeys, .prettyPrinted])\n        let spec = String(data: data, encoding: .utf8)!\n\n        string = \"\"\"\n        # XCODEGEN VERSION\n        \\(version)\n\n        # SPEC\n        \\(spec)\n\n        # FILES\n        \\(files)\"\n\n        \"\"\"\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Config.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct Config: Hashable {\n    public var name: String\n    public var type: ConfigType?\n\n    public init(name: String, type: ConfigType? = nil) {\n        self.name = name\n        self.type = type\n    }\n\n    public static var defaultConfigs: [Config] = [Config(name: ConfigType.debug.name, type: .debug), Config(name: ConfigType.release.name, type: .release)]\n}\n\npublic enum ConfigType: String, Hashable {\n    case debug\n    case release\n    \n    public var name: String {\n        rawValue.prefix(1).uppercased() + rawValue.dropFirst()\n    }\n}\n\nextension Config {\n\n    public func matchesVariant(_ variant: String, for type: ConfigType) -> Bool {\n        guard self.type == type else { return false }\n        let nameWithoutType = self.name.lowercased()\n            .replacingOccurrences(of: type.name.lowercased(), with: \"\")\n            .trimmingCharacters(in: CharacterSet(charactersIn: \" -_()\"))\n        return nameWithoutType == variant.lowercased()\n    }\n}\n\npublic extension Collection where Element == Config {\n    func first(including configVariant: String, for type: ConfigType) -> Config? {\n        first { $0.matchesVariant(configVariant, for: type) }\n    }\n}\n\n"
  },
  {
    "path": "Sources/ProjectSpec/Decoding.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport Yams\n\nextension Dictionary where Key: JSONKey {\n    public func json<T: NamedJSONDictionaryConvertible>(atKeyPath keyPath: JSONUtilities.KeyPath, invalidItemBehaviour: InvalidItemBehaviour<T> = .remove, parallel: Bool = false) throws -> [T] {\n        guard let dictionary = json(atKeyPath: keyPath) as JSONDictionary? else {\n            return []\n        }\n        if parallel {\n            let defaultError = NSError(domain: \"Unspecified error\", code: 0, userInfo: nil)\n            let keys = Array(dictionary.keys)\n            var itemResults: [Result<T, Error>] = Array(repeating: .failure(defaultError), count: keys.count)\n            itemResults.withUnsafeMutableBufferPointer { buffer in\n                let bufferWrapper = BufferWrapper(buffer: buffer)\n                DispatchQueue.concurrentPerform(iterations: dictionary.count) { idx in\n                    do {\n                        let key = keys[idx]\n                        let jsonDictionary: JSONDictionary = try dictionary.json(atKeyPath: .key(key))\n                        let item = try T(name: key, jsonDictionary: jsonDictionary)\n                        bufferWrapper.buffer[idx] = .success(item)\n                    } catch {\n                        bufferWrapper.buffer[idx] = .failure(error)\n                    }\n                }\n            }\n            return try itemResults.map { try $0.get() }\n        } else {\n            var items: [T] = []\n            for (key, _) in dictionary {\n                let jsonDictionary: JSONDictionary = try dictionary.json(atKeyPath: .key(key))\n                let item = try T(name: key, jsonDictionary: jsonDictionary)\n                items.append(item)\n            }\n            return items\n        }\n    }\n\n    public func json<T: NamedJSONConvertible>(atKeyPath keyPath: JSONUtilities.KeyPath, invalidItemBehaviour: InvalidItemBehaviour<T> = .remove) throws -> [T] {\n        guard let dictionary = json(atKeyPath: keyPath) as JSONDictionary? else {\n            return []\n        }\n        var items: [T] = []\n        for (key, value) in dictionary {\n            let item = try T(name: key, json: value)\n            items.append(item)\n        }\n        return items\n    }\n}\n\nprivate final class BufferWrapper<T>: @unchecked Sendable {\n    var buffer: UnsafeMutableBufferPointer<T>\n\n    init(buffer: UnsafeMutableBufferPointer<T>) {\n        self.buffer = buffer\n    }\n}\n\npublic protocol NamedJSONDictionaryConvertible {\n\n    init(name: String, jsonDictionary: JSONDictionary) throws\n}\n\npublic protocol NamedJSONConvertible {\n\n    init(name: String, json: Any) throws\n}\n\nextension JSONObjectConvertible {\n\n    public init(path: Path) throws {\n        let content: String = try path.read()\n        if content == \"\" {\n            try self.init(jsonDictionary: [:])\n            return\n        }\n        let yaml = try Yams.load(yaml: content)\n        guard let jsonDictionary = yaml as? JSONDictionary else {\n            throw JSONUtilsError.fileNotAJSONDictionary\n        }\n        try self.init(jsonDictionary: jsonDictionary)\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Dependency.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct Dependency: Equatable {\n    public static let removeHeadersDefault = true\n    public static let implicitDefault = false\n    public static let weakLinkDefault = false\n    public static let platformFilterDefault: PlatformFilter = .all\n\n    public var type: DependencyType\n    public var reference: String\n    public var embed: Bool?\n    public var codeSign: Bool?\n    public var removeHeaders: Bool = removeHeadersDefault\n    public var link: Bool?\n    public var implicit: Bool = implicitDefault\n    public var weakLink: Bool = weakLinkDefault\n    public var platformFilter: PlatformFilter = platformFilterDefault\n    public var destinationFilters: [SupportedDestination]?\n    public var platforms: Set<Platform>?\n    public var copyPhase: BuildPhaseSpec.CopyFilesSettings?\n\n    public init(\n        type: DependencyType,\n        reference: String,\n        embed: Bool? = nil,\n        codeSign: Bool? = nil,\n        link: Bool? = nil,\n        implicit: Bool = implicitDefault,\n        weakLink: Bool = weakLinkDefault,\n        platformFilter: PlatformFilter = platformFilterDefault,\n        destinationFilters: [SupportedDestination]? = nil,\n        platforms: Set<Platform>? = nil,\n        copyPhase: BuildPhaseSpec.CopyFilesSettings? = nil\n    ) {\n        self.type = type\n        self.reference = reference\n        self.embed = embed\n        self.codeSign = codeSign\n        self.link = link\n        self.implicit = implicit\n        self.weakLink = weakLink\n        self.platformFilter = platformFilter\n        self.destinationFilters = destinationFilters\n        self.platforms = platforms\n        self.copyPhase = copyPhase\n    }\n    \n    public enum PlatformFilter: String, Equatable {\n        case all\n        case iOS\n        case macOS\n    }\n    \n    public enum CarthageLinkType: String {\n        case dynamic\n        case `static`\n\n        public static let `default` = dynamic\n    }\n\n    public enum DependencyType: Hashable {\n        case target\n        case framework\n        case carthage(findFrameworks: Bool?, linkType: CarthageLinkType)\n        case sdk(root: String?)\n        case package(products: [String])\n        case bundle\n    }\n}\n\nextension Dependency {\n    public var uniqueID: String {\n        switch type {\n        case .package(let products):\n            if !products.isEmpty {\n                return \"\\(reference)/\\(products.joined(separator: \",\"))\"\n            } else {\n                return reference\n            }\n        default: return reference\n        }\n    }\n}\n\nextension Dependency: Hashable {\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(reference)\n        hasher.combine(type)\n    }\n}\n\nextension Dependency: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let target: String = jsonDictionary.json(atKeyPath: \"target\") {\n            type = .target\n            reference = target\n        } else if let framework: String = jsonDictionary.json(atKeyPath: \"framework\") {\n            type = .framework\n            reference = framework\n        } else if let carthage: String = jsonDictionary.json(atKeyPath: \"carthage\") {\n            let findFrameworks: Bool? = jsonDictionary.json(atKeyPath: \"findFrameworks\")\n            let carthageLinkType: CarthageLinkType = (jsonDictionary.json(atKeyPath: \"linkType\") as String?).flatMap(CarthageLinkType.init(rawValue:)) ?? .default\n            type = .carthage(findFrameworks: findFrameworks, linkType: carthageLinkType)\n            reference = carthage\n        } else if let sdk: String = jsonDictionary.json(atKeyPath: \"sdk\") {\n            let sdkRoot: String? = jsonDictionary.json(atKeyPath: \"root\")\n            type = .sdk(root: sdkRoot)\n            reference = sdk\n        } else if let package: String = jsonDictionary.json(atKeyPath: \"package\") {\n            if let products: [String] = jsonDictionary.json(atKeyPath: \"products\") {\n                type = .package(products: products)\n                reference = package\n            } else if let product: String = jsonDictionary.json(atKeyPath: \"product\") {\n                type = .package(products: [product])\n                reference = package\n            } else {\n                type = .package(products: [])\n                reference = package\n            }\n        } else if let bundle: String = jsonDictionary.json(atKeyPath: \"bundle\") {\n            type = .bundle\n            reference = bundle\n        } else {\n            throw SpecParsingError.invalidDependency(jsonDictionary)\n        }\n\n        embed = jsonDictionary.json(atKeyPath: \"embed\")\n        codeSign = jsonDictionary.json(atKeyPath: \"codeSign\")\n        link = jsonDictionary.json(atKeyPath: \"link\")\n\n        if let bool: Bool = jsonDictionary.json(atKeyPath: \"removeHeaders\") {\n            removeHeaders = bool\n        }\n        if let bool: Bool = jsonDictionary.json(atKeyPath: \"implicit\") {\n            implicit = bool\n        }\n        if let bool: Bool = jsonDictionary.json(atKeyPath: \"weak\") {\n            weakLink = bool\n        }\n        \n        if let platformFilterString: String = jsonDictionary.json(atKeyPath: \"platformFilter\"), let platformFilter = PlatformFilter(rawValue: platformFilterString) {\n            self.platformFilter = platformFilter\n        } else {\n            self.platformFilter = .all\n        }\n        \n        if let destinationFilters: [SupportedDestination] = jsonDictionary.json(atKeyPath: \"destinationFilters\") {\n            self.destinationFilters = destinationFilters\n        }\n        \n        if let platforms: [ProjectSpec.Platform] = jsonDictionary.json(atKeyPath: \"platforms\") {\n            self.platforms = Set(platforms)\n        }\n\n        if let object: JSONDictionary = jsonDictionary.json(atKeyPath: \"copy\") {\n            copyPhase = try BuildPhaseSpec.CopyFilesSettings(jsonDictionary: object)\n        }\n    }\n}\n\nextension Dependency: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"embed\": embed,\n            \"codeSign\": codeSign,\n            \"link\": link,\n            \"platforms\": platforms?.map(\\.rawValue).sorted(),\n            \"copy\": copyPhase?.toJSONValue(),\n            \"destinationFilters\": destinationFilters?.map { $0.rawValue },\n        ]\n\n        if removeHeaders != Dependency.removeHeadersDefault {\n            dict[\"removeHeaders\"] = removeHeaders\n        }\n        if implicit != Dependency.implicitDefault {\n            dict[\"implicit\"] = implicit\n        }\n        if weakLink != Dependency.weakLinkDefault {\n            dict[\"weak\"] = weakLink\n        }\n\n        switch type {\n        case .target:\n            dict[\"target\"] = reference\n        case .framework:\n            dict[\"framework\"] = reference\n        case .carthage(let findFrameworks, let linkType):\n            dict[\"carthage\"] = reference\n            if let findFrameworks = findFrameworks {\n                dict[\"findFrameworks\"] = findFrameworks\n            }\n            dict[\"linkType\"] = linkType.rawValue\n        case .sdk:\n            dict[\"sdk\"] = reference\n        case .package:\n            dict[\"package\"] = reference\n        case .bundle:\n            dict[\"bundle\"] = reference\n        }\n\n        return dict\n    }\n}\n\nextension Dependency: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"framework\"),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/DeploymentTarget.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport Version\n\npublic struct DeploymentTarget: Equatable {\n\n    public var iOS: Version?\n    public var tvOS: Version?\n    public var watchOS: Version?\n    public var macOS: Version?\n    public var visionOS: Version?\n\n    public init(\n        iOS: Version? = nil,\n        tvOS: Version? = nil,\n        watchOS: Version? = nil,\n        macOS: Version? = nil,\n        visionOS: Version? = nil\n    ) {\n        self.iOS = iOS\n        self.tvOS = tvOS\n        self.watchOS = watchOS\n        self.macOS = macOS\n        self.visionOS = visionOS\n    }\n\n    public func version(for platform: Platform) -> Version? {\n        switch platform {\n        case .auto: return nil\n        case .iOS: return iOS\n        case .tvOS: return tvOS\n        case .watchOS: return watchOS\n        case .macOS: return macOS\n        case .visionOS: return visionOS\n        }\n    }\n}\n\nextension Platform {\n\n    public var deploymentTargetSetting: String {\n        switch self {\n        case .auto: return \"\"\n        case .iOS: return \"IPHONEOS_DEPLOYMENT_TARGET\"\n        case .tvOS: return \"TVOS_DEPLOYMENT_TARGET\"\n        case .watchOS: return \"WATCHOS_DEPLOYMENT_TARGET\"\n        case .macOS: return \"MACOSX_DEPLOYMENT_TARGET\"\n        case .visionOS: return \"XROS_DEPLOYMENT_TARGET\"\n        }\n    }\n\n    public var sdkRoot: String {\n        switch self {\n        case .auto: return \"auto\"\n        case .iOS: return \"iphoneos\"\n        case .tvOS: return \"appletvos\"\n        case .watchOS: return \"watchos\"\n        case .macOS: return \"macosx\"\n        case .visionOS: return \"xros\"\n        }\n    }\n}\n\nextension Version {\n\n    /// doesn't print patch if 0\n    public var deploymentTarget: String {\n        \"\\(major).\\(minor)\\(patch > 0 ? \".\\(patch)\" : \"\")\"\n    }\n}\n\nextension DeploymentTarget: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n\n        func parseVersion(_ platform: String) throws -> Version? {\n            if let string: String = jsonDictionary.json(atKeyPath: .key(platform)) {\n                return try Version.parse(string)\n            } else if let double: Double = jsonDictionary.json(atKeyPath: .key(platform)) {\n                return try Version.parse(double)\n            } else {\n                return nil\n            }\n        }\n        iOS = try parseVersion(\"iOS\")\n        tvOS = try parseVersion(\"tvOS\")\n        watchOS = try parseVersion(\"watchOS\")\n        macOS = try parseVersion(\"macOS\")\n        visionOS = try parseVersion(\"visionOS\")\n    }\n}\n\nextension DeploymentTarget: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"iOS\": iOS?.description,\n            \"tvOS\": tvOS?.description,\n            \"watchOS\": watchOS?.description,\n            \"macOS\": macOS?.description,\n            \"visionOS\": visionOS?.description,\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Dictionary+Extension.swift",
    "content": "extension Dictionary where Key == String, Value == Any? {\n    func removingEmptyArraysDictionariesAndNils() -> [String: Any] {\n        var new: [String: Any] = [:]\n        filter(outNil).forEach { pair in\n            let value: Any\n            if let array = pair.value as? [[String: Any?]] {\n                value = array.removingEmptyArraysDictionariesAndNils()\n            } else if let dictionary = pair.value as? [String: Any?] {\n                value = dictionary.removingEmptyArraysDictionariesAndNils()\n            } else {\n                value = pair.value! // nil is filtered out :)\n            }\n            new[pair.key] = value\n        }\n        return new\n            .filter(outEmptyArrays)\n            .filter(outEmptyDictionaries)\n    }\n\n    func outEmptyArrays(_ pair: (key: String, value: Any)) -> Bool {\n        guard let array = pair.value as? [Any] else { return true }\n        return !array.isEmpty\n    }\n\n    func outEmptyDictionaries(_ pair: (key: String, value: Any)) -> Bool {\n        guard let dictionary = pair.value as? [String: Any] else { return true }\n        return !dictionary.isEmpty\n    }\n\n    func outNil(_ pair: (key: String, value: Any?)) -> Bool {\n        return pair.value != nil\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Encoding.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic protocol JSONEncodable {\n    // returns JSONDictionary or JSONArray or JSONRawType or nil\n    func toJSONValue() -> Any\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/FileType.swift",
    "content": "//\n//  File.swift\n//  \n//\n//  Created by Yonas Kolb on 1/5/20.\n//\n\nimport Foundation\nimport JSONUtilities\nimport enum XcodeProj.BuildPhase\n\npublic struct FileType: Equatable {\n\n    public enum Defaults {\n        public static let file = true\n    }\n\n    public var file: Bool\n    public var buildPhase: BuildPhaseSpec?\n    public var attributes: [String]\n    public var resourceTags: [String]\n    public var compilerFlags: [String]\n\n    public init(\n        file: Bool = Defaults.file,\n        buildPhase: BuildPhaseSpec? = nil,\n        attributes: [String] = [],\n        resourceTags: [String] = [],\n        compilerFlags: [String] = []\n    ) {\n        self.file = file\n        self.buildPhase = buildPhase\n        self.attributes = attributes\n        self.resourceTags = resourceTags\n        self.compilerFlags = compilerFlags\n    }\n}\n\nextension FileType: JSONObjectConvertible {\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let string: String = jsonDictionary.json(atKeyPath: \"buildPhase\") {\n            buildPhase = try BuildPhaseSpec(string: string)\n        } else if let dict: JSONDictionary = jsonDictionary.json(atKeyPath: \"buildPhase\") {\n            buildPhase = try BuildPhaseSpec(jsonDictionary: dict)\n        }\n        file = jsonDictionary.json(atKeyPath: \"file\") ?? Defaults.file\n        attributes = jsonDictionary.json(atKeyPath: \"attributes\") ?? []\n        resourceTags = jsonDictionary.json(atKeyPath: \"resourceTags\") ?? []\n        compilerFlags = jsonDictionary.json(atKeyPath: \"compilerFlags\") ?? []\n    }\n}\n\nextension FileType: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"buildPhase\": buildPhase?.toJSONValue(),\n            \"attributes\": attributes,\n            \"resourceTags\": resourceTags,\n            \"compilerFlags\": compilerFlags,\n        ]\n        if file != Defaults.file {\n            dict[\"file\"] = file\n        }\n        return dict\n    }\n}\n\nextension FileType {\n\n    public static let defaultFileTypes: [String: FileType] = [\n        // resources\n        \"bundle\": FileType(buildPhase: .resources),\n        \"xcassets\": FileType(buildPhase: .resources),\n        \"storekit\": FileType(buildPhase: .resources),\n        \"xcstrings\": FileType(buildPhase: .resources),\n        \"icon\": FileType(buildPhase: .resources),\n\n        // sources\n        \"swift\": FileType(buildPhase: .sources),\n        \"gyb\": FileType(buildPhase: .sources),\n        \"m\": FileType(buildPhase: .sources),\n        \"mm\": FileType(buildPhase: .sources),\n        \"cpp\": FileType(buildPhase: .sources),\n        \"cp\": FileType(buildPhase: .sources),\n        \"cxx\": FileType(buildPhase: .sources),\n        \"c\": FileType(buildPhase: .sources),\n        \"cc\": FileType(buildPhase: .sources),\n        \"S\": FileType(buildPhase: .sources),\n        \"xcdatamodeld\": FileType(buildPhase: .sources),\n        \"xcmappingmodel\": FileType(buildPhase: .sources),\n        \"intentdefinition\": FileType(buildPhase: .sources),\n        \"metal\": FileType(buildPhase: .sources),\n        \"mlmodel\": FileType(buildPhase: .sources),\n        \"mlpackage\" : FileType(buildPhase: .sources),\n        \"mlmodelc\": FileType(buildPhase: .resources),\n        \"rcproject\": FileType(buildPhase: .sources),\n        \"iig\": FileType(buildPhase: .sources),\n        \"docc\": FileType(buildPhase: .sources),\n\n        // headers\n        \"h\": FileType(buildPhase: .headers),\n        \"hh\": FileType(buildPhase: .headers),\n        \"hpp\": FileType(buildPhase: .headers),\n        \"ipp\": FileType(buildPhase: .headers),\n        \"tpp\": FileType(buildPhase: .headers),\n        \"hxx\": FileType(buildPhase: .headers),\n        \"def\": FileType(buildPhase: .headers),\n\n        // frameworks\n        \"framework\": FileType(buildPhase: .frameworks),\n\n        // copyfiles\n        \"xpc\": FileType(buildPhase: .copyFiles(.xpcServices)),\n        \"appex\": FileType(buildPhase: .copyFiles(.plugins)),\n\n        // no build phase (not resources)\n        \"xcconfig\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"entitlements\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"gpx\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"lproj\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"xcfilelist\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"apns\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"pch\": FileType(buildPhase: BuildPhaseSpec.none),\n        \"xctestplan\": FileType(buildPhase: BuildPhaseSpec.none),\n    ]\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/GroupOrdering.swift",
    "content": "import Foundation\nimport JSONUtilities\n\n/// Describes an order of groups.\npublic struct GroupOrdering: Equatable {\n\n    /// A group name pattern.\n    public var pattern: String\n\n    /// A group name regex.\n    public var regex: NSRegularExpression?\n\n    /// Subgroups orders.\n    public var order: [String]\n\n    public init(pattern: String = \"\", order: [String] = []) {\n        self.pattern = pattern\n        self.regex = try? NSRegularExpression(pattern: pattern)\n        self.order = order\n    }\n\n}\n\nextension GroupOrdering: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        pattern = jsonDictionary.json(atKeyPath: \"pattern\") ?? \"\"\n        regex = try? NSRegularExpression(pattern: pattern)\n        order = jsonDictionary.json(atKeyPath: \"order\") ?? []\n    }\n\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Linkage.swift",
    "content": "import Foundation\nimport XcodeProj\n\npublic enum Linkage {\n    case dynamic\n    case `static`\n    case none\n}\n\nextension Target {\n\n    public var defaultLinkage: Linkage {\n        switch type {\n        case .none,\n             .appExtension,\n             .application,\n             .bundle,\n             .commandLineTool,\n             .instrumentsPackage,\n             .intentsServiceExtension,\n             .messagesApplication,\n             .messagesExtension,\n             .metalLibrary,\n             .ocUnitTestBundle,\n             .onDemandInstallCapableApplication,\n             .stickerPack,\n             .tvExtension,\n             .uiTestBundle,\n             .unitTestBundle,\n             .watchApp,\n             .watchExtension,\n             .watch2App,\n             .watch2AppContainer,\n             .watch2Extension,\n             .xcodeExtension,\n             .xpcService,\n             .systemExtension,\n             .driverExtension,\n             .extensionKitExtension:\n            return .none\n        case .framework, .xcFramework:\n            // Check the MACH_O_TYPE for \"Static Framework\"\n            if settings.buildSettings.machOType == \"staticlib\" {\n                return .static\n            } else {\n                return .dynamic\n            }\n        case .dynamicLibrary:\n            return .dynamic\n        case .staticLibrary, .staticFramework:\n            return .static\n        }\n    }\n}\n\nprivate extension BuildSettings {\n\n    var machOType: String? {\n        self[\"MACH_O_TYPE\"]?.stringValue\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/NSRegularExpressionExtensions.swift",
    "content": "import Foundation\n\npublic extension NSRegularExpression {\n\n    func isMatch(to string: String) -> Bool {\n        let range = NSRange(location: 0, length: string.utf16.count)\n        return self.firstMatch(in: string, options: [], range: range) != nil\n    }\n\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/PathContainer.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\n\nprotocol PathContainer {\n\n    static var pathProperties: [PathProperty] { get }\n}\n\nenum PathProperty {\n    case string(String)\n    case dictionary([PathProperty])\n    case object(String, [PathProperty])\n}\n\nextension Array where Element == PathProperty {\n\n    func resolvingPaths(in jsonDictionary: JSONDictionary, relativeTo path: Path) -> JSONDictionary {\n        var result = jsonDictionary\n\n        for pathProperty in self {\n            switch pathProperty {\n            case .string(let key):\n                if let source = result[key] as? String {\n                    result[key] = (path + source).string\n                } else if let source = result[key] as? [Any] {\n                    result[key] = source.map { any -> Any in\n                        if let string = any as? String {\n                            return (path + string).string\n                        } else {\n                            return any\n                        }\n                    }\n                } else if let source = result[key] as? [String: String] {\n                    result[key] = source.mapValues { (path + $0).string }\n                }\n            case .dictionary(let pathProperties):\n                for (key, dictionary) in result {\n                    if let source = dictionary as? JSONDictionary {\n                        result[key] = pathProperties.resolvingPaths(in: source, relativeTo: path)\n                    }\n                }\n            case .object(let key, let pathProperties):\n                if let source = result[key] as? JSONDictionary {\n                    result[key] = pathProperties.resolvingPaths(in: source, relativeTo: path)\n                } else if let source = result[key] as? [Any] {\n                    result[key] = source.map { any -> Any in\n                        if let dictionary = any as? JSONDictionary {\n                            return pathProperties.resolvingPaths(in: dictionary, relativeTo: path)\n                        } else {\n                            return any\n                        }\n                    }\n                } else if let source = result[key] as? [String: JSONDictionary] {\n                    result[key] = source.mapValues { pathProperties.resolvingPaths(in: $0, relativeTo: path) }\n                }\n            }\n        }\n\n        return result\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Platform.swift",
    "content": "import Foundation\n\npublic enum Platform: String, Hashable, CaseIterable {\n    case auto\n    case iOS\n    case tvOS\n    case macOS\n    case watchOS\n    case visionOS\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Plist.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct Plist: Equatable {\n\n    public let path: String\n    public let properties: [String: Any]\n\n    public init(path: String, attributes: [String: Any] = [:]) {\n        self.path = path\n        properties = attributes\n    }\n\n    public static func == (lhs: Plist, rhs: Plist) -> Bool {\n        lhs.path == rhs.path &&\n            NSDictionary(dictionary: lhs.properties).isEqual(to: rhs.properties)\n    }\n}\n\nextension Plist: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        path = try jsonDictionary.json(atKeyPath: \"path\")\n        properties = jsonDictionary.json(atKeyPath: \"properties\") ?? [:]\n    }\n}\n\nextension Plist: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"path\": path,\n            \"properties\": properties,\n        ] as [String : Any]\n    }\n}\n\nextension Plist: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"path\"),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Project.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport Yams\n\npublic struct Project: BuildSettingsContainer {\n\n    public var basePath: Path\n    public var name: String\n    public var targets: [Target] {\n        didSet {\n            targetsMap = Dictionary(uniqueKeysWithValues: targets.map { ($0.name, $0) })\n        }\n    }\n\n    public var aggregateTargets: [AggregateTarget] {\n        didSet {\n            aggregateTargetsMap = Dictionary(uniqueKeysWithValues: aggregateTargets.map { ($0.name, $0) })\n        }\n    }\n\n    public var packages: [String: SwiftPackage]\n\n    public var settings: Settings\n    public var settingGroups: [String: Settings]\n    public var configs: [Config]\n    public var schemes: [Scheme]\n    public var breakpoints: [Breakpoint]\n    public var options: SpecOptions\n    public var attributes: [String: Any]\n    public var fileGroups: [String]\n    public var configFiles: [String: String]\n    public var include: [String] = []\n    public var projectReferences: [ProjectReference] = [] {\n        didSet {\n            projectReferencesMap = Dictionary(uniqueKeysWithValues: projectReferences.map { ($0.name, $0) })\n        }\n    }\n\n    private var targetsMap: [String: Target]\n    private var aggregateTargetsMap: [String: AggregateTarget]\n    private var projectReferencesMap: [String: ProjectReference]\n\n    public init(\n        basePath: Path = \"\",\n        name: String,\n        configs: [Config] = Config.defaultConfigs,\n        targets: [Target] = [],\n        aggregateTargets: [AggregateTarget] = [],\n        settings: Settings = .empty,\n        settingGroups: [String: Settings] = [:],\n        schemes: [Scheme] = [],\n        breakpoints: [Breakpoint] = [],\n        packages: [String: SwiftPackage] = [:],\n        options: SpecOptions = SpecOptions(),\n        fileGroups: [String] = [],\n        configFiles: [String: String] = [:],\n        attributes: [String: Any] = [:],\n        projectReferences: [ProjectReference] = []\n    ) {\n        self.basePath = basePath\n        self.name = name\n        self.targets = targets\n        targetsMap = Dictionary(uniqueKeysWithValues: self.targets.map { ($0.name, $0) })\n        self.aggregateTargets = aggregateTargets\n        aggregateTargetsMap = Dictionary(uniqueKeysWithValues: self.aggregateTargets.map { ($0.name, $0) })\n        self.configs = configs\n        self.settings = settings\n        self.settingGroups = settingGroups\n        self.schemes = schemes\n        self.breakpoints = breakpoints\n        self.packages = packages\n        self.options = options\n        self.fileGroups = fileGroups\n        self.configFiles = configFiles\n        self.attributes = attributes\n        self.projectReferences = projectReferences\n        projectReferencesMap = Dictionary(uniqueKeysWithValues: self.projectReferences.map { ($0.name, $0) })\n    }\n\n    public func getProjectReference(_ projectName: String) -> ProjectReference? {\n        projectReferencesMap[projectName]\n    }\n\n    public func getTarget(_ targetName: String) -> Target? {\n        targetsMap[targetName]\n    }\n\n    public func getPackage(_ packageName: String) -> SwiftPackage? {\n        packages[packageName]\n    }\n\n    public func getAggregateTarget(_ targetName: String) -> AggregateTarget? {\n        aggregateTargetsMap[targetName]\n    }\n\n    public func getProjectTarget(_ targetName: String) -> ProjectTarget? {\n        targetsMap[targetName] ?? aggregateTargetsMap[targetName]\n    }\n\n    public func getConfig(_ configName: String) -> Config? {\n        configs.first { $0.name == configName }\n    }\n\n    public var defaultProjectPath: Path {\n        basePath + \"\\(name).xcodeproj\"\n    }\n}\n\nextension Project: CustomDebugStringConvertible {\n\n    public var debugDescription: String {\n        var string = \"Name: \\(name)\"\n        let indent = \"  \"\n        if !include.isEmpty {\n            string += \"\\nInclude:\\n\\(indent)\" + include.map { $0.description }.joined(separator: \"\\n\\(indent)\")\n        }\n\n        if !settingGroups.isEmpty {\n            string += \"\\nSetting Groups:\\n\\(indent)\" + settingGroups.keys\n                .sorted()\n                .joined(separator: \"\\n\\(indent)\")\n        }\n\n        if !targets.isEmpty {\n            string += \"\\nTargets:\\n\\(indent)\" + targets.map { $0.description }.joined(separator: \"\\n\\(indent)\")\n        }\n        if !aggregateTargets.isEmpty {\n            string += \"\\nAggregate Targets:\\n\\(indent)\" + aggregateTargets.map { $0.description }.joined(separator: \"\\n\\(indent)\")\n        }\n        if !schemes.isEmpty {\n            let allSchemes = targets.filter { $0.scheme != nil }.map { $0.name } + schemes.map { $0.name }\n            string += \"\\nSchemes:\\n\\(indent)\" + allSchemes.joined(separator: \"\\n\\(indent)\")\n        }\n\n        return string\n    }\n}\n\nextension Project: Equatable {\n\n    public static func == (lhs: Project, rhs: Project) -> Bool {\n        lhs.name == rhs.name &&\n            lhs.targets == rhs.targets &&\n            lhs.aggregateTargets == rhs.aggregateTargets &&\n            lhs.settings == rhs.settings &&\n            lhs.settingGroups == rhs.settingGroups &&\n            lhs.configs == rhs.configs &&\n            lhs.schemes == rhs.schemes &&\n            lhs.breakpoints == rhs.breakpoints &&\n            lhs.fileGroups == rhs.fileGroups &&\n            lhs.configFiles == rhs.configFiles &&\n            lhs.options == rhs.options &&\n            lhs.packages == rhs.packages &&\n            NSDictionary(dictionary: lhs.attributes).isEqual(to: rhs.attributes)\n    }\n}\n\nextension Project {\n\n    public init(path: Path) throws {\n        let spec = try SpecFile(path: path)\n        try self.init(spec: spec)\n    }\n\n    public init(spec: SpecFile) throws {\n        try self.init(basePath: spec.basePath, jsonDictionary: spec.resolvedDictionary())\n    }\n\n    public init(basePath: Path = \"\", jsonDictionary: JSONDictionary) throws {\n        self.basePath = basePath\n\n        let jsonDictionary = Project.resolveProject(jsonDictionary: jsonDictionary)\n        let buildSettingsParser = BuildSettingsParser(jsonDictionary: jsonDictionary)\n\n        name = try jsonDictionary.json(atKeyPath: \"name\")\n\n        settings = try buildSettingsParser.parse()\n        settingGroups = try buildSettingsParser.parseSettingGroups()\n\n        let configs: [String: String] = jsonDictionary.json(atKeyPath: \"configs\") ?? [:]\n        self.configs = configs.isEmpty ? Config.defaultConfigs :\n            configs.map { Config(name: $0, type: ConfigType(rawValue: $1)) }.sorted { $0.name < $1.name }\n        targets = try jsonDictionary.json(atKeyPath: \"targets\", parallel: true).sorted { $0.name < $1.name }\n        aggregateTargets = try jsonDictionary.json(atKeyPath: \"aggregateTargets\").sorted { $0.name < $1.name }\n        projectReferences = try jsonDictionary.json(atKeyPath: \"projectReferences\").sorted { $0.name < $1.name }\n        schemes = try jsonDictionary.json(atKeyPath: \"schemes\")\n        if jsonDictionary[\"breakpoints\"] != nil {\n            breakpoints = try jsonDictionary.json(atKeyPath: \"breakpoints\", invalidItemBehaviour: .fail)\n        } else {\n            breakpoints = []\n        }\n        fileGroups = jsonDictionary.json(atKeyPath: \"fileGroups\") ?? []\n        configFiles = jsonDictionary.json(atKeyPath: \"configFiles\") ?? [:]\n        attributes = jsonDictionary.json(atKeyPath: \"attributes\") ?? [:]\n        include = jsonDictionary.json(atKeyPath: \"include\") ?? []\n        if jsonDictionary[\"packages\"] != nil {\n            packages = try jsonDictionary.json(atKeyPath: \"packages\", invalidItemBehaviour: .fail)\n        } else {\n            packages = [:]\n        }\n        // For backward compatibility of old `localPackages:` format\n        if let localPackages: [String] = jsonDictionary.json(atKeyPath: \"localPackages\") {\n            packages.merge(localPackages.reduce(into: [String: SwiftPackage]()) {\n                // Project name will be obtained by resolved abstractpath's lastComponent for dealing with some path case, like \"../\"\n                let packageName = (basePath + Path($1).normalize()).lastComponent\n                $0[packageName] = .local(path: $1, group: nil, excludeFromProject: false)\n            }\n            )\n        }\n        if jsonDictionary[\"options\"] != nil {\n            options = try jsonDictionary.json(atKeyPath: \"options\")\n        } else {\n            options = SpecOptions()\n        }\n        targetsMap = Dictionary(uniqueKeysWithValues: targets.map { ($0.name, $0) })\n        aggregateTargetsMap = Dictionary(uniqueKeysWithValues: aggregateTargets.map { ($0.name, $0) })\n        projectReferencesMap = Dictionary(uniqueKeysWithValues: projectReferences.map { ($0.name, $0) })\n    }\n\n    static func resolveProject(jsonDictionary: JSONDictionary) -> JSONDictionary {\n        var jsonDictionary = jsonDictionary\n\n        // resolve multiple times so that we support both multi-platform templates,\n        // as well as platform specific templates in multi-platform targets\n        jsonDictionary = Target.resolveMultiplatformTargets(jsonDictionary: jsonDictionary)\n        jsonDictionary = Target.resolveTargetTemplates(jsonDictionary: jsonDictionary)\n        jsonDictionary = Scheme.resolveSchemeTemplates(jsonDictionary: jsonDictionary)\n        jsonDictionary = Target.resolveMultiplatformTargets(jsonDictionary: jsonDictionary)\n\n        return jsonDictionary\n    }\n}\n\nextension Project: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"configFiles\"),\n            .object(\"options\", SpecOptions.pathProperties),\n            .object(\"targets\", Target.pathProperties),\n            .object(\"targetTemplates\", Target.pathProperties),\n            .object(\"aggregateTargets\", AggregateTarget.pathProperties),\n            .object(\"schemes\", Scheme.pathProperties),\n            .object(\"projectReferences\", ProjectReference.pathProperties),\n            .object(\"packages\", SwiftPackage.pathProperties),\n            .string(\"localPackages\"),\n            .string(\"fileGroups\")\n        ]\n    }\n}\n\nextension Project {\n\n    public var allTrackedFiles: [Path] {\n        var files: [Path] = []\n        files.append(contentsOf: configFilePaths)\n        for fileGroup in fileGroups {\n            let fileGroupPath = basePath + fileGroup\n            let fileGroupChildren = (try? fileGroupPath.recursiveChildren()) ?? []\n            files.append(contentsOf: fileGroupChildren)\n            files.append(fileGroupPath)\n        }\n\n        for target in aggregateTargets {\n            files.append(contentsOf: target.configFilePaths)\n        }\n\n        for target in targets {\n            files.append(contentsOf: target.configFilePaths)\n            for source in target.sources {\n                let sourcePath = basePath + source.path\n                \n                let type = source.type ?? options.defaultSourceDirectoryType ?? .group\n                if type.projectTracksChildren {\n                    let sourceChildren = (try? sourcePath.recursiveChildren()) ?? []\n                    files.append(contentsOf: sourceChildren)\n                }\n                files.append(sourcePath)\n            }\n        }\n        return files\n    }\n}\n\nextension SourceType {\n    \n    var projectTracksChildren: Bool {\n        switch self {\n        case .file: false\n        case .folder: false\n        case .group: true\n        case .syncedFolder: false\n        }\n    }\n}\n\nextension BuildSettingsContainer {\n\n    fileprivate var configFilePaths: [Path] {\n        configFiles.values.map { Path($0) }\n    }\n}\n\nextension Project: JSONEncodable {\n    public func toJSONValue() -> Any {\n        toJSONDictionary()\n    }\n\n    public func toJSONDictionary() -> JSONDictionary {\n        let targetPairs = targets.map { ($0.name, $0.toJSONValue()) }\n        let configsPairs = configs.map { ($0.name, $0.type?.rawValue) }\n        let aggregateTargetsPairs = aggregateTargets.map { ($0.name, $0.toJSONValue()) }\n        let schemesPairs = schemes.map { ($0.name, $0.toJSONValue()) }\n        let projectReferencesPairs = projectReferences.map { ($0.name, $0.toJSONValue()) }\n\n        var dictionary: JSONDictionary = [:]\n        dictionary[\"name\"] = name\n        dictionary[\"options\"] = options.toJSONValue()\n        dictionary[\"settings\"] = settings.toJSONValue()\n        dictionary[\"fileGroups\"] = fileGroups\n        dictionary[\"configFiles\"] = configFiles\n        dictionary[\"include\"] = include\n        dictionary[\"attributes\"] = attributes\n        dictionary[\"packages\"] = packages.mapValues { $0.toJSONValue() }\n        dictionary[\"targets\"] = Dictionary(uniqueKeysWithValues: targetPairs)\n        dictionary[\"configs\"] = Dictionary(uniqueKeysWithValues: configsPairs)\n        dictionary[\"aggregateTargets\"] = Dictionary(uniqueKeysWithValues: aggregateTargetsPairs)\n        dictionary[\"schemes\"] = Dictionary(uniqueKeysWithValues: schemesPairs)\n        dictionary[\"settingGroups\"] = settingGroups.mapValues { $0.toJSONValue() }\n        dictionary[\"projectReferences\"] = Dictionary(uniqueKeysWithValues: projectReferencesPairs)\n\n        return dictionary\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/ProjectReference.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct ProjectReference: Hashable {\n    public var name: String\n    public var path: String\n\n    public init(name: String, path: String) {\n        self.name = name\n        self.path = path\n    }\n}\n\nextension ProjectReference: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .dictionary([\n                .string(\"path\"),\n            ]),\n        ]\n    }\n}\n\nextension ProjectReference: NamedJSONDictionaryConvertible {\n    public init(name: String, jsonDictionary: JSONDictionary) throws {\n        self.name = name\n        self.path = try jsonDictionary.json(atKeyPath: \"path\")\n    }\n}\n\nextension ProjectReference: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"path\": path,\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/ProjectTarget.swift",
    "content": "import Foundation\nimport XcodeProj\n\npublic protocol ProjectTarget: BuildSettingsContainer {\n\n    var name: String { get }\n    var type: PBXProductType { get }\n    var buildScripts: [BuildScript] { get }\n    var buildToolPlugins: [BuildToolPlugin] { get }\n    var scheme: TargetScheme? { get }\n    var attributes: [String: Any] { get }\n}\n\nextension Target {\n\n    public var buildScripts: [BuildScript] {\n        preBuildScripts + postCompileScripts + postBuildScripts\n    }\n}\n\nextension Project {\n\n    public var projectTargets: [ProjectTarget] {\n        targets.map { $0 as ProjectTarget } + aggregateTargets.map { $0 as ProjectTarget }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Scheme.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport XcodeProj\n\npublic typealias BuildType = XCScheme.BuildAction.Entry.BuildFor\n\npublic struct Scheme: Equatable {\n\n    public var name: String\n    public var build: Build\n    public var run: Run?\n    public var archive: Archive?\n    public var analyze: Analyze?\n    public var test: Test?\n    public var profile: Profile?\n    public var management: Management?\n\n    public init(\n        name: String,\n        build: Build,\n        run: Run? = nil,\n        test: Test? = nil,\n        profile: Profile? = nil,\n        analyze: Analyze? = nil,\n        archive: Archive? = nil,\n        management: Management? = nil\n    ) {\n        self.name = name\n        self.build = build\n        self.run = run\n        self.test = test\n        self.profile = profile\n        self.analyze = analyze\n        self.archive = archive\n        self.management = management\n    }\n\n    public struct Management: Equatable {\n        public static let sharedDefault = true\n\n        public var shared: Bool\n        public var orderHint: Int?\n        public var isShown: Bool?\n\n        public init?(\n            shared: Bool = Scheme.Management.sharedDefault,\n            orderHint: Int? = nil,\n            isShown: Bool? = nil\n        ) {\n            if shared == Scheme.Management.sharedDefault, orderHint == nil, isShown == nil {\n                return nil\n            }\n\n            self.shared = shared\n            self.orderHint = orderHint\n            self.isShown = isShown\n        }\n    }\n\n    public struct SimulateLocation: Equatable {\n        public enum ReferenceType: String {\n            case predefined = \"1\"\n            case gpx = \"0\"\n        }\n\n        public var allow: Bool\n        public var defaultLocation: String?\n\n        public var referenceType: ReferenceType? {\n            guard let defaultLocation = self.defaultLocation else {\n                return nil\n            }\n\n            if defaultLocation.contains(\".gpx\") {\n                return .gpx\n            }\n            return .predefined\n        }\n\n        public init(allow: Bool, defaultLocation: String) {\n            self.allow = allow\n            self.defaultLocation = defaultLocation\n        }\n    }\n\n    public struct ExecutionAction: Equatable {\n        public var script: String\n        public var name: String\n        public var settingsTarget: String?\n        public var shell: String?\n        public init(name: String, script: String, shell: String? = nil, settingsTarget: String? = nil) {\n            self.script = script\n            self.name = name\n            self.settingsTarget = settingsTarget\n            self.shell = shell\n        }\n    }\n\n    public struct Build: Equatable {\n        public static let parallelizeBuildDefault = true\n        public static let buildImplicitDependenciesDefault = true\n        public static let runPostActionsOnFailureDefault = false\n\n        public var targets: [BuildTarget]\n        public var parallelizeBuild: Bool\n        public var buildImplicitDependencies: Bool\n        public var preActions: [ExecutionAction]\n        public var postActions: [ExecutionAction]\n        public var runPostActionsOnFailure: Bool\n\n        public init(\n            targets: [BuildTarget],\n            parallelizeBuild: Bool = parallelizeBuildDefault,\n            buildImplicitDependencies: Bool = buildImplicitDependenciesDefault,\n            preActions: [ExecutionAction] = [],\n            postActions: [ExecutionAction] = [],\n            runPostActionsOnFailure: Bool = false\n        ) {\n            self.targets = targets\n            self.parallelizeBuild = parallelizeBuild\n            self.buildImplicitDependencies = buildImplicitDependencies\n            self.preActions = preActions\n            self.postActions = postActions\n            self.runPostActionsOnFailure = runPostActionsOnFailure\n        }\n    }\n\n    public struct Run: BuildAction {\n        public static let enableAddressSanitizerDefault = false\n        public static let enableASanStackUseAfterReturnDefault = false\n        public static let enableThreadSanitizerDefault = false\n        public static let enableUBSanitizerDefault = false\n        public static let disableMainThreadCheckerDefault = false\n        public static let stopOnEveryMainThreadCheckerIssueDefault = false\n        public static let disableThreadPerformanceCheckerDefault = false\n        public static let debugEnabledDefault = true\n        public static let enableGPUValidationModeDefault = true\n\n        public var config: String?\n        public var commandLineArguments: [String: Bool]\n        public var preActions: [ExecutionAction]\n        public var postActions: [ExecutionAction]\n        public var environmentVariables: [XCScheme.EnvironmentVariable]\n        public var enableGPUFrameCaptureMode: XCScheme.LaunchAction.GPUFrameCaptureMode\n        public var enableGPUValidationMode: Bool\n        public var enableAddressSanitizer: Bool\n        public var enableASanStackUseAfterReturn: Bool\n        public var enableThreadSanitizer: Bool\n        public var enableUBSanitizer: Bool\n        public var disableMainThreadChecker: Bool\n        public var stopOnEveryMainThreadCheckerIssue: Bool\n        public var disableThreadPerformanceChecker: Bool\n        public var language: String?\n        public var region: String?\n        public var askForAppToLaunch: Bool?\n        public var launchAutomaticallySubstyle: String?\n        public var debugEnabled: Bool\n        public var simulateLocation: SimulateLocation?\n        public var executable: String?\n        public var storeKitConfiguration: String?\n        public var customLLDBInit: String?\n        public var macroExpansion: String?\n        public var customWorkingDirectory: String?\n\n        public init(\n            config: String? = nil,\n            executable: String? = nil,\n            commandLineArguments: [String: Bool] = [:],\n            preActions: [ExecutionAction] = [],\n            postActions: [ExecutionAction] = [],\n            environmentVariables: [XCScheme.EnvironmentVariable] = [],\n            enableGPUFrameCaptureMode: XCScheme.LaunchAction.GPUFrameCaptureMode = XCScheme.LaunchAction.defaultGPUFrameCaptureMode,\n            enableGPUValidationMode: Bool = enableGPUValidationModeDefault,\n            enableAddressSanitizer: Bool = enableAddressSanitizerDefault,\n            enableASanStackUseAfterReturn: Bool = enableASanStackUseAfterReturnDefault,\n            enableThreadSanitizer: Bool = enableThreadSanitizerDefault,\n            enableUBSanitizer: Bool = enableUBSanitizerDefault,\n            disableMainThreadChecker: Bool = disableMainThreadCheckerDefault,\n            stopOnEveryMainThreadCheckerIssue: Bool = stopOnEveryMainThreadCheckerIssueDefault,\n            disableThreadPerformanceChecker: Bool = disableThreadPerformanceCheckerDefault,\n            language: String? = nil,\n            region: String? = nil,\n            askForAppToLaunch: Bool? = nil,\n            launchAutomaticallySubstyle: String? = nil,\n            debugEnabled: Bool = debugEnabledDefault,\n            simulateLocation: SimulateLocation? = nil,\n            storeKitConfiguration: String? = nil,\n            customLLDBInit: String? = nil,\n            macroExpansion: String? = nil,\n            customWorkingDirectory: String? = nil\n        ) {\n            self.config = config\n            self.commandLineArguments = commandLineArguments\n            self.preActions = preActions\n            self.postActions = postActions\n            self.environmentVariables = environmentVariables\n            self.enableAddressSanitizer = enableAddressSanitizer\n            self.enableASanStackUseAfterReturn = enableASanStackUseAfterReturn\n            self.enableThreadSanitizer = enableThreadSanitizer\n            self.enableUBSanitizer = enableUBSanitizer\n            self.disableMainThreadChecker = disableMainThreadChecker\n            self.enableGPUFrameCaptureMode = enableGPUFrameCaptureMode\n            self.enableGPUValidationMode = enableGPUValidationMode\n            self.stopOnEveryMainThreadCheckerIssue = stopOnEveryMainThreadCheckerIssue\n            self.disableThreadPerformanceChecker = disableThreadPerformanceChecker\n            self.language = language\n            self.region = region\n            self.askForAppToLaunch = askForAppToLaunch\n            self.launchAutomaticallySubstyle = launchAutomaticallySubstyle\n            self.debugEnabled = debugEnabled\n            self.simulateLocation = simulateLocation\n            self.storeKitConfiguration = storeKitConfiguration\n            self.customLLDBInit = customLLDBInit\n            self.macroExpansion = macroExpansion\n            self.customWorkingDirectory = customWorkingDirectory\n        }\n    }\n\n    public struct Test: BuildAction {\n        public static let gatherCoverageDataDefault = false\n        public static let enableAddressSanitizerDefault = false\n        public static let enableASanStackUseAfterReturnDefault = false\n        public static let enableThreadSanitizerDefault = false\n        public static let enableUBSanitizerDefault = false\n        public static let disableMainThreadCheckerDefault = false\n        public static let debugEnabledDefault = true\n        public static let captureScreenshotsAutomaticallyDefault = true\n        public static let deleteScreenshotsWhenEachTestSucceedsDefault = true\n        public static let preferredScreenCaptureFormatDefault = XCScheme.TestAction.ScreenCaptureFormat.screenRecording\n\n        public var config: String?\n        public var gatherCoverageData: Bool\n        public var coverageTargets: [TestableTargetReference]\n        public var enableAddressSanitizer: Bool\n        public var enableASanStackUseAfterReturn: Bool\n        public var enableThreadSanitizer: Bool\n        public var enableUBSanitizer: Bool\n        public var disableMainThreadChecker: Bool\n        public var commandLineArguments: [String: Bool]\n        public var targets: [TestTarget]\n        public var preActions: [ExecutionAction]\n        public var postActions: [ExecutionAction]\n        public var environmentVariables: [XCScheme.EnvironmentVariable]\n        public var language: String?\n        public var region: String?\n        public var debugEnabled: Bool\n        public var customLLDBInit: String?\n        public var captureScreenshotsAutomatically: Bool\n        public var deleteScreenshotsWhenEachTestSucceeds: Bool\n        public var testPlans: [TestPlan]\n        public var macroExpansion: String?\n        public var preferredScreenCaptureFormat: XCScheme.TestAction.ScreenCaptureFormat\n\n        public struct TestTarget: Equatable, ExpressibleByStringLiteral {\n            \n            public static let randomExecutionOrderDefault = false\n            public static let parallelizableDefault = false\n\n            public var name: String { targetReference.name }\n            public let targetReference: TestableTargetReference\n            public var randomExecutionOrder: Bool\n            public var parallelizable: Bool\n            public var location: String?\n            public var skipped: Bool\n            public var skippedTests: [String]\n            public var selectedTests: [String]\n\n            public init(\n                targetReference: TestableTargetReference,\n                randomExecutionOrder: Bool = randomExecutionOrderDefault,\n                parallelizable: Bool = parallelizableDefault,\n                location: String? = nil,\n                skipped: Bool = false,\n                skippedTests: [String] = [],\n                selectedTests: [String] = []\n            ) {\n                self.targetReference = targetReference\n                self.randomExecutionOrder = randomExecutionOrder\n                self.parallelizable = parallelizable\n                self.location = location\n                self.skipped = skipped\n                self.skippedTests = skippedTests\n                self.selectedTests = selectedTests\n            }\n\n            public init(stringLiteral value: String) {\n                do {\n                    targetReference = try TestableTargetReference(value)\n                    randomExecutionOrder = false\n                    parallelizable = false\n                    location = nil\n                    skipped = false\n                    skippedTests = []\n                    selectedTests = []\n                } catch {\n                    fatalError(SpecParsingError.invalidTargetReference(value).description)\n                }\n            }\n        }\n\n        public init(\n            config: String? = nil,\n            gatherCoverageData: Bool = gatherCoverageDataDefault,\n            coverageTargets: [TestableTargetReference] = [],\n            enableAddressSanitizer: Bool = enableAddressSanitizerDefault,\n            enableASanStackUseAfterReturn: Bool = enableASanStackUseAfterReturnDefault,\n            enableThreadSanitizer: Bool = enableThreadSanitizerDefault,\n            enableUBSanitizer: Bool = enableUBSanitizerDefault,\n            disableMainThreadChecker: Bool = disableMainThreadCheckerDefault,\n            randomExecutionOrder: Bool = false,\n            parallelizable: Bool = false,\n            commandLineArguments: [String: Bool] = [:],\n            targets: [TestTarget] = [],\n            preActions: [ExecutionAction] = [],\n            postActions: [ExecutionAction] = [],\n            environmentVariables: [XCScheme.EnvironmentVariable] = [],\n            testPlans: [TestPlan] = [],\n            language: String? = nil,\n            region: String? = nil,\n            debugEnabled: Bool = debugEnabledDefault,\n            customLLDBInit: String? = nil,\n            captureScreenshotsAutomatically: Bool = captureScreenshotsAutomaticallyDefault,\n            deleteScreenshotsWhenEachTestSucceeds: Bool = deleteScreenshotsWhenEachTestSucceedsDefault,\n            macroExpansion: String? = nil,\n            preferredScreenCaptureFormat: XCScheme.TestAction.ScreenCaptureFormat = preferredScreenCaptureFormatDefault\n        ) {\n            self.config = config\n            self.gatherCoverageData = gatherCoverageData\n            self.coverageTargets = coverageTargets\n            self.enableAddressSanitizer = enableAddressSanitizer\n            self.enableASanStackUseAfterReturn = enableASanStackUseAfterReturn\n            self.enableThreadSanitizer = enableThreadSanitizer\n            self.enableUBSanitizer = enableUBSanitizer\n            self.disableMainThreadChecker = disableMainThreadChecker\n            self.commandLineArguments = commandLineArguments\n            self.targets = targets\n            self.preActions = preActions\n            self.postActions = postActions\n            self.environmentVariables = environmentVariables\n            self.testPlans = testPlans\n            self.language = language\n            self.region = region\n            self.debugEnabled = debugEnabled\n            self.customLLDBInit = customLLDBInit\n            self.captureScreenshotsAutomatically = captureScreenshotsAutomatically\n            self.deleteScreenshotsWhenEachTestSucceeds = deleteScreenshotsWhenEachTestSucceeds\n            self.macroExpansion = macroExpansion\n            self.preferredScreenCaptureFormat = preferredScreenCaptureFormat\n        }\n\n        public var shouldUseLaunchSchemeArgsEnv: Bool {\n            commandLineArguments.isEmpty && environmentVariables.isEmpty\n        }\n    }\n\n    public struct Analyze: BuildAction {\n        public var config: String?\n        public init(config: String) {\n            self.config = config\n        }\n    }\n\n    public struct Profile: BuildAction {\n        public var config: String?\n        public var commandLineArguments: [String: Bool]\n        public var preActions: [ExecutionAction]\n        public var postActions: [ExecutionAction]\n        public var environmentVariables: [XCScheme.EnvironmentVariable]\n        public var askForAppToLaunch: Bool?\n\n        public init(\n            config: String? = nil,\n            commandLineArguments: [String: Bool] = [:],\n            preActions: [ExecutionAction] = [],\n            postActions: [ExecutionAction] = [],\n            environmentVariables: [XCScheme.EnvironmentVariable] = [],\n            askForAppToLaunch: Bool? = nil\n        ) {\n            self.config = config\n            self.commandLineArguments = commandLineArguments\n            self.preActions = preActions\n            self.postActions = postActions\n            self.environmentVariables = environmentVariables\n            self.askForAppToLaunch = askForAppToLaunch\n        }\n\n        public var shouldUseLaunchSchemeArgsEnv: Bool {\n            commandLineArguments.isEmpty && environmentVariables.isEmpty\n        }\n    }\n\n    public struct Archive: BuildAction {\n        public static let revealArchiveInOrganizerDefault = true\n\n        public var config: String?\n        public var customArchiveName: String?\n        public var revealArchiveInOrganizer: Bool\n        public var preActions: [ExecutionAction]\n        public var postActions: [ExecutionAction]\n        public init(\n            config: String? = nil,\n            customArchiveName: String? = nil,\n            revealArchiveInOrganizer: Bool = revealArchiveInOrganizerDefault,\n            preActions: [ExecutionAction] = [],\n            postActions: [ExecutionAction] = []\n        ) {\n            self.config = config\n            self.customArchiveName = customArchiveName\n            self.revealArchiveInOrganizer = revealArchiveInOrganizer\n            self.preActions = preActions\n            self.postActions = postActions\n        }\n    }\n\n    public struct BuildTarget: Equatable, Hashable {\n        public var target: TestableTargetReference\n        public var buildTypes: [BuildType]\n\n        public init(target: TestableTargetReference, buildTypes: [BuildType] = BuildType.all) {\n            self.target = target\n            self.buildTypes = buildTypes\n        }\n    }\n}\n\nextension Scheme: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .dictionary([\n                .object(\"test\", Test.pathProperties),\n            ]),\n        ]\n    }\n}\n\nprotocol BuildAction: Equatable {\n    var config: String? { get }\n}\n\nextension Scheme.ExecutionAction: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        script = try jsonDictionary.json(atKeyPath: \"script\")\n        name = jsonDictionary.json(atKeyPath: \"name\") ?? \"Run Script\"\n        settingsTarget = jsonDictionary.json(atKeyPath: \"settingsTarget\")\n        shell = jsonDictionary.json(atKeyPath: \"shell\")\n    }\n}\n\nextension Scheme.ExecutionAction: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"script\": script,\n            \"name\": name,\n            \"settingsTarget\": settingsTarget,\n            \"shell\": shell\n        ]\n    }\n}\n\nextension Scheme.SimulateLocation: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        allow = try jsonDictionary.json(atKeyPath: \"allow\")\n        defaultLocation = jsonDictionary.json(atKeyPath: \"defaultLocation\")\n    }\n}\n\nextension Scheme.SimulateLocation: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any] = [\n            \"allow\": allow,\n        ]\n\n        if let defaultLocation = defaultLocation {\n            dict[\"defaultLocation\"] = defaultLocation\n        }\n\n        return dict\n    }\n}\n\nextension Scheme.Management: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        shared = jsonDictionary.json(atKeyPath: \"shared\") ?? Scheme.Management.sharedDefault\n        orderHint = jsonDictionary.json(atKeyPath: \"orderHint\")\n        isShown = jsonDictionary.json(atKeyPath: \"isShown\")\n    }\n}\n\nextension Scheme.Management: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [:]\n\n        if shared != Scheme.Management.sharedDefault {\n            dict[\"shared\"] = shared\n        }\n\n        if let isShown = isShown {\n            dict[\"isShown\"] = isShown\n        }\n\n        if let orderHint = orderHint {\n            dict[\"orderHint\"] = orderHint\n        }\n\n        return dict\n    }\n}\n\nextension Scheme.Run: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        config = jsonDictionary.json(atKeyPath: \"config\")\n        commandLineArguments = jsonDictionary.json(atKeyPath: \"commandLineArguments\") ?? [:]\n        preActions = jsonDictionary.json(atKeyPath: \"preActions\") ?? []\n        postActions = jsonDictionary.json(atKeyPath: \"postActions\") ?? []\n        environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)\n        if let gpuFrameCaptureMode: String = jsonDictionary.json(atKeyPath: \"enableGPUFrameCaptureMode\") {\n            enableGPUFrameCaptureMode = XCScheme.LaunchAction.GPUFrameCaptureMode.fromJSONValue(gpuFrameCaptureMode)\n        } else {\n            enableGPUFrameCaptureMode = XCScheme.LaunchAction.defaultGPUFrameCaptureMode\n        }\n\n        // support deprecated gpuValidationMode enum that was removed from XcodeProj\n        if let gpuValidationMode: String = jsonDictionary.json(atKeyPath: \"enableGPUValidationMode\") {\n            switch gpuValidationMode {\n            case \"enabled\", \"extended\": enableGPUValidationMode = true\n            case \"disabled\": enableGPUValidationMode = false\n            default: enableGPUValidationMode = Scheme.Run.enableGPUValidationModeDefault\n            }\n        } else {\n            enableGPUValidationMode = jsonDictionary.json(atKeyPath: \"enableGPUValidationMode\") ?? Scheme.Run.enableGPUValidationModeDefault\n        }\n        enableAddressSanitizer = jsonDictionary.json(atKeyPath: \"enableAddressSanitizer\") ?? Scheme.Run.enableAddressSanitizerDefault\n        enableASanStackUseAfterReturn = jsonDictionary.json(atKeyPath: \"enableASanStackUseAfterReturn\") ?? Scheme.Run.enableASanStackUseAfterReturnDefault\n        enableThreadSanitizer = jsonDictionary.json(atKeyPath: \"enableThreadSanitizer\") ?? Scheme.Run.enableThreadSanitizerDefault\n        enableUBSanitizer = jsonDictionary.json(atKeyPath: \"enableUBSanitizer\") ?? Scheme.Run.enableUBSanitizerDefault\n        disableMainThreadChecker = jsonDictionary.json(atKeyPath: \"disableMainThreadChecker\") ?? Scheme.Run.disableMainThreadCheckerDefault\n        stopOnEveryMainThreadCheckerIssue = jsonDictionary.json(atKeyPath: \"stopOnEveryMainThreadCheckerIssue\") ?? Scheme.Run.stopOnEveryMainThreadCheckerIssueDefault\n        disableThreadPerformanceChecker = jsonDictionary.json(atKeyPath: \"disableThreadPerformanceChecker\") ?? Scheme.Run.disableThreadPerformanceCheckerDefault\n        language = jsonDictionary.json(atKeyPath: \"language\")\n        region = jsonDictionary.json(atKeyPath: \"region\")\n        debugEnabled = jsonDictionary.json(atKeyPath: \"debugEnabled\") ?? Scheme.Run.debugEnabledDefault\n        simulateLocation = jsonDictionary.json(atKeyPath: \"simulateLocation\")\n        storeKitConfiguration = jsonDictionary.json(atKeyPath: \"storeKitConfiguration\")\n        executable = jsonDictionary.json(atKeyPath: \"executable\")\n\n        // launchAutomaticallySubstyle is defined as a String in XcodeProj but its value is often\n        // an integer. Parse both to be nice.\n        if let int: Int = jsonDictionary.json(atKeyPath: \"launchAutomaticallySubstyle\") {\n            launchAutomaticallySubstyle = String(int)\n        } else if let string: String = jsonDictionary.json(atKeyPath: \"launchAutomaticallySubstyle\") {\n            launchAutomaticallySubstyle = string\n        }\n\n        if let askLaunch: Bool = jsonDictionary.json(atKeyPath: \"askForAppToLaunch\") {\n            askForAppToLaunch = askLaunch\n        }\n        customLLDBInit = jsonDictionary.json(atKeyPath: \"customLLDBInit\")\n        macroExpansion = jsonDictionary.json(atKeyPath: \"macroExpansion\")\n        customWorkingDirectory = jsonDictionary.json(atKeyPath: \"customWorkingDirectory\")\n    }\n}\n\nextension Scheme.Run: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"commandLineArguments\": commandLineArguments,\n            \"preActions\": preActions.map { $0.toJSONValue() },\n            \"postActions\": postActions.map { $0.toJSONValue() },\n            \"environmentVariables\": environmentVariables.map { $0.toJSONValue() },\n            \"config\": config,\n            \"language\": language,\n            \"region\": region,\n            \"askForAppToLaunch\": askForAppToLaunch,\n            \"launchAutomaticallySubstyle\": launchAutomaticallySubstyle,\n            \"executable\": executable,\n            \"macroExpansion\": macroExpansion\n        ]\n\n        if enableGPUFrameCaptureMode != XCScheme.LaunchAction.defaultGPUFrameCaptureMode {\n            dict[\"enableGPUFrameCaptureMode\"] = enableGPUFrameCaptureMode.toJSONValue()\n        }\n        \n        if enableGPUValidationMode != Scheme.Run.enableGPUValidationModeDefault {\n            dict[\"enableGPUValidationMode\"] = enableGPUValidationMode\n        }\n\n        if enableAddressSanitizer != Scheme.Run.enableAddressSanitizerDefault {\n            dict[\"enableAddressSanitizer\"] = enableAddressSanitizer\n        }\n\n        if enableASanStackUseAfterReturn != Scheme.Run.enableASanStackUseAfterReturnDefault {\n            dict[\"enableASanStackUseAfterReturn\"] = enableASanStackUseAfterReturn\n        }\n\n        if enableThreadSanitizer != Scheme.Run.enableThreadSanitizerDefault {\n            dict[\"enableThreadSanitizer\"] = enableThreadSanitizer\n        }\n\n        if enableUBSanitizer != Scheme.Run.enableUBSanitizerDefault {\n            dict[\"enableUBSanitizer\"] = enableUBSanitizer\n        }\n\n        if disableMainThreadChecker != Scheme.Run.disableMainThreadCheckerDefault {\n            dict[\"disableMainThreadChecker\"] = disableMainThreadChecker\n        }\n\n        if stopOnEveryMainThreadCheckerIssue != Scheme.Run.stopOnEveryMainThreadCheckerIssueDefault {\n            dict[\"stopOnEveryMainThreadCheckerIssue\"] = stopOnEveryMainThreadCheckerIssue\n        }\n\n        if disableThreadPerformanceChecker != Scheme.Run.disableThreadPerformanceCheckerDefault {\n            dict[\"disableThreadPerformanceChecker\"] = disableThreadPerformanceChecker\n        }\n\n        if debugEnabled != Scheme.Run.debugEnabledDefault {\n            dict[\"debugEnabled\"] = debugEnabled\n        }\n\n        if let simulateLocation = simulateLocation {\n            dict[\"simulateLocation\"] = simulateLocation.toJSONValue()\n        }\n        if let storeKitConfiguration = storeKitConfiguration {\n            dict[\"storeKitConfiguration\"] = storeKitConfiguration\n        }\n        if let customLLDBInit = customLLDBInit {\n            dict[\"customLLDBInit\"] = customLLDBInit\n        }\n        if let customWorkingDirectory = customWorkingDirectory {\n            dict[\"customWorkingDirectory\"] = customWorkingDirectory\n        }\n        return dict\n    }\n}\n\nextension Scheme.Test: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .object(\"testPlans\", TestPlan.pathProperties),\n        ]\n    }\n}\n\nextension Scheme.Test: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        config = jsonDictionary.json(atKeyPath: \"config\")\n        gatherCoverageData = jsonDictionary.json(atKeyPath: \"gatherCoverageData\") ?? Scheme.Test.gatherCoverageDataDefault\n\n        if let coverages = jsonDictionary[\"coverageTargets\"] as? [Any] {\n            coverageTargets = try coverages.compactMap { target in\n                if let string = target as? String {\n                    return try TestableTargetReference(string)\n                } else if let dictionary = target as? JSONDictionary,\n                          let target: TestableTargetReference = try? .init(jsonDictionary: dictionary) {\n                    return target\n                } else {\n                    return nil\n                }\n            }\n        } else {\n            coverageTargets = []\n        }\n\n        enableAddressSanitizer = jsonDictionary.json(atKeyPath: \"enableAddressSanitizer\") ?? Scheme.Test.enableAddressSanitizerDefault\n        enableASanStackUseAfterReturn = jsonDictionary.json(atKeyPath: \"enableASanStackUseAfterReturn\") ?? Scheme.Test.enableASanStackUseAfterReturnDefault\n        enableThreadSanitizer = jsonDictionary.json(atKeyPath: \"enableThreadSanitizer\") ?? Scheme.Test.enableThreadSanitizerDefault\n        enableUBSanitizer = jsonDictionary.json(atKeyPath: \"enableUBSanitizer\") ?? Scheme.Test.enableUBSanitizerDefault\n        disableMainThreadChecker = jsonDictionary.json(atKeyPath: \"disableMainThreadChecker\") ?? Scheme.Test.disableMainThreadCheckerDefault\n        commandLineArguments = jsonDictionary.json(atKeyPath: \"commandLineArguments\") ?? [:]\n        if let targets = jsonDictionary[\"targets\"] as? [Any] {\n            self.targets = try targets.compactMap { target in\n                if let string = target as? String {\n                    return try TestTarget(targetReference: TestableTargetReference(string))\n                } else if let dictionary = target as? JSONDictionary {\n                    return try TestTarget(jsonDictionary: dictionary)\n                } else {\n                    return nil\n                }\n            }\n        } else {\n            targets = []\n        }\n        preActions = jsonDictionary.json(atKeyPath: \"preActions\") ?? []\n        postActions = jsonDictionary.json(atKeyPath: \"postActions\") ?? []\n        environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)\n        testPlans = try (jsonDictionary.json(atKeyPath: \"testPlans\") ?? []).map { try TestPlan(jsonDictionary: $0) }\n        language = jsonDictionary.json(atKeyPath: \"language\")\n        region = jsonDictionary.json(atKeyPath: \"region\")\n        debugEnabled = jsonDictionary.json(atKeyPath: \"debugEnabled\") ?? Scheme.Test.debugEnabledDefault\n        customLLDBInit = jsonDictionary.json(atKeyPath: \"customLLDBInit\")\n        captureScreenshotsAutomatically = jsonDictionary.json(atKeyPath: \"captureScreenshotsAutomatically\") ?? Scheme.Test.captureScreenshotsAutomaticallyDefault\n        deleteScreenshotsWhenEachTestSucceeds = jsonDictionary.json(atKeyPath: \"deleteScreenshotsWhenEachTestSucceeds\") ?? Scheme.Test.deleteScreenshotsWhenEachTestSucceedsDefault\n        macroExpansion = jsonDictionary.json(atKeyPath: \"macroExpansion\")\n        preferredScreenCaptureFormat = jsonDictionary.json(atKeyPath: \"preferredScreenCaptureFormat\") ?? Scheme.Test.preferredScreenCaptureFormatDefault\n    }\n}\n\nextension Scheme.Test: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"commandLineArguments\": commandLineArguments,\n            \"targets\": targets.map { $0.toJSONValue() },\n            \"preActions\": preActions.map { $0.toJSONValue() },\n            \"postActions\": postActions.map { $0.toJSONValue() },\n            \"environmentVariables\": environmentVariables.map { $0.toJSONValue() },\n            \"testPlans\": testPlans.map { $0.toJSONValue() },\n            \"config\": config,\n            \"language\": language,\n            \"region\": region,\n            \"coverageTargets\": coverageTargets.map { $0.reference },\n            \"macroExpansion\": macroExpansion\n        ]\n\n        if gatherCoverageData != Scheme.Test.gatherCoverageDataDefault {\n            dict[\"gatherCoverageData\"] = gatherCoverageData\n        }\n\n        if enableAddressSanitizer != Scheme.Test.enableAddressSanitizerDefault {\n            dict[\"enableAddressSanitizer\"] = enableAddressSanitizer\n        }\n\n        if enableASanStackUseAfterReturn != Scheme.Test.enableASanStackUseAfterReturnDefault {\n            dict[\"enableASanStackUseAfterReturn\"] = enableASanStackUseAfterReturn\n        }\n\n        if enableThreadSanitizer != Scheme.Test.enableThreadSanitizerDefault {\n            dict[\"enableThreadSanitizer\"] = enableThreadSanitizer\n        }\n\n        if enableUBSanitizer != Scheme.Test.enableUBSanitizerDefault {\n            dict[\"enableUBSanitizer\"] = enableUBSanitizer\n        }\n\n        if disableMainThreadChecker != Scheme.Test.disableMainThreadCheckerDefault {\n            dict[\"disableMainThreadChecker\"] = disableMainThreadChecker\n        }\n\n        if debugEnabled != Scheme.Run.debugEnabledDefault {\n            dict[\"debugEnabled\"] = debugEnabled\n        }\n\n        if let customLLDBInit = customLLDBInit {\n            dict[\"customLLDBInit\"] = customLLDBInit\n        }\n\n        if captureScreenshotsAutomatically != Scheme.Test.captureScreenshotsAutomaticallyDefault {\n            dict[\"captureScreenshotsAutomatically\"] = captureScreenshotsAutomatically\n        }\n\n        if deleteScreenshotsWhenEachTestSucceeds != Scheme.Test.deleteScreenshotsWhenEachTestSucceedsDefault {\n            dict[\"deleteScreenshotsWhenEachTestSucceeds\"] = deleteScreenshotsWhenEachTestSucceeds\n        }\n\n        if preferredScreenCaptureFormat != Scheme.Test.preferredScreenCaptureFormatDefault {\n            dict[\"preferredScreenCaptureFormat\"] = preferredScreenCaptureFormat.toJSONValue()\n        }\n\n        return dict\n    }\n}\n\nextension Scheme.Test.TestTarget: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let name: String = jsonDictionary.json(atKeyPath: \"name\")  {\n            targetReference = try TestableTargetReference(name)\n        } else if let local: String = jsonDictionary.json(atKeyPath: \"local\") {\n            self.targetReference = TestableTargetReference.local(local)\n        } else if let project: String = jsonDictionary.json(atKeyPath: \"project\") {\n            self.targetReference = TestableTargetReference.project(project)\n        } else if let package: String = jsonDictionary.json(atKeyPath: \"package\") {\n            self.targetReference = TestableTargetReference.package(package)\n        } else {\n            self.targetReference = try jsonDictionary.json(atKeyPath: \"target\")\n        }\n        randomExecutionOrder = jsonDictionary.json(atKeyPath: \"randomExecutionOrder\") ?? Scheme.Test.TestTarget.randomExecutionOrderDefault\n        parallelizable = jsonDictionary.json(atKeyPath: \"parallelizable\") ?? Scheme.Test.TestTarget.parallelizableDefault\n        location = jsonDictionary.json(atKeyPath: \"location\") ?? nil\n        skipped = jsonDictionary.json(atKeyPath: \"skipped\") ?? false\n        skippedTests = jsonDictionary.json(atKeyPath: \"skippedTests\") ?? []\n        selectedTests = jsonDictionary.json(atKeyPath: \"selectedTests\") ?? []\n    }\n}\n\nextension Scheme.Test.TestTarget: JSONEncodable {\n    public func toJSONValue() -> Any {\n        if randomExecutionOrder == Scheme.Test.TestTarget.randomExecutionOrderDefault,\n            parallelizable == Scheme.Test.TestTarget.parallelizableDefault {\n            return targetReference.reference\n        }\n\n        var dict: JSONDictionary = [\n            \"name\": targetReference.reference,\n        ]\n\n        if randomExecutionOrder != Scheme.Test.TestTarget.randomExecutionOrderDefault {\n            dict[\"randomExecutionOrder\"] = randomExecutionOrder\n        }\n        if parallelizable != Scheme.Test.TestTarget.parallelizableDefault {\n            dict[\"parallelizable\"] = parallelizable\n        }\n        if let location = location {\n            dict[\"location\"] = location\n        }\n        if skipped {\n            dict[\"skipped\"] = skipped\n        }\n\n        return dict\n    }\n}\n\nextension Scheme.Profile: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        config = jsonDictionary.json(atKeyPath: \"config\")\n        commandLineArguments = jsonDictionary.json(atKeyPath: \"commandLineArguments\") ?? [:]\n        preActions = jsonDictionary.json(atKeyPath: \"preActions\") ?? []\n        postActions = jsonDictionary.json(atKeyPath: \"postActions\") ?? []\n        environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)\n        if let askLaunch: Bool = jsonDictionary.json(atKeyPath: \"askForAppToLaunch\") {\n            askForAppToLaunch = askLaunch\n        }\n    }\n}\n\nextension Scheme.Profile: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"commandLineArguments\": commandLineArguments,\n            \"preActions\": preActions.map { $0.toJSONValue() },\n            \"postActions\": postActions.map { $0.toJSONValue() },\n            \"environmentVariables\": environmentVariables.map { $0.toJSONValue() },\n            \"config\": config,\n            \"askForAppToLaunch\": askForAppToLaunch,\n        ] as [String: Any?]\n    }\n}\n\nextension Scheme.Analyze: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        config = jsonDictionary.json(atKeyPath: \"config\")\n    }\n}\n\nextension Scheme.Analyze: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"config\": config,\n        ]\n    }\n}\n\nextension Scheme.Archive: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        config = jsonDictionary.json(atKeyPath: \"config\")\n        customArchiveName = jsonDictionary.json(atKeyPath: \"customArchiveName\")\n        revealArchiveInOrganizer = jsonDictionary.json(atKeyPath: \"revealArchiveInOrganizer\") ?? Scheme.Archive.revealArchiveInOrganizerDefault\n        preActions = jsonDictionary.json(atKeyPath: \"preActions\") ?? []\n        postActions = jsonDictionary.json(atKeyPath: \"postActions\") ?? []\n    }\n}\n\nextension Scheme.Archive: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"preActions\": preActions.map { $0.toJSONValue() },\n            \"postActions\": postActions.map { $0.toJSONValue() },\n            \"config\": config,\n            \"customArchiveName\": customArchiveName,\n        ]\n\n        if revealArchiveInOrganizer != Scheme.Archive.revealArchiveInOrganizerDefault {\n            dict[\"revealArchiveInOrganizer\"] = revealArchiveInOrganizer\n        }\n\n        return dict\n    }\n}\n\nextension Scheme: NamedJSONDictionaryConvertible {\n\n    public init(name: String, jsonDictionary: JSONDictionary) throws {\n        self.name = name\n        build = try jsonDictionary.json(atKeyPath: \"build\")\n        run = jsonDictionary.json(atKeyPath: \"run\")\n        test = jsonDictionary.json(atKeyPath: \"test\")\n        analyze = jsonDictionary.json(atKeyPath: \"analyze\")\n        profile = jsonDictionary.json(atKeyPath: \"profile\")\n        archive = jsonDictionary.json(atKeyPath: \"archive\")\n        management = jsonDictionary.json(atKeyPath: \"management\")\n    }\n}\n\nextension Scheme: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"build\": build.toJSONValue(),\n            \"run\": run?.toJSONValue(),\n            \"test\": test?.toJSONValue(),\n            \"analyze\": analyze?.toJSONValue(),\n            \"profile\": profile?.toJSONValue(),\n            \"archive\": archive?.toJSONValue(),\n            \"management\": management?.toJSONValue(),\n        ] as [String: Any?]\n    }\n}\n\nextension Scheme.Build: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        let targetDictionary: JSONDictionary = try jsonDictionary.json(atKeyPath: \"targets\")\n        var targets: [Scheme.BuildTarget] = []\n        for (targetRepr, possibleBuildTypes) in targetDictionary {\n            let buildTypes: [BuildType]\n            if let string = possibleBuildTypes as? String {\n                switch string {\n                case \"all\": buildTypes = BuildType.all\n                case \"none\": buildTypes = []\n                case \"testing\": buildTypes = [.testing, .analyzing]\n                case \"indexing\": buildTypes = [.testing, .analyzing, .archiving]\n                default: buildTypes = BuildType.all\n                }\n            } else if let enabledDictionary = possibleBuildTypes as? [String: Bool] {\n                buildTypes = enabledDictionary.filter { $0.value }.compactMap { BuildType.from(jsonValue: $0.key) }\n            } else if let array = possibleBuildTypes as? [String] {\n                buildTypes = array.compactMap(BuildType.from)\n            } else {\n                buildTypes = BuildType.all\n            }\n            let target = try TestableTargetReference(targetRepr)\n            targets.append(Scheme.BuildTarget(target: target, buildTypes: buildTypes))\n        }\n        self.targets = targets.sorted { $0.target.name < $1.target.name }\n        preActions = try jsonDictionary.json(atKeyPath: \"preActions\")?.map(Scheme.ExecutionAction.init) ?? []\n        postActions = try jsonDictionary.json(atKeyPath: \"postActions\")?.map(Scheme.ExecutionAction.init) ?? []\n        parallelizeBuild = jsonDictionary.json(atKeyPath: \"parallelizeBuild\") ?? Scheme.Build.parallelizeBuildDefault\n        buildImplicitDependencies = jsonDictionary.json(atKeyPath: \"buildImplicitDependencies\") ?? Scheme.Build.buildImplicitDependenciesDefault\n        runPostActionsOnFailure = jsonDictionary.json(atKeyPath: \"runPostActionsOnFailure\") ?? Scheme.Build.runPostActionsOnFailureDefault\n    }\n}\n\nextension Scheme.Build: JSONEncodable {\n    public func toJSONValue() -> Any {\n        let targetPairs = targets.map { ($0.target.reference, $0.buildTypes.map { $0.toJSONValue() }) }\n\n        var dict: JSONDictionary = [\n            \"targets\": Dictionary(uniqueKeysWithValues: targetPairs),\n            \"preActions\": preActions.map { $0.toJSONValue() },\n            \"postActions\": postActions.map { $0.toJSONValue() },\n        ]\n\n        if parallelizeBuild != Scheme.Build.parallelizeBuildDefault {\n            dict[\"parallelizeBuild\"] = parallelizeBuild\n        }\n        if buildImplicitDependencies != Scheme.Build.buildImplicitDependenciesDefault {\n            dict[\"buildImplicitDependencies\"] = buildImplicitDependencies\n        }\n        if runPostActionsOnFailure != Scheme.Build.runPostActionsOnFailureDefault {\n            dict[\"runPostActionsOnFailure\"] = runPostActionsOnFailure\n        }\n\n        return dict\n    }\n}\n\nextension BuildType: JSONUtilities.JSONPrimitiveConvertible {\n\n    public typealias JSONType = String\n\n    public static func from(jsonValue: String) -> BuildType? {\n        switch jsonValue {\n        case \"test\", \"testing\": return .testing\n        case \"profile\", \"profiling\": return .profiling\n        case \"run\", \"running\": return .running\n        case \"archive\", \"archiving\": return .archiving\n        case \"analyze\", \"analyzing\": return .analyzing\n        default: return nil\n        }\n    }\n\n    public static var all: [BuildType] {\n        [.running, .testing, .profiling, .analyzing, .archiving]\n    }\n}\n\nextension BuildType: JSONEncodable {\n    public func toJSONValue() -> Any {\n        switch self {\n        case .testing: return \"testing\"\n        case .profiling: return \"profiling\"\n        case .running: return \"running\"\n        case .archiving: return \"archiving\"\n        case .analyzing: return \"analyzing\"\n        }\n    }\n}\n\nextension XCScheme.EnvironmentVariable: JSONUtilities.JSONObjectConvertible {\n    public static let enabledDefault = true\n\n    private static func parseValue(_ value: Any) -> String {\n        if let bool = value as? Bool {\n            return bool ? \"YES\" : \"NO\"\n        } else {\n            return String(describing: value)\n        }\n    }\n\n    public init(jsonDictionary: JSONDictionary) throws {\n\n        let value: String\n        if let jsonValue = jsonDictionary[\"value\"] {\n            value = XCScheme.EnvironmentVariable.parseValue(jsonValue)\n        } else {\n            // will throw error\n            value = try jsonDictionary.json(atKeyPath: \"value\")\n        }\n        let variable: String = try jsonDictionary.json(atKeyPath: \"variable\")\n        let enabled: Bool = jsonDictionary.json(atKeyPath: \"isEnabled\") ?? XCScheme.EnvironmentVariable.enabledDefault\n        self.init(variable: variable, value: value, enabled: enabled)\n    }\n\n    static func parseAll(jsonDictionary: JSONDictionary) throws -> [XCScheme.EnvironmentVariable] {\n        if let variablesDictionary: [String: Any] = jsonDictionary.json(atKeyPath: \"environmentVariables\") {\n            return variablesDictionary.mapValues(parseValue)\n                .map { XCScheme.EnvironmentVariable(variable: $0.key, value: $0.value, enabled: true) }\n                .sorted { $0.variable < $1.variable }\n        } else if let variablesArray: [JSONDictionary] = jsonDictionary.json(atKeyPath: \"environmentVariables\") {\n            return try variablesArray.map(XCScheme.EnvironmentVariable.init)\n        } else {\n            return []\n        }\n    }\n}\n\nextension XCScheme.EnvironmentVariable: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any] = [\n            \"variable\": variable,\n            \"value\": value,\n        ]\n\n        if enabled != XCScheme.EnvironmentVariable.enabledDefault {\n            dict[\"isEnabled\"] = enabled\n        }\n\n        return dict\n    }\n}\n\nextension XCScheme.LaunchAction.GPUFrameCaptureMode: JSONEncodable {\n    public func toJSONValue() -> Any {\n        switch self {\n        case .autoEnabled:\n            return \"autoEnabled\"\n        case .metal:\n            return \"metal\"\n        case .openGL:\n            return \"openGL\"\n        case .disabled:\n            return \"disabled\"\n        }\n    }\n\n    static func fromJSONValue(_ string: String) -> XCScheme.LaunchAction.GPUFrameCaptureMode {\n        switch string {\n        case \"autoEnabled\":\n            return .autoEnabled\n        case \"metal\":\n            return .metal\n        case \"openGL\":\n            return .openGL\n        case \"disabled\":\n            return .disabled\n        default:\n            fatalError(\"Invalid enableGPUFrameCaptureMode value. Valid values are: autoEnabled, metal, openGL, disabled\")\n        }\n    }\n}\n\nextension XCScheme.TestAction.ScreenCaptureFormat: JSONEncodable {\n    public func toJSONValue() -> Any {\n        rawValue\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Settings.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport XcodeProj\n\npublic struct Settings: Equatable, JSONObjectConvertible, CustomStringConvertible {\n\n    public var buildSettings: BuildSettings\n    public var configSettings: [String: Settings]\n    public var groups: [String]\n\n    public init(buildSettings: BuildSettings = [:], configSettings: [String: Settings] = [:], groups: [String] = []) {\n        self.buildSettings = buildSettings\n        self.configSettings = configSettings\n        self.groups = groups\n    }\n\n    public static let empty: Settings = Settings(buildSettings: [:])\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if jsonDictionary[\"configs\"] != nil || jsonDictionary[\"groups\"] != nil || jsonDictionary[\"base\"] != nil {\n            groups = jsonDictionary.json(atKeyPath: \"groups\") ?? jsonDictionary.json(atKeyPath: \"presets\") ?? []\n            let buildSettingsDictionary: JSONDictionary = jsonDictionary.json(atKeyPath: \"base\") ?? [:]\n            buildSettings = buildSettingsDictionary.mapValues { BuildSetting(any: $0) }\n\n            self.configSettings = try Self.extractValidConfigs(from: jsonDictionary)\n        } else {\n            buildSettings = jsonDictionary.mapValues { BuildSetting(any: $0) }\n            configSettings = [:]\n            groups = []\n        }\n    }\n\n    /// Extracts and validates the `configs` mapping from the given JSON dictionary.\n    /// - Parameter jsonDictionary: The JSON dictionary to extract `configs` from.\n    /// - Returns: A dictionary mapping configuration names to `Settings` objects.\n    private static func extractValidConfigs(from jsonDictionary: JSONDictionary) throws -> [String: Settings] {\n        guard let configSettings = jsonDictionary[\"configs\"] as? JSONDictionary else {\n            return [:]\n        }\n\n        let invalidConfigKeys = Set(\n            configSettings.filter { !($0.value is JSONDictionary) }\n                .map(\\.key)\n        )\n\n        guard invalidConfigKeys.isEmpty else {\n            throw SpecParsingError.invalidConfigsMappingFormat(keys: invalidConfigKeys)\n        }\n\n        return try jsonDictionary.json(atKeyPath: \"configs\")\n    }\n\n    public static func == (lhs: Settings, rhs: Settings) -> Bool {\n        lhs.buildSettings == rhs.buildSettings &&\n            lhs.configSettings == rhs.configSettings &&\n            lhs.groups == rhs.groups\n    }\n\n    public var description: String {\n        var string: String = \"\"\n        if !buildSettings.isEmpty {\n            let buildSettingDescription = buildSettings.map { \"\\($0) = \\($1)\" }.joined(separator: \"\\n\")\n            if !configSettings.isEmpty || !groups.isEmpty {\n                string += \"base:\\n  \" + buildSettingDescription.replacingOccurrences(of: \"(.)\\n\", with: \"$1\\n  \", options: .regularExpression, range: nil)\n            } else {\n                string += buildSettingDescription\n            }\n        }\n        if !configSettings.isEmpty {\n            if !string.isEmpty {\n                string += \"\\n\"\n            }\n            for (config, buildSettings) in configSettings {\n                if !buildSettings.description.isEmpty {\n                    string += \"configs:\\n\"\n                    string += \"  \\(config):\\n    \" + buildSettings.description.replacingOccurrences(of: \"(.)\\n\", with: \"$1\\n    \", options: .regularExpression, range: nil)\n                }\n            }\n        }\n        if !groups.isEmpty {\n            if !string.isEmpty {\n                string += \"\\n\"\n            }\n            string += \"groups:\\n  \\(groups.joined(separator: \"\\n  \"))\"\n        }\n        return string\n    }\n}\n\nextension Settings: ExpressibleByDictionaryLiteral {\n\n    public init(dictionaryLiteral elements: (String, BuildSetting)...) {\n        var buildSettings: BuildSettings = [:]\n        elements.forEach { buildSettings[$0.0] = $0.1 }\n        self.init(buildSettings: buildSettings)\n    }\n}\n\nextension Dictionary where Key == String {\n\n    public func merged(_ dictionary: [Key: Value]) -> [Key: Value] {\n        var mergedDictionary = self\n        mergedDictionary.merge(dictionary)\n        return mergedDictionary\n    }\n\n    public mutating func merge(_ dictionary: [Key: Value]) {\n        for (key, value) in dictionary {\n            self[key] = value\n        }\n    }\n}\n\npublic func += (lhs: inout BuildSettings, rhs: BuildSettings?) {\n    guard let rhs = rhs else { return }\n    lhs.merge(rhs)\n}\n\nextension BuildSetting {\n\n    public init(any value: Any) {\n        if let array = value as? [String] {\n            self = .array(array)\n        } else if let bool = value as? Bool {\n            self = .init(booleanLiteral: bool)\n        } else {\n            self = .string(\"\\(value)\")\n        }\n    }\n\n    public func toAny() -> Any {\n        switch self {\n        case let .string(value): return value\n        case let .array(value): return value\n        }\n    }\n}\n\nextension ProjectAttribute {\n\n    public init(any value: Any) {\n        if let array = value as? [String] {\n            self = .array(array)\n        } else if let object = value as? PBXObject {\n            self = .targetReference(object)\n        } else {\n            self = .string(\"\\(value)\")\n        }\n    }\n}\n\nextension Settings: JSONEncodable {\n    public func toJSONValue() -> Any {\n        let anySettings = buildSettings.mapValues { $0.toAny() }\n        if groups.count > 0 || configSettings.count > 0 {\n            return [\n                \"base\": anySettings,\n                \"groups\": groups,\n                \"configs\": configSettings.mapValues { $0.toJSONValue() },\n            ] as [String : Any]\n        }\n        return anySettings\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SourceType.swift",
    "content": "//\n//  File.swift\n//  \n//\n//  Created by Yonas Kolb on 1/5/20.\n//\n\nimport Foundation\n\npublic enum SourceType: String {\n    case group\n    case file\n    case folder\n    case syncedFolder\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SpecFile.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport Yams\n\npublic struct SpecFile {\n    /// For the root spec, this is the folder containing the SpecFile. For subSpecs this is the path\n    /// to the folder of the parent spec that is including this SpecFile.\n    public let basePath: Path\n    public let jsonDictionary: JSONDictionary\n    public let subSpecs: [SpecFile]\n\n    /// The relative path to use when resolving paths in the json dictionary. Is an empty path when\n    /// included with relativePaths disabled.\n    private let relativePath: Path\n    \n    /// The path to the file relative to the basePath.\n    private let filePath: Path\n\n    fileprivate struct Include {\n        let path: Path\n        let relativePaths: Bool\n        let enable: Bool\n\n        static let defaultRelativePaths = true\n        static let defaultEnable = true\n\n        init?(any: Any) {\n            if let string = any as? String {\n                path = Path(string)\n                relativePaths = Include.defaultRelativePaths\n                enable = Include.defaultEnable\n            } else if let dictionary = any as? JSONDictionary, let path = dictionary[\"path\"] as? String {\n                self.path = Path(path)\n                relativePaths = Self.resolveBoolean(dictionary, key: \"relativePaths\") ?? Include.defaultRelativePaths\n                enable = Self.resolveBoolean(dictionary, key: \"enable\") ?? Include.defaultEnable\n            } else {\n                return nil\n            }\n        }\n\n        static func parse(json: Any?) -> [Include] {\n            if let array = json as? [Any] {\n                return array.compactMap(Include.init)\n            } else if let object = json, let include = Include(any: object) {\n                return [include]\n            } else {\n                return []\n            }\n        }\n\n        private static func resolveBoolean(_ dictionary: [String: Any], key: String) -> Bool? {\n            dictionary[key] as? Bool ?? (dictionary[key] as? NSString)?.boolValue\n        }\n    }\n    \n    /// Create a SpecFile for a Project\n    /// - Parameters:\n    ///   - path: The absolute path to the spec file\n    ///   - projectRoot: The root of the project to use as the base path. When nil, uses the parent\n    ///     of the path.\n    public init(path: Path, projectRoot: Path? = nil, variables: [String: String] = [:]) throws {\n        let basePath = projectRoot ?? path.parent()\n        let filePath = try path.relativePath(from: basePath)\n        var cachedSpecFiles: [Path: SpecFile] = [:]\n        \n        try self.init(filePath: filePath, basePath: basePath, cachedSpecFiles: &cachedSpecFiles, variables: variables)\n    }\n    \n    /// Memberwise initializer for SpecFile\n    public init(filePath: Path, jsonDictionary: JSONDictionary, basePath: Path = \"\", relativePath: Path = \"\", subSpecs: [SpecFile] = []) {\n        self.basePath = basePath\n        self.relativePath = relativePath\n        self.jsonDictionary = jsonDictionary\n        self.subSpecs = subSpecs\n        self.filePath = filePath\n    }\n\n    private init(include: Include, basePath: Path, relativePath: Path, cachedSpecFiles: inout [Path: SpecFile], variables: [String: String]) throws {\n        let basePath = include.relativePaths ? (basePath + relativePath) : basePath\n        let relativePath = include.relativePaths ? include.path.parent() : Path()\n\n        try self.init(filePath: include.path, basePath: basePath, cachedSpecFiles: &cachedSpecFiles, variables: variables, relativePath: relativePath)\n    }\n\n    private init(filePath: Path, basePath: Path, cachedSpecFiles: inout [Path: SpecFile], variables: [String: String], relativePath: Path = \"\") throws {\n        let path = basePath + filePath\n        if let specFile = cachedSpecFiles[path] {\n            self = specFile\n            return\n        }\n\n        let jsonDictionary = try SpecFile.loadDictionary(path: path).expand(variables: variables)\n\n        let includes = Include.parse(json: jsonDictionary[\"include\"])\n        let subSpecs: [SpecFile] = try includes\n            .filter(\\.enable)\n            .map { include in\n                return try SpecFile(include: include, basePath: basePath, relativePath: relativePath, cachedSpecFiles: &cachedSpecFiles, variables: variables)\n            }\n\n        self.init(filePath: filePath, jsonDictionary: jsonDictionary, basePath: basePath, relativePath: relativePath, subSpecs: subSpecs)\n        cachedSpecFiles[path] = self\n    }\n\n    static func loadDictionary(path: Path) throws -> JSONDictionary {\n        // Depending on the extension we will either load the file as YAML or JSON\n        if path.extension?.lowercased() == \"json\" {\n            let data: Data = try path.read()\n            let jsonData = try JSONSerialization.jsonObject(with: data, options: .allowFragments)\n            guard let jsonDictionary = jsonData as? [String: Any] else {\n                fatalError(\"Invalid JSON at path \\(path)\")\n            }\n            return jsonDictionary\n        } else {\n            return try loadYamlDictionary(path: path)\n        }\n    }\n\n    public func resolvedDictionary() -> JSONDictionary {\n        resolvedDictionaryWithUniqueTargets()\n    }\n\n    private func resolvedDictionaryWithUniqueTargets() -> JSONDictionary {\n        var cachedSpecFiles: [Path: SpecFile] = [:]\n        let resolvedSpec = resolvingPaths(cachedSpecFiles: &cachedSpecFiles)\n\n        var mergedSpecPaths = Set<Path>()\n        return resolvedSpec.mergedDictionary(set: &mergedSpecPaths)\n    }\n\n    private func mergedDictionary(set mergedSpecPaths: inout Set<Path>) -> JSONDictionary {\n        let path = basePath + filePath\n\n        guard mergedSpecPaths.insert(path).inserted else { return [:] }\n\n        return jsonDictionary.merged(onto:\n            subSpecs\n                .map { $0.mergedDictionary(set: &mergedSpecPaths) }\n                .reduce([:]) { $1.merged(onto: $0) })\n    }\n\n    private func resolvingPaths(cachedSpecFiles: inout [Path: SpecFile], relativeTo basePath: Path = Path()) -> SpecFile {\n        let path = basePath + filePath\n        if let cachedSpecFile = cachedSpecFiles[path] {\n            return cachedSpecFile\n        }\n\n        let relativePath = (basePath + self.relativePath).normalize()\n        guard relativePath != Path() else {\n            return self\n        }\n\n        let jsonDictionary = Project.pathProperties.resolvingPaths(in: self.jsonDictionary, relativeTo: relativePath)\n        let specFile = SpecFile(\n            filePath: filePath,\n            jsonDictionary: jsonDictionary,\n            basePath: self.basePath,\n            relativePath: self.relativePath,\n            subSpecs: subSpecs.map { $0.resolvingPaths(cachedSpecFiles: &cachedSpecFiles, relativeTo: relativePath) }\n        )\n        cachedSpecFiles[path] = specFile\n        return specFile\n    }\n}\n\nextension Dictionary where Key == String, Value: Any {\n\n    func merged(onto other: [Key: Value]) -> [Key: Value] {\n        var merged = other\n\n        for (key, value) in self {\n            if key.hasSuffix(\":REPLACE\") {\n                let newKey = key[key.startIndex..<key.index(key.endIndex, offsetBy: -8)]\n                merged[Key(newKey)] = value\n            } else if let dictionary = value as? [Key: Value], let base = merged[key] as? [Key: Value] {\n                merged[key] = dictionary.merged(onto: base) as? Value\n            } else if let array = value as? [Any], let base = merged[key] as? [Any] {\n                merged[key] = (base + array) as? Value\n            } else {\n                merged[key] = value\n            }\n        }\n        return merged\n    }\n\n    func expand(variables: [String: String]) -> JSONDictionary {\n        var expanded: JSONDictionary = self\n\n        if !variables.isEmpty {\n            for (key, value) in self {\n                let newKey = expand(variables: variables, in: key)\n                if newKey != key {\n                    expanded.removeValue(forKey: key)\n                }\n                expanded[newKey] = expand(variables: variables, in: value)\n            }\n        }\n\n        return expanded\n    }\n\n    private func expand(variables: [String: String], in value: Any) -> Any {\n        switch value {\n        case let dictionary as JSONDictionary:\n            return dictionary.expand(variables: variables)\n        case let string as String:\n            return expand(variables: variables, in: string)\n        case let array as [JSONDictionary]:\n            return array.map { $0.expand(variables: variables) }\n        case let array as [String]:\n            return array.map { self.expand(variables: variables, in: $0) }\n        case let anyArray as [Any]:\n            return anyArray.map { self.expand(variables: variables, in: $0) }\n        default:\n            return value\n        }\n    }\n\n    private func expand(variables: [String: String], in string: String) -> String {\n        var result = string\n        var index = result.startIndex\n\n        while index < result.endIndex {\n            let substring = result[index...]\n\n            if substring.count < 4 {\n                // We need at least 4 characters: ${x}\n                index = result.endIndex\n            } else if substring[index] == \"$\"\n                && substring[substring.index(index, offsetBy: 1)] == \"{\"\n                && substring[substring.index(index, offsetBy: 2)] != \"}\" {\n                // This is the start of a variable expansion...\n                let variableStart = index\n                if let variableEnd = substring.firstIndex(of: \"}\") {\n                    // ...with an end\n                    let nameStart = result.index(variableStart, offsetBy: 2) // Skipping ${\n                    let nameEnd = result.index(variableEnd, offsetBy: -1) // Removing trailing }\n\n                    let name = result[nameStart...nameEnd]\n\n                    if let value = variables[String(name)] {\n                        result.replaceSubrange(variableStart...variableEnd, with: value)\n                        index = result.index(index, offsetBy: value.count)\n                    } else {\n                        // Skip this whole variable for which we don't have a value\n                        index = result.index(after: variableEnd)\n                    }\n                } else {\n                    // Malformed variable, skip the whole string\n                    index = result.endIndex\n                }\n            } else {\n                // Move on to the next $ and start again or finish early\n                index = result[result.index(after: index)...].firstIndex(of: \"$\") ?? result.endIndex\n            }\n        }\n\n        return result\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SpecLoader.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport XcodeProj\nimport Yams\nimport Version\n\npublic class SpecLoader {\n\n    var project: Project!\n    public private(set) var projectDictionary: [String: Any]?\n    let version: Version\n\n    public init(version: Version) {\n        self.version = version\n    }\n\n    public func loadProject(path: Path, projectRoot: Path? = nil, variables: [String: String] = [:]) throws -> Project {\n        let projectRoot = projectRoot?.absolute()\n        let spec = try SpecFile(path: path, projectRoot: projectRoot, variables: variables)\n        let resolvedDictionary = spec.resolvedDictionary()\n        let project = try Project(basePath: projectRoot ?? spec.basePath, jsonDictionary: resolvedDictionary)\n\n        self.project = project\n        projectDictionary = resolvedDictionary\n\n        return project\n    }\n\n    public func validateProjectDictionaryWarnings() throws {\n        try projectDictionary?.validateWarnings()\n    }\n\n    public func generateCacheFile() throws -> CacheFile? {\n        guard let projectDictionary = projectDictionary,\n            let project = project else {\n            return nil\n        }\n        return try CacheFile(\n            version: version,\n            projectDictionary: projectDictionary,\n            project: project\n        )\n    }\n}\n\nprivate extension Dictionary where Key == String, Value: Any {\n\n    func validateWarnings() throws {\n        let errors: [SpecValidationError.ValidationError] = []\n\n        if !errors.isEmpty {\n            throw SpecValidationError(errors: errors)\n        }\n    }\n\n    func hasValueContaining(_ needle: String) -> Bool {\n        values.contains { value in\n            switch value {\n            case let dictionary as JSONDictionary:\n                return dictionary.hasValueContaining(needle)\n            case let string as String:\n                return string.contains(needle)\n            case let array as [JSONDictionary]:\n                return array.contains { $0.hasValueContaining(needle) }\n            case let array as [String]:\n                return array.contains { $0.contains(needle) }\n            default:\n                return false\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SpecOptions.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport Version\n\npublic struct SpecOptions: Equatable {\n    public static let settingPresetsDefault = SettingPresets.all\n    public static let createIntermediateGroupsDefault = false\n    public static let transitivelyLinkDependenciesDefault = false\n    public static let groupSortPositionDefault = GroupSortPosition.bottom\n    public static let generateEmptyDirectoriesDefault = false\n    public static let findCarthageFrameworksDefault = false\n    public static let useBaseInternationalizationDefault = true\n    public static let schemePathPrefixDefault = \"../../\"\n\n    public var minimumXcodeGenVersion: Version?\n    public var carthageBuildPath: String?\n    public var carthageExecutablePath: String?\n    public var createIntermediateGroups: Bool\n    public var bundleIdPrefix: String?\n    public var settingPresets: SettingPresets\n    public var disabledValidations: [ValidationType]\n    public var developmentLanguage: String?\n    public var usesTabs: Bool?\n    public var tabWidth: UInt?\n    public var indentWidth: UInt?\n    public var xcodeVersion: String?\n    public var projectFormat: String?\n    public var deploymentTarget: DeploymentTarget\n    public var defaultConfig: String?\n    public var transitivelyLinkDependencies: Bool\n    public var groupSortPosition: GroupSortPosition\n    public var groupOrdering: [GroupOrdering]\n    public var fileTypes: [String: FileType]\n    public var generateEmptyDirectories: Bool\n    public var findCarthageFrameworks: Bool\n    public var localPackagesGroup: String?\n    public var preGenCommand: String?\n    public var postGenCommand: String?\n    public var useBaseInternationalization: Bool\n    public var schemePathPrefix: String\n    public var defaultSourceDirectoryType: SourceType?\n\n    public enum ValidationType: String {\n        case missingConfigs\n        case missingConfigFiles\n        case missingTestPlans\n    }\n\n    public enum SettingPresets: String {\n        case all\n        case none\n        case project\n        case targets\n\n        public var applyTarget: Bool {\n            switch self {\n            case .all, .targets: return true\n            default: return false\n            }\n        }\n\n        public var applyProject: Bool {\n            switch self {\n            case .all, .project: return true\n            default: return false\n            }\n        }\n    }\n\n    /// Where groups are sorted in relation to other files\n    public enum GroupSortPosition: String {\n        /// groups are at the top\n        case top\n        /// groups are at the bottom\n        case bottom\n        /// groups are sorted with the rest of the files\n        case none\n    }\n\n    public init(\n        minimumXcodeGenVersion: Version? = nil,\n        carthageBuildPath: String? = nil,\n        carthageExecutablePath: String? = nil,\n        createIntermediateGroups: Bool = createIntermediateGroupsDefault,\n        bundleIdPrefix: String? = nil,\n        settingPresets: SettingPresets = settingPresetsDefault,\n        developmentLanguage: String? = nil,\n        indentWidth: UInt? = nil,\n        tabWidth: UInt? = nil,\n        usesTabs: Bool? = nil,\n        xcodeVersion: String? = nil,\n        projectFormat: String? = nil,\n        deploymentTarget: DeploymentTarget = .init(),\n        disabledValidations: [ValidationType] = [],\n        defaultConfig: String? = nil,\n        transitivelyLinkDependencies: Bool = transitivelyLinkDependenciesDefault,\n        groupSortPosition: GroupSortPosition = groupSortPositionDefault,\n        groupOrdering: [GroupOrdering] = [],\n        fileTypes: [String: FileType] = [:],\n        generateEmptyDirectories: Bool = generateEmptyDirectoriesDefault,\n        findCarthageFrameworks: Bool = findCarthageFrameworksDefault,\n        localPackagesGroup: String? = nil,\n        preGenCommand: String? = nil,\n        postGenCommand: String? = nil,\n        useBaseInternationalization: Bool = useBaseInternationalizationDefault,\n        schemePathPrefix: String = schemePathPrefixDefault,\n        defaultSourceDirectoryType: SourceType? = nil\n    ) {\n        self.minimumXcodeGenVersion = minimumXcodeGenVersion\n        self.carthageBuildPath = carthageBuildPath\n        self.carthageExecutablePath = carthageExecutablePath\n        self.createIntermediateGroups = createIntermediateGroups\n        self.bundleIdPrefix = bundleIdPrefix\n        self.settingPresets = settingPresets\n        self.developmentLanguage = developmentLanguage\n        self.tabWidth = tabWidth\n        self.indentWidth = indentWidth\n        self.usesTabs = usesTabs\n        self.xcodeVersion = xcodeVersion\n        self.projectFormat = projectFormat\n        self.deploymentTarget = deploymentTarget\n        self.disabledValidations = disabledValidations\n        self.defaultConfig = defaultConfig\n        self.transitivelyLinkDependencies = transitivelyLinkDependencies\n        self.groupSortPosition = groupSortPosition\n        self.groupOrdering = groupOrdering\n        self.fileTypes = fileTypes\n        self.generateEmptyDirectories = generateEmptyDirectories\n        self.findCarthageFrameworks = findCarthageFrameworks\n        self.localPackagesGroup = localPackagesGroup\n        self.preGenCommand = preGenCommand\n        self.postGenCommand = postGenCommand\n        self.useBaseInternationalization = useBaseInternationalization\n        self.schemePathPrefix = schemePathPrefix\n        self.defaultSourceDirectoryType = defaultSourceDirectoryType\n    }\n}\n\nextension SpecOptions: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let string: String = jsonDictionary.json(atKeyPath: \"minimumXcodeGenVersion\") {\n            minimumXcodeGenVersion = try Version.parse(string)\n        }\n\n        carthageBuildPath = jsonDictionary.json(atKeyPath: \"carthageBuildPath\")\n        carthageExecutablePath = jsonDictionary.json(atKeyPath: \"carthageExecutablePath\")\n        bundleIdPrefix = jsonDictionary.json(atKeyPath: \"bundleIdPrefix\")\n        settingPresets = jsonDictionary.json(atKeyPath: \"settingPresets\") ?? SpecOptions.settingPresetsDefault\n        createIntermediateGroups = jsonDictionary.json(atKeyPath: \"createIntermediateGroups\") ?? SpecOptions.createIntermediateGroupsDefault\n        developmentLanguage = jsonDictionary.json(atKeyPath: \"developmentLanguage\")\n        usesTabs = jsonDictionary.json(atKeyPath: \"usesTabs\")\n        xcodeVersion = jsonDictionary.json(atKeyPath: \"xcodeVersion\")\n        projectFormat = jsonDictionary.json(atKeyPath: \"projectFormat\")\n        indentWidth = (jsonDictionary.json(atKeyPath: \"indentWidth\") as Int?).flatMap(UInt.init)\n        tabWidth = (jsonDictionary.json(atKeyPath: \"tabWidth\") as Int?).flatMap(UInt.init)\n        deploymentTarget = jsonDictionary.json(atKeyPath: \"deploymentTarget\") ?? DeploymentTarget()\n        disabledValidations = jsonDictionary.json(atKeyPath: \"disabledValidations\") ?? []\n        defaultConfig = jsonDictionary.json(atKeyPath: \"defaultConfig\")\n        transitivelyLinkDependencies = jsonDictionary.json(atKeyPath: \"transitivelyLinkDependencies\") ?? SpecOptions.transitivelyLinkDependenciesDefault\n        groupSortPosition = jsonDictionary.json(atKeyPath: \"groupSortPosition\") ?? SpecOptions.groupSortPositionDefault\n        groupOrdering = jsonDictionary.json(atKeyPath: \"groupOrdering\") ?? []\n        generateEmptyDirectories = jsonDictionary.json(atKeyPath: \"generateEmptyDirectories\") ?? SpecOptions.generateEmptyDirectoriesDefault\n        findCarthageFrameworks = jsonDictionary.json(atKeyPath: \"findCarthageFrameworks\") ?? SpecOptions.findCarthageFrameworksDefault\n        localPackagesGroup = jsonDictionary.json(atKeyPath: \"localPackagesGroup\")\n        preGenCommand = jsonDictionary.json(atKeyPath: \"preGenCommand\")\n        postGenCommand = jsonDictionary.json(atKeyPath: \"postGenCommand\")\n        useBaseInternationalization = jsonDictionary.json(atKeyPath: \"useBaseInternationalization\") ?? SpecOptions.useBaseInternationalizationDefault\n        schemePathPrefix = jsonDictionary.json(atKeyPath: \"schemePathPrefix\") ?? SpecOptions.schemePathPrefixDefault\n        defaultSourceDirectoryType = jsonDictionary.json(atKeyPath: \"defaultSourceDirectoryType\")\n        if jsonDictionary[\"fileTypes\"] != nil {\n            fileTypes = try jsonDictionary.json(atKeyPath: \"fileTypes\")\n        } else {\n            fileTypes = [:]\n        }\n    }\n}\n\nextension SpecOptions: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"deploymentTarget\": deploymentTarget.toJSONValue(),\n            \"transitivelyLinkDependencies\": transitivelyLinkDependencies,\n            \"groupSortPosition\": groupSortPosition.rawValue,\n            \"disabledValidations\": disabledValidations.map { $0.rawValue },\n            \"minimumXcodeGenVersion\": minimumXcodeGenVersion?.description,\n            \"carthageBuildPath\": carthageBuildPath,\n            \"carthageExecutablePath\": carthageExecutablePath,\n            \"bundleIdPrefix\": bundleIdPrefix,\n            \"developmentLanguage\": developmentLanguage,\n            \"usesTabs\": usesTabs,\n            \"xcodeVersion\": xcodeVersion,\n            \"projectFormat\": projectFormat,\n            \"indentWidth\": indentWidth.flatMap { Int($0) },\n            \"tabWidth\": tabWidth.flatMap { Int($0) },\n            \"defaultConfig\": defaultConfig,\n            \"localPackagesGroup\": localPackagesGroup,\n            \"preGenCommand\": preGenCommand,\n            \"postGenCommand\": postGenCommand,\n            \"fileTypes\": fileTypes.mapValues { $0.toJSONValue() }\n        ]\n\n        if settingPresets != SpecOptions.settingPresetsDefault {\n            dict[\"settingPresets\"] = settingPresets.rawValue\n        }\n        if createIntermediateGroups != SpecOptions.createIntermediateGroupsDefault {\n            dict[\"createIntermediateGroups\"] = createIntermediateGroups\n        }\n        if generateEmptyDirectories != SpecOptions.generateEmptyDirectoriesDefault {\n            dict[\"generateEmptyDirectories\"] = generateEmptyDirectories\n        }\n        if findCarthageFrameworks != SpecOptions.findCarthageFrameworksDefault {\n            dict[\"findCarthageFrameworks\"] = findCarthageFrameworks\n        }\n        if useBaseInternationalization != SpecOptions.useBaseInternationalizationDefault {\n            dict[\"useBaseInternationalization\"] = useBaseInternationalization\n        }\n        if schemePathPrefix != SpecOptions.schemePathPrefixDefault {\n            dict[\"schemePathPrefix\"] = schemePathPrefix\n        }\n\n        return dict\n    }\n}\n\nextension SpecOptions: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"carthageBuildPath\"),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SpecParsingError.swift",
    "content": "import Foundation\n\npublic enum SpecParsingError: Error, CustomStringConvertible {\n    case unknownTargetType(String)\n    case unknownTargetPlatform(String)\n    case invalidDependency([String: Any])\n    case unknownPackageRequirement([String: Any])\n    case invalidSourceBuildPhase(String)\n    case invalidTargetReference(String)\n    case invalidTargetPlatformAsArray\n    case invalidVersion(String)\n    case unknownBreakpointType(String)\n    case unknownBreakpointScope(String)\n    case unknownBreakpointStopOnStyle(String)\n    case unknownBreakpointActionType(String)\n    case unknownBreakpointActionConveyanceType(String)\n    case unknownBreakpointActionSoundName(String)\n    case invalidConfigsMappingFormat(keys: Set<String>)\n\n    public var description: String {\n        switch self {\n        case let .unknownTargetType(type):\n            return \"Unknown Target type: \\(type)\"\n        case let .unknownTargetPlatform(platform):\n            return \"Unknown Target platform: \\(platform)\"\n        case let .invalidDependency(dependency):\n            return \"Unknown Target dependency: \\(dependency)\"\n        case let .invalidSourceBuildPhase(error):\n            return \"Invalid Source Build Phase: \\(error)\"\n        case let .invalidTargetReference(targetReference):\n            return \"Invalid Target Reference Syntax: \\(targetReference)\"\n        case .invalidTargetPlatformAsArray:\n            return \"Invalid Target platform: Array not allowed with supported destinations\"\n        case let .invalidVersion(version):\n            return \"Invalid version: \\(version)\"\n        case let .unknownPackageRequirement(package):\n            return \"Unknown package requirement: \\(package)\"\n        case let .unknownBreakpointType(type):\n            return \"Unknown Breakpoint type: \\(type)\"\n        case let .unknownBreakpointScope(scope):\n            return \"Unknown Breakpoint scope: \\(scope)\"\n        case let .unknownBreakpointStopOnStyle(stopOnStyle):\n            return \"Unknown Breakpoint stopOnStyle: \\(stopOnStyle)\"\n        case let .unknownBreakpointActionType(type):\n            return \"Unknown Breakpoint Action type: \\(type)\"\n        case let .unknownBreakpointActionConveyanceType(type):\n            return \"Unknown Breakpoint Action conveyance type: \\(type)\"\n        case let .unknownBreakpointActionSoundName(name):\n            return \"Unknown Breakpoint Action sound name: \\(name)\"\n        case let .invalidConfigsMappingFormat(keys):\n            return \"Invalid format: The value for \\\"\\(keys.sorted().joined(separator: \", \"))\\\" in `configs` must be mapping format\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SpecValidation.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport Version\n\nextension Project {\n\n    public func validate() throws {\n\n        var errors: [SpecValidationError.ValidationError] = []\n        func validateSettings(_ settings: Settings) -> [SpecValidationError.ValidationError] {\n            var errors: [SpecValidationError.ValidationError] = []\n            for group in settings.groups {\n                if let settings = settingGroups[group] {\n                    errors += validateSettings(settings)\n                } else {\n                    errors.append(.invalidSettingsGroup(group))\n                }\n            }\n\n            for config in settings.configSettings.keys {\n                if !configs.contains(where: { $0.name.lowercased().contains(config.lowercased()) }),\n                   !options.disabledValidations.contains(.missingConfigs) {\n                    errors.append(.invalidBuildSettingConfig(config))\n                }\n            }\n\n            if settings.buildSettings.count == configs.count {\n                var allConfigs = true\n                outerLoop: for buildSetting in settings.buildSettings.keys {\n                    var isConfig = false\n                    for config in configs {\n                        if config.name.lowercased().contains(buildSetting.lowercased()) {\n                            isConfig = true\n                            break\n                        }\n                    }\n                    if !isConfig {\n                        allConfigs = false\n                        break outerLoop\n                    }\n                }\n\n                if allConfigs {\n                    errors.append(.invalidPerConfigSettings)\n                }\n            }\n            return errors\n        }\n\n        errors += validateSettings(settings)\n\n        for fileGroup in fileGroups {\n            if !(basePath + fileGroup).exists {\n                errors.append(.invalidFileGroup(fileGroup))\n            }\n        }\n\n        for (name, package) in packages {\n            if case let .local(path, _, _) = package, !(basePath + Path(path).normalize()).exists {\n                errors.append(.invalidLocalPackage(name))\n            }\n        }\n\n        for (config, configFile) in configFiles {\n            if !options.disabledValidations.contains(.missingConfigFiles) && !(basePath + configFile).exists {\n                errors.append(.invalidConfigFile(configFile: configFile, config: config))\n            }\n            if !options.disabledValidations.contains(.missingConfigs) && getConfig(config) == nil {\n                errors.append(.invalidConfigFileConfig(config))\n            }\n        }\n\n        if let configName = options.defaultConfig {\n            if !configs.contains(where: { $0.name == configName }) {\n                errors.append(.missingDefaultConfig(configName: configName))\n            }\n        }\n\n        for settings in settingGroups.values {\n            errors += validateSettings(settings)\n        }\n\n        for target in projectTargets {\n\n            for (config, configFile) in target.configFiles {\n                let configPath = basePath + configFile\n                if !options.disabledValidations.contains(.missingConfigFiles) && !configPath.exists {\n                    errors.append(.invalidTargetConfigFile(target: target.name, configFile: configPath.string, config: config))\n                }\n                if !options.disabledValidations.contains(.missingConfigs) && getConfig(config) == nil {\n                    errors.append(.invalidConfigFileConfig(config))\n                }\n            }\n\n            if let scheme = target.scheme {\n                \n                for configVariant in scheme.configVariants {\n                    if configs.first(including: configVariant, for: .debug) == nil {\n                        errors.append(.invalidTargetSchemeConfigVariant(\n                            target: target.name,\n                            configVariant: configVariant,\n                            configType: .debug\n                        ))\n                    }\n                    if configs.first(including: configVariant, for: .release) == nil {\n                        errors.append(.invalidTargetSchemeConfigVariant(\n                            target: target.name,\n                            configVariant: configVariant,\n                            configType: .release\n                        ))\n                    }\n                }\n\n                if scheme.configVariants.isEmpty {\n                    if !configs.contains(where: { $0.type == .debug }) {\n                        errors.append(.missingConfigForTargetScheme(target: target.name, configType: .debug))\n                    }\n                    if !configs.contains(where: { $0.type == .release }) {\n                        errors.append(.missingConfigForTargetScheme(target: target.name, configType: .release))\n                    }\n                }\n\n                for testTarget in scheme.testTargets {\n                    if getTarget(testTarget.name) == nil {\n                        // For test case of local Swift Package\n                        if case .package(let name) = testTarget.targetReference.location, getPackage(name) != nil {\n                            continue\n                        }\n                        errors.append(.invalidTargetSchemeTest(target: target.name, testTarget: testTarget.name))\n                    }\n                }\n\n                if !options.disabledValidations.contains(.missingTestPlans) {\n                    let invalidTestPlans: [TestPlan] = scheme.testPlans.filter { !(basePath + $0.path).exists }\n                    errors.append(contentsOf: invalidTestPlans.map{ .invalidTestPlan($0) })\n                }\n            }\n\n            for script in target.buildScripts {\n                if case let .path(pathString) = script.script {\n                    let scriptPath = basePath + pathString\n                    if !scriptPath.exists {\n                        errors.append(.invalidBuildScriptPath(target: target.name, name: script.name, path: scriptPath.string))\n                    }\n                }\n            }\n\n            errors += validateSettings(target.settings)\n\n            for buildToolPlugin in target.buildToolPlugins {\n                if packages[buildToolPlugin.package] == nil {\n                    errors.append(.invalidPluginPackageReference(plugin: buildToolPlugin.plugin, package: buildToolPlugin.package))\n                }\n            }\n        }\n\n        for target in aggregateTargets {\n            for dependency in target.targets {\n                if getProjectTarget(dependency) == nil {\n                    errors.append(.invalidTargetDependency(target: target.name, dependency: dependency))\n                }\n            }\n        }\n\n        for target in targets {\n            var uniqueDependencies = Set<Dependency>()\n\n            for dependency in target.dependencies {\n                let dependencyValidationErrors = try validate(dependency, in: target)\n                errors.append(contentsOf: dependencyValidationErrors)\n\n                if uniqueDependencies.contains(dependency) {\n                    errors.append(.duplicateDependencies(target: target.name, dependencyReference: dependency.reference))\n                } else {\n                    uniqueDependencies.insert(dependency)\n                }\n            }\n\n            for source in target.sources {\n                if source.path.isEmpty {\n                    errors.append(.emptySourcePath(target: target.name))\n                    continue\n                }\n                let sourcePath = basePath + source.path\n                if !source.optional && !sourcePath.exists {\n                    errors.append(.invalidTargetSource(target: target.name, source: sourcePath.string))\n                }\n            }\n            \n            if target.supportedDestinations != nil, target.platform == .watchOS {\n                errors.append(.unexpectedTargetPlatformForSupportedDestinations(target: target.name, platform: target.platform))\n            }\n            \n            if let supportedDestinations = target.supportedDestinations,\n               target.type.isApp,\n               supportedDestinations.contains(.watchOS) {\n                errors.append(.containsWatchOSDestinationForMultiplatformApp(target: target.name))\n            }\n\n            if target.supportedDestinations?.contains(.macOS) == true,\n               target.supportedDestinations?.contains(.macCatalyst) == true {\n                \n                errors.append(.multipleMacPlatformsInSupportedDestinations(target: target.name))\n            }\n            \n            if target.supportedDestinations?.contains(.macCatalyst) == true,\n               target.platform != .iOS, target.platform != .auto {\n                \n                errors.append(.invalidTargetPlatformForSupportedDestinations(target: target.name))\n            }\n            \n            if target.platform != .auto, target.platform != .watchOS,\n               let supportedDestination = SupportedDestination(rawValue: target.platform.rawValue),\n               target.supportedDestinations?.contains(supportedDestination) == false {\n                \n                errors.append(.missingTargetPlatformInSupportedDestinations(target: target.name, platform: target.platform))\n            }\n        }\n\n        for projectReference in projectReferences {\n            if !(basePath + projectReference.path).exists {\n                errors.append(.invalidProjectReferencePath(projectReference))\n            }\n        }\n\n        for scheme in schemes {\n            errors.append(\n                contentsOf: scheme.build.targets.compactMap { validationError(for: $0.target, in: scheme, action: \"build\") }\n            )\n            if let action = scheme.run, let config = action.config, getConfig(config) == nil {\n                errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))\n            }\n\n            if !options.disabledValidations.contains(.missingTestPlans) {\n                let invalidTestPlans: [TestPlan] = scheme.test?.testPlans.filter { !(basePath + $0.path).exists } ?? []\n                errors.append(contentsOf: invalidTestPlans.map{ .invalidTestPlan($0) })\n            }\n\n            let defaultPlanCount = scheme.test?.testPlans.filter { $0.defaultPlan }.count ?? 0\n            if (defaultPlanCount > 1) {\n                errors.append(.multipleDefaultTestPlans)\n            }\n\n            if let action = scheme.test, let config = action.config, getConfig(config) == nil {\n                errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))\n            }\n            errors.append(\n                contentsOf: scheme.test?.targets.compactMap { validationError(for: $0.targetReference, in: scheme, action: \"test\") } ?? []\n            )\n            errors.append(\n                contentsOf: scheme.test?.coverageTargets.compactMap { validationError(for: $0, in: scheme, action: \"test\") } ?? []\n            )\n            if let action = scheme.profile, let config = action.config, getConfig(config) == nil {\n                errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))\n            }\n            if let action = scheme.analyze, let config = action.config, getConfig(config) == nil {\n                errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))\n            }\n            if let action = scheme.archive, let config = action.config, getConfig(config) == nil {\n                errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))\n            }\n        }\n\n        if !errors.isEmpty {\n            throw SpecValidationError(errors: errors)\n        }\n    }\n\n    public func validateMinimumXcodeGenVersion(_ xcodeGenVersion: Version) throws {\n        if let minimumXcodeGenVersion = options.minimumXcodeGenVersion, xcodeGenVersion < minimumXcodeGenVersion {\n            throw SpecValidationError(errors: [SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumXcodeGenVersion, version: xcodeGenVersion)])\n        }\n    }\n\n    // Returns error if the given dependency from target is invalid.\n    private func validate(_ dependency: Dependency, in target: Target) throws -> [SpecValidationError.ValidationError] {\n        var errors: [SpecValidationError.ValidationError] = []\n\n        switch dependency.type {\n            case .target:\n                let dependencyTargetReference = try TargetReference(dependency.reference)\n\n                switch dependencyTargetReference.location {\n                case .local:\n                    if getProjectTarget(dependency.reference) == nil {\n                        errors.append(.invalidTargetDependency(target: target.name, dependency: dependency.reference))\n                    }\n                case .project(let dependencyProjectName):\n                    if getProjectReference(dependencyProjectName) == nil {\n                        errors.append(.invalidTargetDependency(target: target.name, dependency: dependency.reference))\n                    }\n                }\n            case .sdk:\n                let path = Path(dependency.reference)\n                if !dependency.reference.contains(\"/\") {\n                    switch path.extension {\n                    case \"framework\"?,\n                            \"tbd\"?,\n                            \"dylib\"?:\n                        break\n                    default:\n                        errors.append(.invalidSDKDependency(target: target.name, dependency: dependency.reference))\n                    }\n                }\n            case .package:\n                if packages[dependency.reference] == nil {\n                    errors.append(.invalidSwiftPackage(name: dependency.reference, target: target.name))\n                }\n            default: break\n        }\n\n        return errors\n    }\n\n    /// Returns a descriptive error if the given target reference was invalid otherwise `nil`.\n    private func validationError(for targetReference: TargetReference, in scheme: Scheme, action: String) -> SpecValidationError.ValidationError? {\n        switch targetReference.location {\n        case .local where getProjectTarget(targetReference.name) == nil:\n            return .invalidSchemeTarget(scheme: scheme.name, target: targetReference.name, action: action)\n        case .project(let project) where getProjectReference(project) == nil:\n            return .invalidProjectReference(scheme: scheme.name, reference: project)\n        case .local, .project:\n            return nil\n        }\n    }\n    \n    /// Returns a descriptive error if the given target reference was invalid otherwise `nil`.\n    private func validationError(for testableTargetReference: TestableTargetReference, in scheme: Scheme, action: String) -> SpecValidationError.ValidationError? {\n        switch testableTargetReference.location {\n        case .local where getProjectTarget(testableTargetReference.name) == nil:\n            return .invalidSchemeTarget(scheme: scheme.name, target: testableTargetReference.name, action: action)\n        case .project(let project) where getProjectReference(project) == nil:\n            return .invalidProjectReference(scheme: scheme.name, reference: project)\n        case .package(let package) where getPackage(package) == nil:\n            return .invalidLocalPackage(package)\n        case .local, .project, .package:\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SpecValidationError.swift",
    "content": "import Foundation\nimport Version\n\npublic struct SpecValidationError: Error, CustomStringConvertible {\n\n    public var errors: [ValidationError]\n\n    public init(errors: [ValidationError]) {\n        self.errors = errors\n    }\n\n    public enum ValidationError: Hashable, Error, CustomStringConvertible {\n        case invalidXcodeGenVersion(minimumVersion: Version, version: Version)\n        case invalidSDKDependency(target: String, dependency: String)\n        case invalidTargetDependency(target: String, dependency: String)\n        case invalidTargetSource(target: String, source: String)\n        case invalidTargetConfigFile(target: String, configFile: String, config: String)\n        case invalidTargetSchemeConfigVariant(target: String, configVariant: String, configType: ConfigType)\n        case invalidTargetSchemeTest(target: String, testTarget: String)\n        case invalidTargetPlatformForSupportedDestinations(target: String)\n        case unexpectedTargetPlatformForSupportedDestinations(target: String, platform: Platform)\n        case containsWatchOSDestinationForMultiplatformApp(target: String)\n        case multipleMacPlatformsInSupportedDestinations(target: String)\n        case missingTargetPlatformInSupportedDestinations(target: String, platform: Platform)\n        case invalidSchemeTarget(scheme: String, target: String, action: String)\n        case invalidSchemeConfig(scheme: String, config: String)\n        case invalidSwiftPackage(name: String, target: String)\n        case invalidPackageDependencyReference(name: String)\n        case invalidLocalPackage(String)\n        case invalidConfigFile(configFile: String, config: String)\n        case invalidBuildSettingConfig(String)\n        case invalidSettingsGroup(String)\n        case invalidBuildScriptPath(target: String, name: String?, path: String)\n        case invalidFileGroup(String)\n        case invalidConfigFileConfig(String)\n        case missingConfigForTargetScheme(target: String, configType: ConfigType)\n        case missingDefaultConfig(configName: String)\n        case invalidPerConfigSettings\n        case invalidProjectReference(scheme: String, reference: String)\n        case invalidProjectReferencePath(ProjectReference)\n        case invalidTestPlan(TestPlan)\n        case multipleDefaultTestPlans\n        case duplicateDependencies(target: String, dependencyReference: String)\n        case invalidPluginPackageReference(plugin: String, package: String)\n        case emptySourcePath(target: String)\n\n        public var description: String {\n            switch self {\n            case let .invalidXcodeGenVersion(minimumVersion, version):\n                return \"XcodeGen version is \\(version), but minimum required version specified as \\(minimumVersion)\"\n            case let .invalidSDKDependency(target, dependency):\n                return \"Target \\(target.quoted) has invalid sdk dependency: \\(dependency.quoted). It must be a full path or have the following extensions: .framework, .dylib, .tbd\"\n            case let .invalidTargetDependency(target, dependency):\n                return \"Target \\(target.quoted) has invalid dependency: \\(dependency.quoted)\"\n            case let .invalidTargetConfigFile(target, configFile, config):\n                return \"Target \\(target.quoted) has invalid config file path \\(configFile.quoted) for config \\(config.quoted)\"\n            case let .invalidTargetSource(target, source):\n                return \"Target \\(target.quoted) has a missing source directory \\(source.quoted)\"\n            case let .invalidTargetSchemeConfigVariant(target, configVariant, configType):\n                return \"Target \\(target.quoted) has an invalid scheme config variant which requires a config that has a \\(configType.rawValue.quoted) type and contains the name \\(configVariant.quoted)\"\n            case let .invalidTargetSchemeTest(target, test):\n                return \"Target \\(target.quoted) scheme has invalid test \\(test.quoted)\"\n            case let .invalidTargetPlatformForSupportedDestinations(target):\n                return \"Target \\(target.quoted) has supported destinations that require a target platform iOS or auto\"\n            case let .unexpectedTargetPlatformForSupportedDestinations(target, platform):\n                return \"Target \\(target.quoted) has platform \\(platform.rawValue.quoted) that does not expect supported destinations\"\n            case let .multipleMacPlatformsInSupportedDestinations(target):\n                return \"Target \\(target.quoted) has multiple definitions of mac platforms in supported destinations\"\n            case let .missingTargetPlatformInSupportedDestinations(target, platform):\n                return \"Target \\(target.quoted) has platform \\(platform.rawValue.quoted) that is missing in supported destinations\"\n            case let .containsWatchOSDestinationForMultiplatformApp(target):\n                return \"Multiplatform app \\(target.quoted) cannot contain watchOS in \\\"supportedDestinations\\\". Create a separate target using \\\"platform\\\" for watchOS apps\"\n            case let .invalidConfigFile(configFile, config):\n                return \"Invalid config file \\(configFile.quoted) for config \\(config.quoted)\"\n            case let .invalidSchemeTarget(scheme, target, action):\n                return \"Scheme \\(scheme.quoted) has invalid \\(action) target \\(target.quoted)\"\n            case let .invalidSchemeConfig(scheme, config):\n                return \"Scheme \\(scheme.quoted) has invalid build configuration \\(config.quoted)\"\n            case let .invalidBuildSettingConfig(config):\n                return \"Build setting has invalid build configuration \\(config.quoted)\"\n            case let .invalidSettingsGroup(group):\n                return \"Invalid settings group \\(group.quoted)\"\n            case let .invalidBuildScriptPath(target, name, path):\n                return \"Target \\(target.quoted) has a script \\(name != nil ? \"\\(name!.quoted) which has a \" : \"\")path that doesn't exist \\(path.quoted)\"\n            case let .invalidFileGroup(group):\n                return \"Invalid file group \\(group.quoted)\"\n            case let .invalidConfigFileConfig(config):\n                return \"Config file has invalid config \\(config.quoted)\"\n            case let .invalidSwiftPackage(name, target):\n                return \"Target \\(target.quoted) has an invalid package dependency \\(name.quoted)\"\n            case let .invalidLocalPackage(path):\n                return \"Invalid local package \\(path.quoted)\"\n            case let .invalidPackageDependencyReference(name):\n                return \"Package reference \\(name) must be specified as package dependency, not target\"\n            case let .missingConfigForTargetScheme(target, configType):\n                return \"Target \\(target.quoted) is missing a config of type \\(configType.rawValue) to generate its scheme\"\n            case let .missingDefaultConfig(name):\n                return \"Default configuration \\(name) doesn't exist\"\n            case .invalidPerConfigSettings:\n                return \"Settings that are for a specific config must go in \\\"configs\\\". \\\"base\\\" can be used for common settings\"\n            case let .invalidProjectReference(scheme, project):\n                return \"Scheme \\(scheme.quoted) has invalid project reference \\(project.quoted)\"\n            case let .invalidProjectReferencePath(reference):\n                return \"Project reference \\(reference.name) has a project file path that doesn't exist \\\"\\(reference.path)\\\"\"\n            case let .invalidTestPlan(testPlan):\n                return \"Test plan path \\\"\\(testPlan.path)\\\" doesn't exist\"\n            case .multipleDefaultTestPlans:\n                return \"Your test plans contain more than one default test plan\"\n            case let .duplicateDependencies(target, dependencyReference):\n                 return \"Target \\(target.quoted) has the dependency \\(dependencyReference.quoted) multiple times\"\n            case let .invalidPluginPackageReference(plugin, package):\n                return \"Plugin \\(plugin) has invalid package reference \\(package)\"\n            case let .emptySourcePath(target):\n                return \"Target \\(target.quoted) has an empty source path entry\"\n            }\n        }\n    }\n\n    public var description: String {\n        let title: String\n        if errors.count == 1 {\n            title = \"Spec validation error: \"\n        } else {\n            title = \"\\(errors.count) Spec validations errors:\\n\\t- \"\n        }\n        return \"\\(title)\" + errors.map { $0.description }.joined(separator: \"\\n\\t- \")\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SupportedDestination.swift",
    "content": "import Foundation\n\npublic enum SupportedDestination: String, CaseIterable {\n    case iOS\n    case tvOS\n    case macOS\n    case macCatalyst\n    case watchOS\n    case visionOS\n}\n\nextension SupportedDestination {\n    \n    public var string: String {\n        switch self {\n        case .iOS:\n            return \"ios\"\n        case .tvOS:\n            return \"tvos\"\n        case .macOS:\n            return \"macos\"\n        case .macCatalyst:\n            return \"maccatalyst\"\n        case .watchOS:\n            return \"watchos\"\n        case .visionOS:\n            return \"xros\"\n        }\n    }\n    \n    // This is used to:\n    // 1. Get the first one and apply SettingPresets 'Platforms' and 'Product_Platform' if the platform is 'auto'\n    // 2. Sort, loop and merge together SettingPresets 'SupportedDestinations'\n    public var priority: Int {\n        switch self {\n        case .iOS:\n            return 0\n        case .tvOS:\n            return 1\n        case .watchOS:\n            return 2\n        case .visionOS:\n            return 3\n        case .macOS:\n            return 4\n        case .macCatalyst:\n            return 5\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/SwiftPackage.swift",
    "content": "import Foundation\nimport XcodeProj\nimport JSONUtilities\nimport Version\n\npublic enum SwiftPackage: Equatable {\n\n    public typealias VersionRequirement = XCRemoteSwiftPackageReference.VersionRequirement\n\n    static let githubPrefix = \"https://github.com/\"\n\n    case remote(url: String, versionRequirement: VersionRequirement)\n    case local(path: String, group: String?, excludeFromProject: Bool)\n\n    public var isLocal: Bool {\n        if case .local = self {\n            return true\n        }\n        return false\n    }\n}\n\nextension SwiftPackage: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let path: String = jsonDictionary.json(atKeyPath: \"path\") {\n            let customLocation: String? = jsonDictionary.json(atKeyPath: \"group\")\n            let excludeFromProject: Bool = jsonDictionary.json(atKeyPath: \"excludeFromProject\") ?? false\n            self = .local(path: path, group: customLocation, excludeFromProject: excludeFromProject)\n        } else {\n            let versionRequirement: VersionRequirement = try VersionRequirement(jsonDictionary: jsonDictionary)\n            try Self.validateVersion(versionRequirement: versionRequirement)\n            let url: String\n            if jsonDictionary[\"github\"] != nil {\n                let github: String = try jsonDictionary.json(atKeyPath: \"github\")\n                url = \"\\(Self.githubPrefix)\\(github)\"\n            } else {\n                url = try jsonDictionary.json(atKeyPath: \"url\")\n            }\n            self = .remote(url: url, versionRequirement: versionRequirement)\n        }\n    }\n\n    private static func validateVersion(versionRequirement: VersionRequirement) throws {\n        switch versionRequirement {\n\n        case .upToNextMajorVersion(let version):\n            try _ = Version.parse(version)\n\n        case .upToNextMinorVersion(let version):\n            try _ = Version.parse(version)\n\n        case .range(let from, let to):\n            try _ = Version.parse(from)\n            try _ = Version.parse(to)\n\n        case .exact(let version):\n            try _ = Version.parse(version)\n\n        default:\n            break\n        }\n    }\n}\n\nextension SwiftPackage: JSONEncodable {\n\n    public func toJSONValue() -> Any {\n        var dictionary: JSONDictionary = [:]\n        switch self {\n        case .remote(let url, let versionRequirement):\n            if url.hasPrefix(Self.githubPrefix) {\n                dictionary[\"github\"] = url.replacingOccurrences(of: Self.githubPrefix, with: \"\")\n            } else {\n                dictionary[\"url\"] = url\n            }\n\n            switch versionRequirement {\n\n            case .upToNextMajorVersion(let version):\n                dictionary[\"majorVersion\"] = version\n            case .upToNextMinorVersion(let version):\n                dictionary[\"minorVersion\"] = version\n            case .range(let from, let to):\n                dictionary[\"minVersion\"] = from\n                dictionary[\"maxVersion\"] = to\n            case .exact(let version):\n                dictionary[\"exactVersion\"] = version\n            case .branch(let branch):\n                dictionary[\"branch\"] = branch\n            case .revision(let revision):\n                dictionary[\"revision\"] = revision\n            }\n            return dictionary\n        case let .local(path, group, excludeFromProject):\n            dictionary[\"path\"] = path\n            dictionary[\"group\"] = group\n            dictionary[\"excludeFromProject\"] = excludeFromProject\n        }\n\n        return dictionary\n    }\n}\n\nextension SwiftPackage.VersionRequirement: JSONUtilities.JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        func json(atKeyPath keyPath: String) -> String? {\n            if jsonDictionary[keyPath] != nil {\n                do {\n                    let value: String = try jsonDictionary.json(atKeyPath: .init(rawValue: keyPath))\n                    return value\n                } catch {\n                    do {\n                        let value: Double = try jsonDictionary.json(atKeyPath: .init(rawValue: keyPath))\n                        return String(value)\n                    } catch {\n                        return nil\n                    }\n                }\n            }\n            return nil\n        }\n        \n        if let exactVersion = json(atKeyPath: \"exactVersion\") {\n            self = .exact(exactVersion)\n        } else if let version = json(atKeyPath: \"version\") {\n            self = .exact(version)\n        } else if let revision = json(atKeyPath: \"revision\") {\n            self = .revision(revision)\n        } else if let branch = json(atKeyPath: \"branch\") {\n            self = .branch(branch)\n        } else if let minVersion = json(atKeyPath: \"minVersion\"), let maxVersion = json(atKeyPath: \"maxVersion\") {\n            self = .range(from: minVersion, to: maxVersion)\n        } else if let minorVersion = json(atKeyPath: \"minorVersion\") {\n            self = .upToNextMinorVersion(minorVersion)\n        } else if let majorVersion = json(atKeyPath: \"majorVersion\") {\n            self = .upToNextMajorVersion(majorVersion)\n        } else if let from = json(atKeyPath: \"from\") {\n            self = .upToNextMajorVersion(from)\n        } else {\n            throw SpecParsingError.unknownPackageRequirement(jsonDictionary)\n        }\n    }\n}\n\nextension SwiftPackage: PathContainer {\n    static var pathProperties: [PathProperty] {\n        [\n            .dictionary([\n                .string(\"path\"),\n            ]),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Target.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport XcodeProj\nimport Version\n\npublic struct LegacyTarget: Equatable {\n    public static let passSettingsDefault = false\n\n    public var toolPath: String\n    public var arguments: String?\n    public var passSettings: Bool\n    public var workingDirectory: String?\n\n    public init(\n        toolPath: String,\n        passSettings: Bool = passSettingsDefault,\n        arguments: String? = nil,\n        workingDirectory: String? = nil\n    ) {\n        self.toolPath = toolPath\n        self.arguments = arguments\n        self.passSettings = passSettings\n        self.workingDirectory = workingDirectory\n    }\n}\n\nextension LegacyTarget: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"workingDirectory\"),\n        ]\n    }\n}\n\npublic struct Target: ProjectTarget {\n    public var name: String\n    public var type: PBXProductType\n    public var platform: Platform\n    public var supportedDestinations: [SupportedDestination]?\n    public var settings: Settings\n    public var sources: [TargetSource]\n    public var dependencies: [Dependency]\n    public var info: Plist?\n    public var entitlements: Plist?\n    public var transitivelyLinkDependencies: Bool?\n    public var directlyEmbedCarthageDependencies: Bool?\n    public var requiresObjCLinking: Bool?\n    public var preBuildScripts: [BuildScript]\n    public var buildToolPlugins: [BuildToolPlugin]\n    public var postCompileScripts: [BuildScript]\n    public var postBuildScripts: [BuildScript]\n    public var buildRules: [BuildRule]\n    public var configFiles: [String: String]\n    public var scheme: TargetScheme?\n    public var legacy: LegacyTarget?\n    public var deploymentTarget: Version?\n    public var attributes: [String: Any]\n    public var productName: String\n    public var onlyCopyFilesOnInstall: Bool\n    public var putResourcesBeforeSourcesBuildPhase: Bool\n    \n    public var isLegacy: Bool {\n        legacy != nil\n    }\n\n    public var filename: String {\n        var filename = productName\n        if let fileExtension = type.fileExtension {\n            filename += \".\\(fileExtension)\"\n        }\n        if type == .staticLibrary {\n            filename = \"lib\\(filename)\"\n        }\n        return filename\n    }\n\n    public init(\n        name: String,\n        type: PBXProductType,\n        platform: Platform,\n        supportedDestinations: [SupportedDestination]? = nil,\n        productName: String? = nil,\n        deploymentTarget: Version? = nil,\n        settings: Settings = .empty,\n        configFiles: [String: String] = [:],\n        sources: [TargetSource] = [],\n        dependencies: [Dependency] = [],\n        info: Plist? = nil,\n        entitlements: Plist? = nil,\n        transitivelyLinkDependencies: Bool? = nil,\n        directlyEmbedCarthageDependencies: Bool? = nil,\n        requiresObjCLinking: Bool? = nil,\n        preBuildScripts: [BuildScript] = [],\n        buildToolPlugins: [BuildToolPlugin] = [],\n        postCompileScripts: [BuildScript] = [],\n        postBuildScripts: [BuildScript] = [],\n        buildRules: [BuildRule] = [],\n        scheme: TargetScheme? = nil,\n        legacy: LegacyTarget? = nil,\n        attributes: [String: Any] = [:],\n        onlyCopyFilesOnInstall: Bool = false,\n        putResourcesBeforeSourcesBuildPhase: Bool = false\n    ) {\n        self.name = name\n        self.type = type\n        self.platform = platform\n        self.supportedDestinations = supportedDestinations\n        self.deploymentTarget = deploymentTarget\n        self.productName = productName ?? name\n        self.settings = settings\n        self.configFiles = configFiles\n        self.sources = sources\n        self.dependencies = dependencies\n        self.info = info\n        self.entitlements = entitlements\n        self.transitivelyLinkDependencies = transitivelyLinkDependencies\n        self.directlyEmbedCarthageDependencies = directlyEmbedCarthageDependencies\n        self.requiresObjCLinking = requiresObjCLinking\n        self.preBuildScripts = preBuildScripts\n        self.buildToolPlugins = buildToolPlugins\n        self.postCompileScripts = postCompileScripts\n        self.postBuildScripts = postBuildScripts\n        self.buildRules = buildRules\n        self.scheme = scheme\n        self.legacy = legacy\n        self.attributes = attributes\n        self.onlyCopyFilesOnInstall = onlyCopyFilesOnInstall\n        self.putResourcesBeforeSourcesBuildPhase = putResourcesBeforeSourcesBuildPhase\n    }\n}\n\nextension Target: CustomStringConvertible {\n\n    public var description: String {\n        \"\\(name): \\(platform.rawValue) \\(type)\"\n    }\n}\n\nextension Target: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .dictionary([\n                .string(\"sources\"),\n                .object(\"sources\", TargetSource.pathProperties),\n                .string(\"configFiles\"),\n                .object(\"dependencies\", Dependency.pathProperties),\n                .object(\"info\", Plist.pathProperties),\n                .object(\"entitlements\", Plist.pathProperties),\n                .object(\"preBuildScripts\", BuildScript.pathProperties),\n                .object(\"prebuildScripts\", BuildScript.pathProperties),\n                .object(\"postCompileScripts\", BuildScript.pathProperties),\n                .object(\"postBuildScripts\", BuildScript.pathProperties),\n                .object(\"legacy\", LegacyTarget.pathProperties),\n                .object(\"scheme\", TargetScheme.pathProperties),\n            ]),\n        ]\n    }\n}\n\nextension Target {\n\n    static func resolveMultiplatformTargets(jsonDictionary: JSONDictionary) -> JSONDictionary {\n        guard let targetsDictionary: [String: JSONDictionary] = jsonDictionary[\"targets\"] as? [String: JSONDictionary] else {\n            return jsonDictionary\n        }\n        \n        var crossPlatformTargets: [String: JSONDictionary] = [:]\n\n        for (targetName, target) in targetsDictionary {\n            if let platforms = target[\"platform\"] as? [String] {\n                for platform in platforms {\n                    var platformTarget = target\n                    \n                    /// This value is set to help us to check, in Target init, that there are no conflicts in the definition of the platforms. We want to ensure that the user didn't define, at the same time,\n                    /// the new Xcode 14 supported destinations and the XcodeGen generation of Multiple Platform Targets (when you define the platform field as an array).\n                    platformTarget[\"isMultiPlatformTarget\"] = true\n\n                    platformTarget = platformTarget.expand(variables: [\"platform\": platform])\n\n                    platformTarget[\"platform\"] = platform\n                    let platformSuffix = platformTarget[\"platformSuffix\"] as? String ?? \"_\\(platform)\"\n                    let platformPrefix = platformTarget[\"platformPrefix\"] as? String ?? \"\"\n                    let newTargetName = platformPrefix + targetName + platformSuffix\n\n                    var settings = platformTarget[\"settings\"] as? JSONDictionary ?? [:]\n                    if settings[\"configs\"] != nil || settings[\"groups\"] != nil || settings[\"base\"] != nil {\n                        var base = settings[\"base\"] as? JSONDictionary ?? [:]\n                        if base[\"PRODUCT_NAME\"] == nil {\n                            base[\"PRODUCT_NAME\"] = targetName\n                        }\n                        settings[\"base\"] = base\n                    } else {\n                        if settings[\"PRODUCT_NAME\"] == nil {\n                            settings[\"PRODUCT_NAME\"] = targetName\n                        }\n                    }\n                    platformTarget[\"productName\"] = targetName\n                    platformTarget[\"settings\"] = settings\n                    if let deploymentTargets = target[\"deploymentTarget\"] as? [String: Any] {\n                        platformTarget[\"deploymentTarget\"] = deploymentTargets[platform]\n                    }\n                    crossPlatformTargets[newTargetName] = platformTarget\n                }\n            } else {\n                crossPlatformTargets[targetName] = target\n            }\n        }\n        \n        var merged = jsonDictionary\n        merged[\"targets\"] = crossPlatformTargets\n        return merged\n    }\n}\n\nextension Target: Equatable {\n\n    public static func == (lhs: Target, rhs: Target) -> Bool {\n        lhs.name == rhs.name &&\n            lhs.type == rhs.type &&\n            lhs.platform == rhs.platform &&\n            lhs.deploymentTarget == rhs.deploymentTarget &&\n            lhs.transitivelyLinkDependencies == rhs.transitivelyLinkDependencies &&\n            lhs.requiresObjCLinking == rhs.requiresObjCLinking &&\n            lhs.directlyEmbedCarthageDependencies == rhs.directlyEmbedCarthageDependencies &&\n            lhs.settings == rhs.settings &&\n            lhs.configFiles == rhs.configFiles &&\n            lhs.sources == rhs.sources &&\n            lhs.info == rhs.info &&\n            lhs.entitlements == rhs.entitlements &&\n            lhs.dependencies == rhs.dependencies &&\n            lhs.preBuildScripts == rhs.preBuildScripts &&\n            lhs.buildToolPlugins == rhs.buildToolPlugins &&\n            lhs.postCompileScripts == rhs.postCompileScripts &&\n            lhs.postBuildScripts == rhs.postBuildScripts &&\n            lhs.buildRules == rhs.buildRules &&\n            lhs.scheme == rhs.scheme &&\n            lhs.legacy == rhs.legacy &&\n            NSDictionary(dictionary: lhs.attributes).isEqual(to: rhs.attributes)\n    }\n}\n\nextension LegacyTarget: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        toolPath = try jsonDictionary.json(atKeyPath: \"toolPath\")\n        arguments = jsonDictionary.json(atKeyPath: \"arguments\")\n        passSettings = jsonDictionary.json(atKeyPath: \"passSettings\") ?? LegacyTarget.passSettingsDefault\n        workingDirectory = jsonDictionary.json(atKeyPath: \"workingDirectory\")\n    }\n}\n\nextension LegacyTarget: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"toolPath\": toolPath,\n            \"arguments\": arguments,\n            \"workingDirectory\": workingDirectory,\n        ]\n\n        if passSettings != LegacyTarget.passSettingsDefault {\n            dict[\"passSettings\"] = passSettings\n        }\n\n        return dict\n    }\n}\n\nextension Target: NamedJSONDictionaryConvertible {\n\n    public init(name: String, jsonDictionary: JSONDictionary) throws {\n        let resolvedName: String = jsonDictionary.json(atKeyPath: \"name\") ?? name\n        self.name = resolvedName\n        productName = jsonDictionary.json(atKeyPath: \"productName\") ?? resolvedName\n        \n        let typeString: String = jsonDictionary.json(atKeyPath: \"type\") ?? \"\"\n        if let type = PBXProductType(string: typeString) {\n            self.type = type\n        } else {\n            throw SpecParsingError.unknownTargetType(typeString)\n        }\n        \n        if let supportedDestinations: [SupportedDestination] = jsonDictionary.json(atKeyPath: \"supportedDestinations\") {\n            self.supportedDestinations = supportedDestinations\n        }\n        \n        let isResolved = jsonDictionary.json(atKeyPath: \"isMultiPlatformTarget\") ?? false\n        if isResolved, supportedDestinations != nil {\n            throw SpecParsingError.invalidTargetPlatformAsArray\n        }\n        \n        var platformString: String = jsonDictionary.json(atKeyPath: \"platform\") ?? \"\"\n        // platform defaults to 'auto' if it is empty and we are using supported destinations\n        if supportedDestinations != nil, platformString.isEmpty {\n            platformString = Platform.auto.rawValue\n        }\n        // we add 'iOS' in supported destinations if it contains only 'macCatalyst'\n        if supportedDestinations?.contains(.macCatalyst) == true,\n           supportedDestinations?.contains(.iOS) == false {\n            \n            supportedDestinations?.append(.iOS)\n        }\n        \n        if let platform = Platform(rawValue: platformString) {\n            self.platform = platform\n        } else {\n            throw SpecParsingError.unknownTargetPlatform(platformString)\n        }\n        \n        if let string: String = jsonDictionary.json(atKeyPath: \"deploymentTarget\") {\n            deploymentTarget = try Version.parse(string)\n        } else if let double: Double = jsonDictionary.json(atKeyPath: \"deploymentTarget\") {\n            deploymentTarget = try Version.parse(String(double))\n        } else {\n            deploymentTarget = nil\n        }\n\n        settings = try BuildSettingsParser(jsonDictionary: jsonDictionary).parse()\n        configFiles = jsonDictionary.json(atKeyPath: \"configFiles\") ?? [:]\n        if let source: String = jsonDictionary.json(atKeyPath: \"sources\") {\n            sources = [TargetSource(path: source)]\n        } else if let array = jsonDictionary[\"sources\"] as? [Any] {\n            sources = try array.compactMap { source in\n                if let string = source as? String {\n                    return TargetSource(path: string)\n                } else if let dictionary = source as? [String: Any] {\n                    return try TargetSource(jsonDictionary: dictionary)\n                } else {\n                    return nil\n                }\n            }\n        } else {\n            sources = []\n        }\n        if jsonDictionary[\"dependencies\"] == nil {\n            dependencies = []\n        } else {\n            let dependencies: [Dependency] = try jsonDictionary.json(atKeyPath: \"dependencies\", invalidItemBehaviour: .fail)\n            self.dependencies = dependencies.filter { [platform] dependency -> Bool in\n                // If unspecified, all platforms are supported\n                guard let platforms = dependency.platforms else { return true }\n                return platforms.contains(platform)\n            }\n        }\n        \n        if jsonDictionary[\"buildToolPlugins\"] == nil {\n            buildToolPlugins = []\n        } else {\n            self.buildToolPlugins = try jsonDictionary.json(atKeyPath: \"buildToolPlugins\", invalidItemBehaviour: .fail)\n        }\n        \n        if jsonDictionary[\"info\"] != nil {\n            info = try jsonDictionary.json(atKeyPath: \"info\") as Plist\n        }\n        if jsonDictionary[\"entitlements\"] != nil {\n            entitlements = try jsonDictionary.json(atKeyPath: \"entitlements\") as Plist\n        }\n\n        transitivelyLinkDependencies = jsonDictionary.json(atKeyPath: \"transitivelyLinkDependencies\")\n        directlyEmbedCarthageDependencies = jsonDictionary.json(atKeyPath: \"directlyEmbedCarthageDependencies\")\n        requiresObjCLinking = jsonDictionary.json(atKeyPath: \"requiresObjCLinking\")\n\n        preBuildScripts = jsonDictionary.json(atKeyPath: \"preBuildScripts\") ?? jsonDictionary.json(atKeyPath: \"prebuildScripts\") ?? []\n        postCompileScripts = jsonDictionary.json(atKeyPath: \"postCompileScripts\") ?? []\n        postBuildScripts = jsonDictionary.json(atKeyPath: \"postBuildScripts\") ?? jsonDictionary.json(atKeyPath: \"postbuildScripts\") ?? []\n        buildRules = jsonDictionary.json(atKeyPath: \"buildRules\") ?? []\n        scheme = jsonDictionary.json(atKeyPath: \"scheme\")\n        legacy = jsonDictionary.json(atKeyPath: \"legacy\")\n        attributes = jsonDictionary.json(atKeyPath: \"attributes\") ?? [:]\n        onlyCopyFilesOnInstall = jsonDictionary.json(atKeyPath: \"onlyCopyFilesOnInstall\") ?? false\n        putResourcesBeforeSourcesBuildPhase = jsonDictionary.json(atKeyPath: \"putResourcesBeforeSourcesBuildPhase\") ?? false\n    }\n}\n\nextension Target: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"type\": type.name,\n            \"platform\": platform.rawValue,\n            \"supportedDestinations\": supportedDestinations?.map { $0.rawValue },\n            \"settings\": settings.toJSONValue(),\n            \"configFiles\": configFiles,\n            \"attributes\": attributes,\n            \"sources\": sources.map { $0.toJSONValue() },\n            \"dependencies\": dependencies.map { $0.toJSONValue() },\n            \"postCompileScripts\": postCompileScripts.map { $0.toJSONValue() },\n            \"prebuildScripts\": preBuildScripts.map { $0.toJSONValue() },\n            \"buildToolPlugins\": buildToolPlugins.map { $0.toJSONValue() },\n            \"postbuildScripts\": postBuildScripts.map { $0.toJSONValue() },\n            \"buildRules\": buildRules.map { $0.toJSONValue() },\n            \"deploymentTarget\": deploymentTarget?.deploymentTarget,\n            \"info\": info?.toJSONValue(),\n            \"entitlements\": entitlements?.toJSONValue(),\n            \"transitivelyLinkDependencies\": transitivelyLinkDependencies,\n            \"directlyEmbedCarthageDependencies\": directlyEmbedCarthageDependencies,\n            \"requiresObjCLinking\": requiresObjCLinking,\n            \"scheme\": scheme?.toJSONValue(),\n            \"legacy\": legacy?.toJSONValue(),\n        ]\n\n        if productName != name {\n            dict[\"productName\"] = productName\n        }\n\n        if onlyCopyFilesOnInstall {\n            dict[\"onlyCopyFilesOnInstall\"] = true\n        }\n\n        if putResourcesBeforeSourcesBuildPhase {\n            dict[\"putResourcesBeforeSourcesBuildPhase\"] = true\n        }\n\n        return dict\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/TargetReference.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct TargetReference: Hashable {\n    public var name: String\n    public var location: Location\n\n    public enum Location: Hashable {\n        case local\n        case project(String)\n    }\n\n    public init(name: String, location: Location) {\n        self.name = name\n        self.location = location\n    }\n}\n\nextension TargetReference {\n    public init(_ string: String) throws {\n        let paths = string.split(separator: \"/\")\n        switch paths.count {\n        case 2:\n            location = .project(String(paths[0]))\n            name = String(paths[1])\n        case 1:\n            location = .local\n            name = String(paths[0])\n        default:\n            throw SpecParsingError.invalidTargetReference(string)\n        }\n    }\n\n    public static func local(_ name: String) -> TargetReference {\n        TargetReference(name: name, location: .local)\n    }\n}\n\nextension TargetReference: ExpressibleByStringLiteral {\n    public init(stringLiteral value: String) {\n        try! self.init(value)\n    }\n}\n\nextension TargetReference: CustomStringConvertible {\n    public var reference: String {\n        switch location {\n        case .local: return name\n        case .project(let root):\n            return \"\\(root)/\\(name)\"\n        }\n    }\n\n    public var description: String {\n        reference\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/TargetScheme.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport XcodeProj\n\npublic struct TargetScheme: Equatable {\n    public static let gatherCoverageDataDefault = false\n    public static let disableMainThreadCheckerDefault = false\n    public static let stopOnEveryMainThreadCheckerIssueDefault = false\n    public static let disableThreadPerformanceCheckerDefault = false\n    public static let buildImplicitDependenciesDefault = true\n\n    public var testTargets: [Scheme.Test.TestTarget]\n    public var configVariants: [String]\n    public var gatherCoverageData: Bool\n    public var coverageTargets: [TestableTargetReference]\n    public var storeKitConfiguration: String?\n    public var language: String?\n    public var region: String?\n    public var disableMainThreadChecker: Bool\n    public var stopOnEveryMainThreadCheckerIssue: Bool\n    public var disableThreadPerformanceChecker: Bool\n    public var buildImplicitDependencies: Bool\n    public var commandLineArguments: [String: Bool]\n    public var environmentVariables: [XCScheme.EnvironmentVariable]\n    public var preActions: [Scheme.ExecutionAction]\n    public var postActions: [Scheme.ExecutionAction]\n    public var management: Scheme.Management?\n    public var testPlans: [TestPlan]\n\n    public init(\n        testTargets: [Scheme.Test.TestTarget] = [],\n        testPlans: [TestPlan] = [],\n        configVariants: [String] = [],\n        gatherCoverageData: Bool = gatherCoverageDataDefault,\n        coverageTargets: [TestableTargetReference] = [],\n        storeKitConfiguration: String? = nil,\n        language: String? = nil,\n        region: String? = nil,\n        disableMainThreadChecker: Bool = disableMainThreadCheckerDefault,\n        stopOnEveryMainThreadCheckerIssue: Bool = stopOnEveryMainThreadCheckerIssueDefault,\n        disableThreadPerformanceChecker: Bool = disableThreadPerformanceCheckerDefault,\n        buildImplicitDependencies: Bool = buildImplicitDependenciesDefault,\n        commandLineArguments: [String: Bool] = [:],\n        environmentVariables: [XCScheme.EnvironmentVariable] = [],\n        preActions: [Scheme.ExecutionAction] = [],\n        postActions: [Scheme.ExecutionAction] = [],\n        management: Scheme.Management? = nil\n    ) {\n        self.testTargets = testTargets\n        self.testPlans = testPlans\n        self.configVariants = configVariants\n        self.gatherCoverageData = gatherCoverageData\n        self.coverageTargets = coverageTargets\n        self.storeKitConfiguration = storeKitConfiguration\n        self.language = language\n        self.region = region\n        self.disableMainThreadChecker = disableMainThreadChecker\n        self.stopOnEveryMainThreadCheckerIssue = stopOnEveryMainThreadCheckerIssue\n        self.disableThreadPerformanceChecker = disableThreadPerformanceChecker\n        self.buildImplicitDependencies = buildImplicitDependencies\n        self.commandLineArguments = commandLineArguments\n        self.environmentVariables = environmentVariables\n        self.preActions = preActions\n        self.postActions = postActions\n        self.postActions = postActions\n        self.management = management\n    }\n}\n\nextension TargetScheme: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let targets = jsonDictionary[\"testTargets\"] as? [Any] {\n            testTargets = try targets.compactMap { target in\n                if let string = target as? String {\n                    return .init(targetReference: try TestableTargetReference(string))\n                } else if let dictionary = target as? JSONDictionary,\n                          let target: Scheme.Test.TestTarget = try? .init(jsonDictionary: dictionary) {\n                    return target\n                } else {\n                    return nil\n                }\n            }\n        } else {\n            testTargets = []\n        }\n\n        if let targets = jsonDictionary[\"coverageTargets\"] as? [Any] {\n            coverageTargets = try targets.compactMap { target in\n                if let string = target as? String {\n                    return try TestableTargetReference(string)\n                } else if let dictionary = target as? JSONDictionary,\n                          let target: TestableTargetReference = try? .init(jsonDictionary: dictionary) {\n                    return target\n                } else {\n                    return nil\n                }\n            }\n        } else {\n            coverageTargets = []\n        }\n\n        testPlans = try (jsonDictionary.json(atKeyPath: \"testPlans\") ?? []).map { try TestPlan(jsonDictionary: $0) }\n        configVariants = jsonDictionary.json(atKeyPath: \"configVariants\") ?? []\n        gatherCoverageData = jsonDictionary.json(atKeyPath: \"gatherCoverageData\") ?? TargetScheme.gatherCoverageDataDefault\n        storeKitConfiguration = jsonDictionary.json(atKeyPath: \"storeKitConfiguration\")\n        language = jsonDictionary.json(atKeyPath: \"language\")\n        region = jsonDictionary.json(atKeyPath: \"region\")\n        disableMainThreadChecker = jsonDictionary.json(atKeyPath: \"disableMainThreadChecker\") ?? TargetScheme.disableMainThreadCheckerDefault\n        stopOnEveryMainThreadCheckerIssue = jsonDictionary.json(atKeyPath: \"stopOnEveryMainThreadCheckerIssue\") ?? TargetScheme.stopOnEveryMainThreadCheckerIssueDefault\n        disableThreadPerformanceChecker = jsonDictionary.json(atKeyPath: \"disableThreadPerformanceChecker\") ?? TargetScheme.disableThreadPerformanceCheckerDefault\n        buildImplicitDependencies = jsonDictionary.json(atKeyPath: \"buildImplicitDependencies\") ?? TargetScheme.buildImplicitDependenciesDefault\n        commandLineArguments = jsonDictionary.json(atKeyPath: \"commandLineArguments\") ?? [:]\n        environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)\n        preActions = jsonDictionary.json(atKeyPath: \"preActions\") ?? []\n        postActions = jsonDictionary.json(atKeyPath: \"postActions\") ?? []\n        management = jsonDictionary.json(atKeyPath: \"management\")\n    }\n}\n\nextension TargetScheme: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any] = [\n            \"configVariants\": configVariants,\n            \"coverageTargets\": coverageTargets.map { $0.reference },\n            \"commandLineArguments\": commandLineArguments,\n            \"testTargets\": testTargets.map { $0.toJSONValue() },\n            \"testPlans\": testPlans.map { $0.toJSONValue() },\n            \"environmentVariables\": environmentVariables.map { $0.toJSONValue() },\n            \"preActions\": preActions.map { $0.toJSONValue() },\n            \"postActions\": postActions.map { $0.toJSONValue() },\n        ]\n\n        if gatherCoverageData != TargetScheme.gatherCoverageDataDefault {\n            dict[\"gatherCoverageData\"] = gatherCoverageData\n        }\n\n        if let storeKitConfiguration = storeKitConfiguration {\n            dict[\"storeKitConfiguration\"] = storeKitConfiguration\n        }\n\n        if disableMainThreadChecker != TargetScheme.disableMainThreadCheckerDefault {\n            dict[\"disableMainThreadChecker\"] = disableMainThreadChecker\n        }\n\n        if stopOnEveryMainThreadCheckerIssue != TargetScheme.stopOnEveryMainThreadCheckerIssueDefault {\n            dict[\"stopOnEveryMainThreadCheckerIssue\"] = stopOnEveryMainThreadCheckerIssue\n        }\n\n        if disableThreadPerformanceChecker != TargetScheme.disableThreadPerformanceCheckerDefault {\n            dict[\"disableThreadPerformanceChecker\"] = disableThreadPerformanceChecker\n        }\n\n        if buildImplicitDependencies != TargetScheme.buildImplicitDependenciesDefault {\n            dict[\"buildImplicitDependencies\"] = buildImplicitDependencies\n        }\n\n        if let language = language {\n            dict[\"language\"] = language\n        }\n\n        if let region = region {\n            dict[\"region\"] = region\n        }\n\n        if let management = management {\n            dict[\"management\"] = management.toJSONValue()\n        }\n\n        return dict\n    }\n}\n\nextension TargetScheme: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .object(\"testPlans\", TestPlan.pathProperties),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/TargetSource.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\n\npublic struct TargetSource: Equatable {\n    public static let optionalDefault = false\n    \n    public var path: String {\n        didSet {\n            path = (path as NSString).standardizingPath\n        }\n    }\n    \n    public var name: String?\n    public var group: String?\n    public var compilerFlags: [String]\n    public var excludes: [String]\n    public var includes: [String]\n    public var explicitFolders: [String]\n    public var type: SourceType?\n    public var optional: Bool\n    public var buildPhase: BuildPhaseSpec?\n    public var headerVisibility: HeaderVisibility?\n    public var createIntermediateGroups: Bool?\n    public var attributes: [String]\n    public var resourceTags: [String]\n    public var inferDestinationFiltersByPath: Bool?\n    public var destinationFilters: [SupportedDestination]?\n\n    public enum HeaderVisibility: String {\n        case `public`\n        case `private`\n        case project\n\n        public var settingName: String {\n            switch self {\n            case .public: return \"Public\"\n            case .private: return \"Private\"\n            case .project: return \"Project\"\n            }\n        }\n    }\n\n    public init(\n        path: String,\n        name: String? = nil,\n        group: String? = nil,\n        compilerFlags: [String] = [],\n        excludes: [String] = [],\n        includes: [String] = [],\n        explicitFolders: [String] = [],\n        type: SourceType? = nil,\n        optional: Bool = optionalDefault,\n        buildPhase: BuildPhaseSpec? = nil,\n        headerVisibility: HeaderVisibility? = nil,\n        createIntermediateGroups: Bool? = nil,\n        attributes: [String] = [],\n        resourceTags: [String] = [],\n        inferDestinationFiltersByPath: Bool? = nil,\n        destinationFilters: [SupportedDestination]? = nil\n    ) {\n        self.path = (path as NSString).standardizingPath\n        self.name = name\n        self.group = group\n        self.compilerFlags = compilerFlags\n        self.excludes = excludes\n        self.includes = includes\n        self.explicitFolders = explicitFolders\n        self.type = type\n        self.optional = optional\n        self.buildPhase = buildPhase\n        self.headerVisibility = headerVisibility\n        self.createIntermediateGroups = createIntermediateGroups\n        self.attributes = attributes\n        self.resourceTags = resourceTags\n        self.inferDestinationFiltersByPath = inferDestinationFiltersByPath\n        self.destinationFilters = destinationFilters\n    }\n}\n\nextension TargetSource: ExpressibleByStringLiteral {\n\n    public init(stringLiteral value: String) {\n        self = TargetSource(path: value)\n    }\n\n    public init(extendedGraphemeClusterLiteral value: String) {\n        self = TargetSource(path: value)\n    }\n\n    public init(unicodeScalarLiteral value: String) {\n        self = TargetSource(path: value)\n    }\n}\n\nextension TargetSource: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        path = try jsonDictionary.json(atKeyPath: \"path\")\n        path = (path as NSString).standardizingPath // Done in two steps as the compiler can't figure out the types otherwise\n        name = jsonDictionary.json(atKeyPath: \"name\")\n        group = jsonDictionary.json(atKeyPath: \"group\")\n\n        let maybeCompilerFlagsString: String? = jsonDictionary.json(atKeyPath: \"compilerFlags\")\n        let maybeCompilerFlagsArray: [String]? = jsonDictionary.json(atKeyPath: \"compilerFlags\")\n        compilerFlags = maybeCompilerFlagsArray ??\n            maybeCompilerFlagsString.map { $0.split(separator: \" \").map { String($0) } } ?? []\n\n        headerVisibility = jsonDictionary.json(atKeyPath: \"headerVisibility\")\n        excludes = jsonDictionary.json(atKeyPath: \"excludes\") ?? []\n        includes = jsonDictionary.json(atKeyPath: \"includes\") ?? []\n        explicitFolders = jsonDictionary.json(atKeyPath: \"explicitFolders\") ?? []\n        type = jsonDictionary.json(atKeyPath: \"type\")\n        optional = jsonDictionary.json(atKeyPath: \"optional\") ?? TargetSource.optionalDefault\n\n        if let string: String = jsonDictionary.json(atKeyPath: \"buildPhase\") {\n            buildPhase = try BuildPhaseSpec(string: string)\n        } else if let dict: JSONDictionary = jsonDictionary.json(atKeyPath: \"buildPhase\") {\n            buildPhase = try BuildPhaseSpec(jsonDictionary: dict)\n        }\n\n        createIntermediateGroups = jsonDictionary.json(atKeyPath: \"createIntermediateGroups\")\n        attributes = jsonDictionary.json(atKeyPath: \"attributes\") ?? []\n        resourceTags = jsonDictionary.json(atKeyPath: \"resourceTags\") ?? []\n        \n        inferDestinationFiltersByPath = jsonDictionary.json(atKeyPath: \"inferDestinationFiltersByPath\")\n        \n        if let destinationFilters: [SupportedDestination] = jsonDictionary.json(atKeyPath: \"destinationFilters\") {\n            self.destinationFilters = destinationFilters\n        }\n    }\n}\n\nextension TargetSource: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dict: [String: Any?] = [\n            \"compilerFlags\": compilerFlags,\n            \"excludes\": excludes,\n            \"includes\": includes,\n            \"explicitFolders\": explicitFolders,\n            \"name\": name,\n            \"group\": group,\n            \"headerVisibility\": headerVisibility?.rawValue,\n            \"type\": type?.rawValue,\n            \"buildPhase\": buildPhase?.toJSONValue(),\n            \"createIntermediateGroups\": createIntermediateGroups,\n            \"resourceTags\": resourceTags,\n            \"path\": path,\n            \"inferDestinationFiltersByPath\": inferDestinationFiltersByPath,\n            \"destinationFilters\": destinationFilters?.map { $0.rawValue },\n        ]\n\n        if optional != TargetSource.optionalDefault {\n            dict[\"optional\"] = optional\n        }\n\n        return dict\n    }\n}\n\nextension TargetSource: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"path\"),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/Template.swift",
    "content": "import Foundation\nimport JSONUtilities\n\nstruct TemplateStructure {\n    let baseKey: String\n    let templatesKey: String\n    let nameToReplace: String\n}\n\nextension Target {\n    static func resolveTargetTemplates(jsonDictionary: JSONDictionary) -> JSONDictionary {\n        resolveTemplates(jsonDictionary: jsonDictionary,\n                         templateStructure: TemplateStructure(baseKey: \"targets\",\n                                                              templatesKey: \"targetTemplates\",\n                                                              nameToReplace: \"target_name\"))\n    }\n}\n\nextension Scheme {\n    static func resolveSchemeTemplates(jsonDictionary: JSONDictionary) -> JSONDictionary {\n        resolveTemplates(jsonDictionary: jsonDictionary,\n                         templateStructure: TemplateStructure(baseKey: \"schemes\",\n                                                              templatesKey: \"schemeTemplates\",\n                                                              nameToReplace: \"scheme_name\"))\n    }\n}\n\nprivate func resolveTemplates(jsonDictionary: JSONDictionary, templateStructure: TemplateStructure) -> JSONDictionary {\n    guard var baseDictionary: [String: JSONDictionary] = jsonDictionary[templateStructure.baseKey] as? [String: JSONDictionary] else {\n        return jsonDictionary\n    }\n\n    let templatesDictionary: [String: JSONDictionary] = jsonDictionary[templateStructure.templatesKey] as? [String: JSONDictionary] ?? [:]\n\n    // Recursively collects all nested template names of a given dictionary.\n    func collectTemplates(of jsonDictionary: JSONDictionary,\n                          into allTemplates: inout [String],\n                          insertAt insertionIndex: inout Int) {\n        guard let templates = jsonDictionary[\"templates\"] as? [String] else {\n            return\n        }\n        for template in templates where !allTemplates.contains(template) {\n            guard let templateDictionary = templatesDictionary[template] else {\n                continue\n            }\n            allTemplates.insert(template, at: insertionIndex)\n            collectTemplates(of: templateDictionary, into: &allTemplates, insertAt: &insertionIndex)\n            insertionIndex += 1\n        }\n    }\n\n    for (referenceName, var reference) in baseDictionary {\n        var templates: [String] = []\n        var index: Int = 0\n        collectTemplates(of: reference, into: &templates, insertAt: &index)\n        if !templates.isEmpty {\n            var mergedDictionary: JSONDictionary = [:]\n            for template in templates {\n                if let templateDictionary = templatesDictionary[template] {\n                    mergedDictionary = templateDictionary.merged(onto: mergedDictionary)\n                }\n            }\n            reference = reference.merged(onto: mergedDictionary)\n            reference = reference.expand(variables: [templateStructure.nameToReplace: referenceName])\n\n            if let templateAttributes = reference[\"templateAttributes\"] as? [String: String] {\n                reference = reference.expand(variables: templateAttributes)\n            }\n        }\n        baseDictionary[referenceName] = reference\n    }\n\n    var jsonDictionary = jsonDictionary\n    jsonDictionary[templateStructure.baseKey] = baseDictionary\n    return jsonDictionary\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/TestPlan.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct TestPlan: Hashable {\n    public var path: String\n    public var defaultPlan: Bool\n\n    public init(path: String, defaultPlan: Bool = false) {\n        self.defaultPlan = defaultPlan\n        self.path = path\n    }\n}\n\n\nextension TestPlan: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        path = try jsonDictionary.json(atKeyPath: \"path\")\n        defaultPlan = jsonDictionary.json(atKeyPath: \"defaultPlan\") ?? false\n    }\n}\n\nextension TestPlan: JSONEncodable {\n    public func toJSONValue() -> Any {\n        [\n            \"path\": path,\n            \"defaultPlan\": defaultPlan,\n        ] as [String : Any]\n    }\n}\n\nextension TestPlan: PathContainer {\n\n    static var pathProperties: [PathProperty] {\n        [\n            .string(\"path\"),\n        ]\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/TestTargeReference.swift",
    "content": "import Foundation\nimport JSONUtilities\n\npublic struct TestableTargetReference: Hashable {\n    public var name: String\n    public var location: Location\n    \n    public var targetReference: TargetReference {\n        switch location {\n        case .local:\n            return TargetReference(name: name, location: .local)\n        case .project(let projectName):\n            return TargetReference(name: name, location: .project(projectName))\n        case .package:\n            fatalError(\"Package target is only available for testable\")\n        }\n    }\n\n    public enum Location: Hashable {\n        case local\n        case project(String)\n        case package(String)\n    }\n\n    public init(name: String, location: Location) {\n        self.name = name\n        self.location = location\n    }\n}\n\nextension TestableTargetReference {\n    public init(_ string: String) throws {\n        let paths = string.split(separator: \"/\")\n        switch paths.count {\n        case 2:\n            location = .project(String(paths[0]))\n            name = String(paths[1])\n        case 1:\n            location = .local\n            name = String(paths[0])\n        default:\n            throw SpecParsingError.invalidTargetReference(string)\n        }\n    }\n\n    public static func local(_ name: String) -> TestableTargetReference {\n        TestableTargetReference(name: name, location: .local)\n    }\n\n    public static func project(_ name: String) -> TestableTargetReference {\n        let paths = name.split(separator: \"/\")\n        return TestableTargetReference(name: String(paths[1]), location: .project(String(paths[0])))\n    }\n\n    public static func package(_ name: String) -> TestableTargetReference {\n        let paths = name.split(separator: \"/\")\n        return TestableTargetReference(name: String(paths[1]), location: .package(String(paths[0])))\n    }\n}\n\nextension TestableTargetReference: ExpressibleByStringLiteral {\n    public init(stringLiteral value: String) {\n        try! self.init(value)\n    }\n}\n\nextension TestableTargetReference: CustomStringConvertible {\n    public var reference: String {\n        switch location {\n        case .local: return name\n        case .project(let root), .package(let root):\n            return \"\\(root)/\\(name)\"\n        }\n    }\n\n    public var description: String {\n        reference\n    }\n}\n\nextension TestableTargetReference: JSONObjectConvertible {\n\n    public init(jsonDictionary: JSONDictionary) throws {\n        if let project: String = jsonDictionary.json(atKeyPath: \"project\") {\n            let paths = project.split(separator: \"/\")\n            name = String(paths[1])\n            location = .project(String(paths[0]))\n        } else if let project: String = jsonDictionary.json(atKeyPath: \"package\") {\n            let paths = project.split(separator: \"/\")\n            name = String(paths[1])\n            location = .package(String(paths[0]))\n        } else {\n            name = try jsonDictionary.json(atKeyPath: \"local\")\n            location = .local\n        }\n    }\n}\n\nextension TestableTargetReference: JSONEncodable {\n    public func toJSONValue() -> Any {\n        var dictionary: JSONDictionary = [:]\n        switch self.location {\n        case .package(let packageName):\n            dictionary[\"package\"] = \"\\(packageName)/\\(name)\"\n        case .project(let projectName):\n            dictionary[\"project\"] = \"\\(projectName)/\\(name)\"\n        case .local:\n            dictionary[\"local\"] = name\n        }\n        return dictionary\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/VersionExtensions.swift",
    "content": "//\n//  File.swift\n//\n//\n//  Created by Yonas Kolb on 7/2/20.\n//\n\nimport Foundation\nimport Version\n\nextension Version: Swift.ExpressibleByStringLiteral {\n\n    public static func parse(_ string: String) throws -> Version {\n        if let version = Version(tolerant: string) {\n            return version\n        } else {\n            throw SpecParsingError.invalidVersion(string)\n        }\n    }\n\n    public static func parse(_ double: Double) throws -> Version {\n        return try Version.parse(String(double))\n    }\n\n    public init(stringLiteral value: String) {\n        self.init(tolerant: value)!\n    }\n}\n"
  },
  {
    "path": "Sources/ProjectSpec/XCProjExtensions.swift",
    "content": "import Foundation\nimport PathKit\nimport XcodeProj\n\nextension PBXProductType {\n\n    init?(string: String) {\n        if let type = PBXProductType(rawValue: string) {\n            self = type\n        } else if let type = PBXProductType(rawValue: \"com.apple.product-type.\\(string)\") {\n            self = type\n        } else {\n            return nil\n        }\n    }\n\n    public var isFramework: Bool {\n        self == .framework || self == .staticFramework\n    }\n\n    public var isLibrary: Bool {\n        self == .staticLibrary || self == .dynamicLibrary\n    }\n\n    public var isExtension: Bool {\n        fileExtension == \"appex\"\n    }\n\n    public var isSystemExtension: Bool {\n        fileExtension == \"dext\" || fileExtension == \"systemextension\"\n    }\n\n    public var isApp: Bool {\n        fileExtension == \"app\"\n    }\n\n    public var isTest: Bool {\n        fileExtension == \"xctest\"\n    }\n\n    public var isExecutable: Bool {\n        isApp || isExtension || isSystemExtension || isTest || self == .commandLineTool\n    }\n\n    public var name: String {\n        rawValue.replacingOccurrences(of: \"com.apple.product-type.\", with: \"\")\n    }\n\n    public var canSkipCompileSourcesBuildPhase: Bool {\n        switch self {\n        case .bundle, .watch2App, .stickerPack, .messagesApplication:\n            // Bundles, watch apps, sticker packs and simple messages applications without sources should not include a\n            // compile sources build phase. Doing so can cause Xcode to produce an error on build.\n            return true\n        default:\n            return false\n        }\n    }\n\n    /// Function to determine when a dependendency should be embedded into the target\n    public func shouldEmbed(_ dependencyTarget: Target) -> Bool {\n        switch dependencyTarget.defaultLinkage {\n        case .static:\n            // Static dependencies should never embed\n            return false\n        case .dynamic, .none:\n            if isApp {\n                // If target is an app, all dependencies should be embed (unless they're static)\n                return true\n            } else if isTest, [.framework, .bundle].contains(dependencyTarget.type) {\n                // If target is test, some dependencies should be embed (depending on their type)\n                return true\n            } else {\n                // If none of the above, do not embed the dependency\n                return false\n            }\n        }\n    }\n}\n\nextension Platform {\n\n    public var emoji: String {\n        switch self {\n        case .auto: return \"🤖\"\n        case .iOS: return \"📱\"\n        case .watchOS: return \"⌚️\"\n        case .tvOS: return \"📺\"\n        case .macOS: return \"🖥\"\n        case .visionOS: return \"🕶️\"\n        }\n    }\n}\n\nextension ProjectTarget {\n    public var shouldExecuteOnLaunch: Bool {\n        // This is different from `type.isExecutable`, because we don't want to \"run\" a test\n        type.isApp || type.isExtension || type.isSystemExtension || type == .commandLineTool\n    }\n}\n\nextension XCScheme.CommandLineArguments {\n    // Dictionary is a mapping from argument name and if it is enabled by default\n    public convenience init(_ dict: [String: Bool]) {\n        let args = dict.map { tuple in\n            XCScheme.CommandLineArguments.CommandLineArgument(name: tuple.key, enabled: tuple.value)\n        }.sorted { $0.name < $1.name }\n        self.init(arguments: args)\n    }\n}\n\nextension BreakpointExtensionID {\n\n    init(string: String) throws {\n        if let id = BreakpointExtensionID(rawValue: \"Xcode.Breakpoint.\\(string)Breakpoint\") {\n            self = id\n        } else if let id = BreakpointExtensionID(rawValue: string) {\n            self = id\n        } else {\n            throw SpecParsingError.unknownBreakpointType(string)\n        }\n    }\n}\n\nextension BreakpointActionExtensionID {\n\n    init(string: String) throws {\n        if let type = BreakpointActionExtensionID(rawValue: \"Xcode.BreakpointAction.\\(string)\") {\n            self = type\n        } else if let type = BreakpointActionExtensionID(rawValue: string) {\n            self = type\n        } else {\n            throw SpecParsingError.unknownBreakpointActionType(string)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Sources/ProjectSpec/Yaml.swift",
    "content": "import Foundation\nimport PathKit\nimport Yams\n\npublic func loadYamlDictionary(path: Path) throws -> [String: Any] {\n    let string: String = try path.read()\n    if string == \"\" {\n        return [:]\n    }\n\n    let resolver = Resolver.default\n        .removing(.null) // remove rule so that empty quotes are treated as empty strings\n\n    guard let yaml = try Yams.load(yaml: string, resolver) else {\n        return [:]\n    }\n    return yaml as? [String: Any] ?? [:]\n}\n\npublic func dumpYamlDictionary(_ dictionary: [String: Any], path: Path) throws {\n    let uncluttered = (dictionary as [String: Any?]).removingEmptyArraysDictionariesAndNils()\n    let string: String = try Yams.dump(object: uncluttered)\n    try path.write(string)\n}\n"
  },
  {
    "path": "Sources/TestSupport/TestHelpers.swift",
    "content": "import Foundation\nimport PathKit\nimport Spectre\nimport XcodeProj\nimport XCTest\n\npublic let fixturePath = Path(#file).parent().parent().parent() + \"Tests/Fixtures\"\n\npublic func doThrowing<T>(file: String = #file, line: Int = #line, _ closure: () throws -> T) throws -> T {\n    do {\n        return try closure()\n    } catch {\n        throw failure(String(describing: error), file: file, line: line)\n    }\n}\n\npublic func unwrap<T>(_ value: T?, file: String = #file, line: Int = #line) throws -> T {\n    if let value = value {\n        return value\n    } else {\n        throw failure(\"Expected non-nil value of \\(T.self)\", file: file, line: line)\n    }\n}\n\npublic func expectError<T: Error>(_ expectedError: T, function: String = #function, file: String = #file, line: Int = #line, _ closure: () throws -> Void) throws where T: CustomStringConvertible {\n    do {\n        try closure()\n    } catch let error as T {\n        try expect(error.description, file: file, line: line, function: function) == expectedError.description\n        return\n    } catch {\n        throw failure(\"Supposed to fail with \\\"\\(expectedError)\\\"\", function: function, file: file, line: line)\n    }\n    throw failure(\"Supposed to fail with \\\"\\(expectedError)\\\"\", function: function, file: file, line: line)\n}\n\nstruct ExpectationFailure: FailureType {\n    let file: String\n    let line: Int\n    let function: String\n\n    let reason: String\n\n    init(reason: String, file: String, line: Int, function: String) {\n        self.reason = reason\n        self.file = file\n        self.line = line\n        self.function = function\n    }\n}\n\nopen class ArrayExpectation<T>: ExpectationType {\n    public typealias ValueType = [T]\n    public let expression: () throws -> ValueType?\n\n    let file: String\n    let line: Int\n    let function: String\n\n    open var to: ArrayExpectation<T> {\n        self\n    }\n\n    init(file: String, line: Int, function: String, expression: @escaping () throws -> ValueType?) {\n        self.file = file\n        self.line = line\n        self.function = function\n        self.expression = expression\n    }\n\n    open func failure(_ reason: String) -> FailureType {\n        ExpectationFailure(reason: reason, file: file, line: line, function: function)\n    }\n}\n\npublic func expect<T>(_ expression: @autoclosure @escaping () throws -> [T]?, file: String = #file, line: Int = #line, function: String = #function) -> ArrayExpectation<T> {\n    ArrayExpectation(file: file, line: line, function: function, expression: expression)\n}\n\nextension ArrayExpectation {\n\n    public func contains(_ predicate: (T) throws -> Bool) throws {\n        let value = try expression()\n        if let value = value {\n            if try !value.contains(where: predicate) {\n                throw failure(\"value does not contain item: \\(value)\")\n            }\n        }\n    }\n}\n\nextension ArrayExpectation where T: Named {\n\n    public func contains(name: String) throws {\n        let value = try expression()\n        if let value = value {\n            if !value.contains(where: { $0.name == name }) {\n                throw failure(\"Array does not contain item with name \\(name)\")\n            }\n        }\n    }\n}\n\npublic protocol Named {\n    var name: String { get }\n}\n\nextension XCBuildConfiguration: Named {}\nextension PBXNativeTarget: Named {}\nextension XCScheme: Named {}\n\nextension XCTestCase {\n\n    public func describe(_ name: StaticString = #function, _ test: (ContextType) -> Void) {\n\n        var name = String(describing: name)\n        if name.hasPrefix(\"test\") {\n            name = String(name.suffix(name.count - \"test\".count))\n            name = name.replacingOccurrences(of: \"_\", with: \" \")\n        }\n        if name.hasSuffix(\"()\") {\n            name = String(name.prefix(name.count - 2))\n        }\n        describe(name, test)\n    }\n}\n\n\npublic func skipIfNecessary() throws {\n    #if os(Linux) && swift(<6.0.2)\n        // https://github.com/swiftlang/swift-foundation/pull/1002\n        throw XCTSkip(\"Skipping test on Linux until PropertyListDecoder issues are fixed.\")\n    #endif\n}"
  },
  {
    "path": "Sources/XcodeGen/main.swift",
    "content": "import Foundation\nimport ProjectSpec\nimport XcodeGenCLI\nimport Version\n\nlet version = Version(\"2.45.3\")\nlet cli = XcodeGenCLI(version: version)\ncli.execute()\n"
  },
  {
    "path": "Sources/XcodeGenCLI/Arguments.swift",
    "content": "import Foundation\nimport PathKit\nimport SwiftCLI\n\nextension Path: SwiftCLI.ConvertibleFromString {\n\n    public init?(input: String) {\n        self.init(input)\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCLI/Commands/CacheCommand.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport SwiftCLI\nimport XcodeGenKit\nimport XcodeProj\nimport Version\n\nclass CacheCommand: ProjectCommand {\n\n    @Key(\"--cache-path\", description: \"Where the cache file will be loaded from and save to. Defaults to ~/.xcodegen/cache/{SPEC_PATH_HASH}\")\n    var cacheFilePath: Path?\n\n    init(version: Version) {\n        super.init(version: version,\n                   name: \"cache\",\n                   shortDescription: \"Write the project cache\")\n    }\n\n    override func execute(specLoader: SpecLoader, projectSpecPath: Path, project: Project) throws {\n\n        let cacheFilePath = self.cacheFilePath ?? Path(\"~/.xcodegen/cache/\\(projectSpecPath.absolute().string.md5)\").absolute()\n\n        var cacheFile: CacheFile?\n\n        // generate cache\n        do {\n            cacheFile = try specLoader.generateCacheFile()\n        } catch {\n            throw GenerationError.projectSpecParsingError(error)\n        }\n\n        // write cache\n        if let cacheFile = cacheFile {\n            do {\n                try cacheFilePath.parent().mkpath()\n                try cacheFilePath.write(cacheFile.string)\n                success(\"Wrote cache to \\(cacheFilePath)\")\n            } catch {\n                info(\"Failed to write cache: \\(error.localizedDescription)\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCLI/Commands/DumpCommand.swift",
    "content": "import Foundation\nimport SwiftCLI\nimport PathKit\nimport ProjectSpec\nimport Yams\nimport Version\nimport XcodeGenKit\n\nclass DumpCommand: ProjectCommand {\n\n    @Key(\"--type\", \"-t\", description: \"The type of dump to output. Either \\(DumpType.allCases.map { \"\\\"\\($0.rawValue)\\\"\" }.joined(separator: \", \")). Defaults to \\(DumpType.defaultValue.rawValue). The \\\"parsed\\\" types parse the project into swift and then back again.\")\n    private var dumpType: DumpType?\n\n    @Key(\"--file\", \"-f\", description: \"The path of a file to write to. If not supplied will output to stdout\")\n    private var file: Path?\n\n    init(version: Version) {\n        super.init(version: version,\n                   name: \"dump\",\n                   shortDescription: \"Dumps the resolved project spec to stdout or a file\")\n    }\n\n    override func execute(specLoader: SpecLoader, projectSpecPath: Path, project: Project) throws {\n        let type = dumpType ?? .defaultValue\n\n        let output: String\n        switch type {\n        case .swiftDump:\n            var string = \"\"\n            dump(project, to: &string)\n            output = string\n        case .json:\n            let data = try JSONSerialization.data(withJSONObject: specLoader.projectDictionary!, options: .prettyPrinted)\n            output = String(data: data, encoding: .utf8)!\n        case .yaml:\n            output = try Yams.dump(object: specLoader.projectDictionary!)\n        case .parsedJSON:\n            let data = try JSONSerialization.data(withJSONObject: project.toJSONDictionary(), options: .prettyPrinted)\n            output = String(data: data, encoding: .utf8)!\n        case .parsedYaml:\n            output = try Yams.dump(object: project.toJSONDictionary())\n        case .summary:\n            output = project.debugDescription\n        }\n\n        if let file = file {\n            try file.parent().mkpath()\n            try file.write(output)\n        } else {\n            success(output)\n        }\n    }\n}\n\nprivate enum DumpType: String, ConvertibleFromString, CaseIterable {\n    case swiftDump = \"swift-dump\"\n    case json\n    case yaml\n    case parsedJSON = \"parsed-json\"\n    case parsedYaml = \"parsed-yaml\"\n    case summary\n\n    static var defaultValue: DumpType { .yaml }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCLI/Commands/GenerateCommand.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport SwiftCLI\nimport XcodeGenKit\nimport XcodeProj\nimport Version\n\nclass GenerateCommand: ProjectCommand {\n\n    @Flag(\"-c\", \"--use-cache\", description: \"Use a cache for the xcodegen spec. This will prevent unnecessarily generating the project if nothing has changed\")\n    var useCache: Bool\n\n    @Key(\"--cache-path\", description: \"Where the cache file will be loaded from and save to. Defaults to ~/.xcodegen/cache/{SPEC_PATH_HASH}\")\n    var cacheFilePath: Path?\n\n    @Key(\"-p\", \"--project\", description: \"The path to the directory where the project should be generated. Defaults to the directory the spec is in. The filename is defined in the project spec\")\n    var projectDirectory: Path?\n\n    @Flag(\"--only-plists\", description: \"Generate only plist files\")\n    var onlyPlists: Bool\n\n    init(version: Version) {\n        super.init(version: version,\n                   name: \"generate\",\n                   shortDescription: \"Generate an Xcode project from a spec\")\n    }\n\n    override func execute(specLoader: SpecLoader, projectSpecPath: Path, project: Project) throws {\n\n        let projectDirectory = self.projectDirectory?.absolute() ?? projectSpecPath.parent()\n\n        // validate project dictionary\n        do {\n            try specLoader.validateProjectDictionaryWarnings()\n        } catch {\n            warning(\"\\(error)\")\n        }\n\n        let projectPath = projectDirectory + \"\\(project.name).xcodeproj\"\n\n        // run pre gen command before we use the cache as the scripts may change it\n        if let command = project.options.preGenCommand {\n            try Task.run(bash: command, directory: projectDirectory.absolute().string)\n        }\n\n        let cacheFilePath = self.cacheFilePath ??\n            Path(\"~/.xcodegen/cache/\\(projectSpecPath.absolute().string.md5)\").absolute()\n        var cacheFile: CacheFile?\n\n        // generate cache\n        if useCache || self.cacheFilePath != nil {\n            do {\n                cacheFile = try specLoader.generateCacheFile()\n            } catch {\n                throw GenerationError.projectSpecParsingError(error)\n            }\n        }\n\n        let projectExists = XcodeProj.pbxprojPath(projectPath).exists\n\n        // check cache\n        if let cacheFile = cacheFile,\n            projectExists,\n            cacheFilePath.exists {\n            do {\n                let existingCacheFile: String = try cacheFilePath.read()\n                if cacheFile.string == existingCacheFile {\n                    info(\"Project \\(project.name) has not changed since cache was written\")\n                    return\n                }\n            } catch {\n                info(\"Couldn't load cache at \\(cacheFile)\")\n            }\n        }\n\n        // validate project\n        do {\n            try project.validateMinimumXcodeGenVersion(version)\n            try project.validate()\n        } catch let error as SpecValidationError {\n            throw GenerationError.validationError(error)\n        }\n\n        // generate plists\n        info(\"⚙️  Generating plists...\")\n        let fileWriter = FileWriter(project: project)\n        do {\n            try fileWriter.writePlists()\n            if onlyPlists {\n                return\n            }\n        } catch {\n            throw GenerationError.writingError(error)\n        }\n\n        // generate project\n        info(\"⚙️  Generating project...\")\n        let xcodeProject: XcodeProj\n        do {\n            let projectGenerator = ProjectGenerator(project: project)\n\n            guard let userName = ProcessInfo.processInfo.environment[\"USER\"] else {\n                throw GenerationError.missingUsername\n            }\n\n            xcodeProject = try projectGenerator.generateXcodeProject(in: projectDirectory, userName: userName)\n            \n        } catch {\n            throw GenerationError.generationError(error)\n        }\n\n        // write project\n        info(\"⚙️  Writing project...\")\n        do {\n            try fileWriter.writeXcodeProject(xcodeProject, to: projectPath)\n\n            success(\"Created project at \\(projectPath)\")\n        } catch {\n            throw GenerationError.writingError(error)\n        }\n\n        // write cache\n        if let cacheFile = cacheFile {\n            do {\n                try cacheFilePath.parent().mkpath()\n                try cacheFilePath.write(cacheFile.string)\n            } catch {\n                info(\"Failed to write cache: \\(error.localizedDescription)\")\n            }\n        }\n\n        // run post gen command\n        if let command = project.options.postGenCommand {\n            try Task.run(bash: command, directory: projectDirectory.absolute().string)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCLI/Commands/ProjectCommand.swift",
    "content": "import Foundation\nimport SwiftCLI\nimport ProjectSpec\nimport XcodeGenKit\nimport PathKit\nimport XcodeGenCore\nimport Version\n\nclass ProjectCommand: Command {\n\n    let version: Version\n    let name: String\n    let shortDescription: String\n\n    @Flag(\"-q\", \"--quiet\", description: \"Suppress all informational and success output\")\n    var quiet: Bool\n    \n    @Key(\"-s\", \"--spec\", description: \"The path to the project spec file. Defaults to project.yml. (It is also possible to link to multiple spec files by comma separating them. Note that all other flags will be the same.)\")\n    var spec: String?\n\n    @Key(\"-r\", \"--project-root\", description: \"The path to the project root directory. Defaults to the directory containing the project spec.\")\n    var projectRoot: Path?\n\n    @Flag(\"-n\", \"--no-env\", description: \"Disable environment variable expansions\")\n    var disableEnvExpansion: Bool\n\n    init(version: Version, name: String, shortDescription: String) {\n        self.version = version\n        self.name = name\n        self.shortDescription = shortDescription\n    }\n\n    func execute() throws {\n        \n        var projectSpecs: [Path] = []\n        if let spec = spec {\n            projectSpecs = spec.components(separatedBy: \",\").map { Path($0).absolute() }\n        } else {\n            projectSpecs = [ Path(\"project.yml\").absolute() ]\n        }\n        \n        for projectSpecPath in projectSpecs {\n            if !projectSpecPath.exists {\n                throw GenerationError.missingProjectSpec(projectSpecPath)\n            }\n            \n            \n            let specLoader = SpecLoader(version: version)\n            let project: Project\n            \n            let variables: [String: String] = disableEnvExpansion ? [:] : ProcessInfo.processInfo.environment\n            \n            do {\n                project = try specLoader.loadProject(path: projectSpecPath, projectRoot: projectRoot, variables: variables)\n            } catch {\n                throw GenerationError.projectSpecParsingError(error)\n            }\n            \n            try execute(specLoader: specLoader, projectSpecPath: projectSpecPath, project: project)\n        }\n    }\n\n    func execute(specLoader: SpecLoader, projectSpecPath: Path, project: Project) throws {}\n\n    func info(_ string: String) {\n        if !quiet {\n            stdout.print(string)\n        }\n    }\n\n    func warning(_ string: String) {\n        if !quiet {\n            stdout.print(string.yellow)\n        }\n    }\n\n    func success(_ string: String) {\n        if !quiet {\n            stdout.print(string.green)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCLI/GenerationError.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport Rainbow\nimport SwiftCLI\n\nenum GenerationError: Error, CustomStringConvertible, ProcessError {\n    case missingProjectSpec(Path)\n    case projectSpecParsingError(Error)\n    case cacheGenerationError(Error)\n    case validationError(SpecValidationError)\n    case generationError(Error)\n    case missingUsername\n    case writingError(Error)\n\n    var description: String {\n        switch self {\n        case let .missingProjectSpec(path):\n            return \"No project spec found at \\(path.absolute())\"\n        case let .projectSpecParsingError(error):\n            return \"Parsing project spec failed: \\(error)\"\n        case let .cacheGenerationError(error):\n            return \"Couldn't generate cache file: \\(error)\"\n        case let .validationError(error):\n            return error.description\n        case let .generationError(error):\n            return String(describing: error)\n        case .missingUsername:\n            return \"Couldn't find current username\"\n        case let .writingError(error):\n            return String(describing: error)\n        }\n    }\n\n    var message: String? {\n        description.red\n    }\n\n    var exitStatus: Int32 {\n        1\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCLI/XcodeGenCLI.swift",
    "content": "import Foundation\nimport ProjectSpec\nimport SwiftCLI\nimport Version\n\npublic class XcodeGenCLI {\n    let cli: CLI\n\n    public init(version: Version) {\n        let generateCommand = GenerateCommand(version: version)\n\n        cli = CLI(\n            name: \"xcodegen\",\n            version: version.description,\n            description: \"Generates Xcode projects\",\n            commands: [\n                generateCommand,\n                CacheCommand(version: version),\n                DumpCommand(version: version),\n            ]\n        )\n        cli.parser.routeBehavior = .searchWithFallback(generateCommand)\n    }\n\n    public func execute(arguments: [String]? = nil) {\n        let status: Int32\n        if let arguments = arguments {\n            status = cli.go(with: arguments)\n        } else {\n            status = cli.go()\n        }\n        exit(status)\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCore/ArrayExtensions.swift",
    "content": "import Foundation\n\npublic extension Array {\n\n   func parallelMap<T>(transform: (Element) -> T) -> [T] {\n       var result = ContiguousArray<T?>(repeating: nil, count: count)\n       return result.withUnsafeMutableBufferPointer { buffer in\n           DispatchQueue.concurrentPerform(iterations: buffer.count) { idx in\n               buffer[idx] = transform(self[idx])\n           }\n           return buffer.map { $0! }\n       }\n   }\n}\n\n/// Holds a sorted array, created from specified sequence\n/// This structure is needed for the cases, when some part of application requires array to be sorted, but don't trust any inputs :)\npublic struct SortedArray<T: Comparable> {\n    public let value: Array<T>\n    public init<S: Sequence>(_ value: S) where S.Element == T {\n        self.value = value.sorted()\n    }\n}\n\npublic extension SortedArray {\n    /// Returns the first index in which an element of the collection satisfies the given predicate.\n    /// The collection assumed to be sorted. If collection is not have sorted values the result is undefined.\n    ///\n    /// The idea is to get first index of a function for which the given predicate evaluates to true.\n    ///\n    ///       let values = [1,2,3,4,5]\n    ///       let idx = values.firstIndexAssumingSorted(where: { $0 > 3 })\n    ///\n    ///       // false, false, false, true, true\n    ///       //                      ^\n    ///       // therefore idx == 3\n    ///\n    /// - Parameter predicate: A closure that takes an element as its argument\n    ///   and returns a Boolean value that indicates whether the passed element\n    ///   represents a match.\n    ///\n    /// - Returns: The index of the first element for which `predicate` returns\n    ///   `true`. If no elements in the collection satisfy the given predicate,\n    ///   returns `nil`.\n    ///\n    /// - Complexity: O(log(*n*)), where *n* is the length of the collection.\n    @inlinable\n    func firstIndex(where predicate: (T) throws -> Bool) rethrows -> Int? {\n        // Predicate should divide a collection to two pairs of values\n        // \"bad\" values for which predicate returns `false``\n        // \"good\" values for which predicate return `true`\n        // false false false false false true true true\n        //                               ^\n        // The idea is to get _first_ index which for which the predicate returns `true`\n        let lastIndex = value.count\n\n        // The index that represents where bad values start\n        var badIndex = -1\n\n        // The index that represents where good values start\n        var goodIndex = lastIndex\n        var midIndex = (badIndex + goodIndex) / 2\n\n        while badIndex + 1 < goodIndex {\n            if try predicate(value[midIndex]) {\n                goodIndex = midIndex\n            } else {\n                badIndex = midIndex\n            }\n            midIndex = (badIndex + goodIndex) / 2\n        }\n\n        // We're out of bounds, no good items in array\n        if midIndex == lastIndex || goodIndex == lastIndex {\n            return nil\n        }\n        return goodIndex\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCore/Atomic.swift",
    "content": "//\n//  Atomic.swift\n//  \n//\n//  Created by Vladislav Lisianskii on 23.02.2022.\n//\n\nimport Foundation\n\n@propertyWrapper\npublic final class Atomic<Value> {\n\n    private var value: Value\n\n    private let queue = DispatchQueue(\n        label: \"com.xcodegencore.atomic.\\(UUID().uuidString)\",\n        qos: .utility,\n        attributes: .concurrent,\n        autoreleaseFrequency: .inherit,\n        target: .global()\n    )\n\n    public init(wrappedValue: Value) {\n        self.value = wrappedValue\n    }\n\n    public var wrappedValue: Value {\n        get {\n            queue.sync { value }\n        }\n        set {\n            queue.async(flags: .barrier) { [weak self] in\n                self?.value = newValue\n            }\n        }\n    }\n\n    /// Allows us to get the actual `Atomic` instance with the $\n    /// prefix.\n    public var projectedValue: Atomic<Value> {\n        return self\n    }\n\n    /// Modifies the protected value using `closure`.\n    public func with<R>(\n        _ closure: (inout Value) throws -> R\n    ) rethrows -> R {\n        try queue.sync(flags: .barrier) {\n            try closure(&value)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCore/Glob.swift",
    "content": "//\n//  Created by Eric Firestone on 3/22/16.\n//  Copyright © 2016 Square, Inc. All rights reserved.\n//  Released under the Apache v2 License.\n//\n//  Adapted from https://gist.github.com/blakemerryman/76312e1cbf8aec248167\n//  Adapted from https://gist.github.com/efirestone/ce01ae109e08772647eb061b3bb387c3\n\nimport Foundation\n\npublic let GlobBehaviorBashV3 = Glob.Behavior(\n    supportsGlobstar: false,\n    includesFilesFromRootOfGlobstar: false,\n    includesDirectoriesInResults: true,\n    includesFilesInResultsIfTrailingSlash: false\n)\npublic let GlobBehaviorBashV4 = Glob.Behavior(\n    supportsGlobstar: true, // Matches Bash v4 with \"shopt -s globstar\" option\n    includesFilesFromRootOfGlobstar: true,\n    includesDirectoriesInResults: true,\n    includesFilesInResultsIfTrailingSlash: false\n)\npublic let GlobBehaviorGradle = Glob.Behavior(\n    supportsGlobstar: true,\n    includesFilesFromRootOfGlobstar: true,\n    includesDirectoriesInResults: false,\n    includesFilesInResultsIfTrailingSlash: true\n)\n\n/**\n Finds files on the file system using pattern matching.\n */\npublic class Glob: Collection {\n\n    /**\n     * Different glob implementations have different behaviors, so the behavior of this\n     * implementation is customizable.\n     */\n    public struct Behavior {\n        // If true then a globstar (\"**\") causes matching to be done recursively in subdirectories.\n        // If false then \"**\" is treated the same as \"*\"\n        let supportsGlobstar: Bool\n\n        // If true the results from the directory where the globstar is declared will be included as well.\n        // For example, with the pattern \"dir/**/*.ext\" the fie \"dir/file.ext\" would be included if this\n        // property is true, and would be omitted if it's false.\n        let includesFilesFromRootOfGlobstar: Bool\n\n        // If false then the results will not include directory entries. This does not affect recursion depth.\n        let includesDirectoriesInResults: Bool\n\n        // If false and the last characters of the pattern are \"**/\" then only directories are returned in the results.\n        let includesFilesInResultsIfTrailingSlash: Bool\n    }\n\n    public static var defaultBehavior = GlobBehaviorBashV4\n\n    public static let defaultBlacklistedDirectories = [\"node_modules\", \"Pods\"]\n\n    @Atomic private var isDirectoryCache = [String: Bool]()\n\n    public let behavior: Behavior\n    public let blacklistedDirectories: [String]\n    var paths = [String]()\n    public var startIndex: Int { paths.startIndex }\n    public var endIndex: Int { paths.endIndex }\n\n    /// Initialize a glob\n    ///\n    /// - Parameters:\n    ///   - pattern: The pattern to use when building the list of matching directories.\n    ///   - behavior: See individual descriptions on `Glob.Behavior` values.\n    ///   - blacklistedDirectories: An array of directories to ignore at the root level of the project.\n    public init(pattern: String, behavior: Behavior = Glob.defaultBehavior, blacklistedDirectories: [String] = defaultBlacklistedDirectories) {\n\n        self.behavior = behavior\n        self.blacklistedDirectories = blacklistedDirectories\n\n        var adjustedPattern = pattern\n        let hasTrailingGlobstarSlash = pattern.hasSuffix(\"**/\")\n        var includeFiles = !hasTrailingGlobstarSlash\n\n        if behavior.includesFilesInResultsIfTrailingSlash {\n            includeFiles = true\n            if hasTrailingGlobstarSlash {\n                // Grab the files too.\n                adjustedPattern += \"*\"\n            }\n        }\n\n        let patterns = behavior.supportsGlobstar ? expandGlobstar(pattern: adjustedPattern) : [adjustedPattern]\n        \n        #if os(macOS)\n        paths = patterns.parallelMap { paths(usingPattern: $0, includeFiles: includeFiles) }.flatMap { $0 }\n        #else\n        // Parallel invocations of Glob on Linux seems to be causing unexpected crashes\n        paths = patterns.map { paths(usingPattern: $0, includeFiles: includeFiles) }.flatMap { $0 }\n        #endif\n\n        paths = Array(Set(paths)).sorted { lhs, rhs in\n            lhs.compare(rhs) != ComparisonResult.orderedDescending\n        }\n\n        clearCaches()\n    }\n\n    // MARK: Subscript Support\n\n    public subscript(i: Int) -> String {\n        paths[i]\n    }\n\n    // MARK: Protocol of IndexableBase\n\n    public func index(after i: Int) -> Int {\n        i + 1\n    }\n\n    // MARK: Private\n\n    private var globalFlags = GLOB_TILDE | GLOB_BRACE | GLOB_MARK\n\n    private func executeGlob(pattern: UnsafePointer<CChar>, gt: UnsafeMutablePointer<glob_t>) -> Bool {\n        glob(pattern, globalFlags, nil, gt) == 0\n    }\n\n    private func expandGlobstar(pattern: String) -> [String] {\n        guard pattern.contains(\"**\") else {\n            return [pattern]\n        }\n\n        var results = [String]()\n        var parts = pattern.components(separatedBy: \"**\")\n        let firstPart = parts.removeFirst()\n        var lastPart = parts.joined(separator: \"**\")\n\n        var directories: [URL]\n\n        if FileManager.default.fileExists(atPath: firstPart) {\n            do {\n                directories = try exploreDirectories(path: firstPart)\n            } catch {\n                directories = []\n                print(\"Error parsing file system item: \\(error)\")\n            }\n        } else {\n            directories = []\n        }\n\n        if behavior.includesFilesFromRootOfGlobstar {\n            // Check the base directory for the glob star as well.\n            directories.insert(URL(fileURLWithPath: firstPart), at: 0)\n\n            // Include the globstar root directory (\"dir/\") in a pattern like \"dir/**\" or \"dir/**/\"\n            if lastPart.isEmpty {\n                results.append(firstPart)\n            }\n        }\n\n        if lastPart.isEmpty {\n            lastPart = \"*\"\n        }\n        for directory in directories {\n            let partiallyResolvedPattern = directory.appendingPathComponent(lastPart)\n            let standardizedPattern = (partiallyResolvedPattern.relativePath as NSString).standardizingPath\n            results.append(contentsOf: expandGlobstar(pattern: standardizedPattern))\n        }\n\n        return results\n    }\n\n    private func exploreDirectories(path: String) throws -> [URL] {\n        try FileManager.default.contentsOfDirectory(atPath: path)\n            .compactMap { subpath -> [URL]? in\n                if blacklistedDirectories.contains(subpath) {\n                    return nil\n                }\n                let firstLevel = URL(fileURLWithPath: path).appendingPathComponent(subpath, isDirectory: true)\n                guard isDirectory(path: firstLevel.path) else {\n                    return nil\n                }\n                var subDirs: [URL] = try FileManager.default.subpathsOfDirectory(atPath: firstLevel.path)\n                    .compactMap { subpath -> URL? in\n                        let full = firstLevel.appendingPathComponent(subpath, isDirectory: true)\n                        return isDirectory(path: full.path) ? full : nil\n                    }\n                subDirs.append(firstLevel)\n                return subDirs\n            }\n            .joined()\n            .array()\n    }\n\n    private func isDirectory(path: String) -> Bool {\n        if let isDirectory = isDirectoryCache[path] {\n            return isDirectory\n        }\n\n        var isDirectoryBool = ObjCBool(false)\n        let isDirectory = FileManager.default.fileExists(atPath: path, isDirectory: &isDirectoryBool) && isDirectoryBool.boolValue\n        $isDirectoryCache.with { isDirectoryCache in\n            isDirectoryCache[path] = isDirectory\n        }\n\n        return isDirectory\n    }\n\n    private func clearCaches() {\n        $isDirectoryCache.with { isDirectoryCache in\n            isDirectoryCache.removeAll()\n        }\n    }\n\n    private func paths(usingPattern pattern: String, includeFiles: Bool) -> [String] {\n        var gt = glob_t()\n        defer { globfree(&gt) }\n        if executeGlob(pattern: pattern, gt: &gt) {\n             return populateFiles(gt: gt, includeFiles: includeFiles)\n        }\n        return []\n    }\n    \n    private func populateFiles(gt: glob_t, includeFiles: Bool) -> [String] {\n        var paths = [String]()\n        let includeDirectories = behavior.includesDirectoriesInResults\n\n        #if os(macOS)\n        let matches = Int(gt.gl_matchc)\n        #else\n        let matches = Int(gt.gl_pathc)\n        #endif\n        for i in 0..<matches {\n            if let path = String(validatingUTF8: gt.gl_pathv[i]!) {\n                if !includeFiles || !includeDirectories {\n                    let isDirectory = self.isDirectory(path: path)\n                    if (!includeFiles && !isDirectory) || (!includeDirectories && isDirectory) {\n                        continue\n                    }\n                }\n\n                paths.append(path)\n            }\n        }\n        return paths\n    }\n}\n\nprivate extension Sequence {\n    func array() -> [Element] {\n        Array(self)\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCore/MD5.swift",
    "content": "// To date, adding CommonCrypto to a Swift framework is problematic. See:\n// http://stackoverflow.com/questions/25248598/importing-commoncrypto-in-a-swift-framework\n// We're using a subset and modified version of CryptoSwift as an alternative.\n// The following is an altered source version that only includes MD5. The original software can be found at:\n// https://github.com/krzyzanowskim/CryptoSwift\n// This is the original copyright notice:\n\n/*\n Copyright (C) 2014 Marcin Krzyżanowski <marcin.krzyzanowski@gmail.com>\n This software is provided 'as-is', without any express or implied warranty.\n In no event will the authors be held liable for any damages arising from the use of this software.\n Permission is granted to anyone to use this software for any purpose,including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\n - The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation is required.\n - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n - This notice may not be removed or altered from any source or binary distribution.\n */\n\nimport Foundation\n\nextension String {\n    public var md5: String {\n        if let data = data(using: .utf8, allowLossyConversion: true) {\n            let message = data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> [UInt8] in\n                Array(bytes)\n            }\n\n            let MD5Calculator = MD5(message)\n            let MD5Data = MD5Calculator.calculate()\n\n            var MD5String = String()\n            for c in MD5Data {\n                MD5String += String(format: \"%02x\", c)\n            }\n            return MD5String\n\n        } else {\n            return self\n        }\n    }\n}\n\n/** array of bytes, little-endian representation */\nfunc arrayOfBytes<T>(_ value: T, length: Int? = nil) -> [UInt8] {\n    let totalBytes = length ?? (MemoryLayout<T>.size * 8)\n\n    let valuePointer = UnsafeMutablePointer<T>.allocate(capacity: 1)\n    valuePointer.pointee = value\n\n    let bytes = valuePointer.withMemoryRebound(to: UInt8.self, capacity: totalBytes) { (bytesPointer) -> [UInt8] in\n        var bytes = [UInt8](repeating: 0, count: totalBytes)\n        for j in 0..<min(MemoryLayout<T>.size, totalBytes) {\n            bytes[totalBytes - 1 - j] = (bytesPointer + j).pointee\n        }\n        return bytes\n    }\n\n    #if swift(>=4.1)\n    valuePointer.deinitialize(count: 1)\n    valuePointer.deallocate()\n    #else\n    valuePointer.deinitialize()\n    valuePointer.deallocate(capacity: 1)\n    #endif\n\n    return bytes\n}\n\nextension Int {\n    /** Array of bytes with optional padding (little-endian) */\n    func bytes(_ totalBytes: Int = MemoryLayout<Int>.size) -> [UInt8] {\n        arrayOfBytes(self, length: totalBytes)\n    }\n}\n\nextension NSMutableData {\n    /** Convenient way to append bytes */\n    func appendBytes(_ arrayOfBytes: [UInt8]) {\n        append(arrayOfBytes, length: arrayOfBytes.count)\n    }\n}\n\nprotocol HashProtocol {\n    var message: [UInt8] { get }\n\n    /** Common part for hash calculation. Prepare header data. */\n    func prepare(_ len: Int) -> [UInt8]\n}\n\nextension HashProtocol {\n    func prepare(_ len: Int) -> [UInt8] {\n        var tmpMessage = message\n\n        // Step 1. Append Padding Bits\n        tmpMessage.append(0x80) // append one bit (UInt8 with one bit) to message\n\n        // append \"0\" bit until message length in bits ≡ 448 (mod 512)\n        var msgLength = tmpMessage.count\n        var counter = 0\n\n        while msgLength % len != (len - 8) {\n            counter += 1\n            msgLength += 1\n        }\n\n        tmpMessage += [UInt8](repeating: 0, count: counter)\n        return tmpMessage\n    }\n}\n\nfunc toUInt32Array(_ slice: ArraySlice<UInt8>) -> [UInt32] {\n    var result = [UInt32]()\n    result.reserveCapacity(16)\n\n    for idx in stride(from: slice.startIndex, to: slice.endIndex, by: MemoryLayout<UInt32>.size) {\n        let d0 = UInt32(slice[idx.advanced(by: 3)]) << 24\n        let d1 = UInt32(slice[idx.advanced(by: 2)]) << 16\n        let d2 = UInt32(slice[idx.advanced(by: 1)]) << 8\n        let d3 = UInt32(slice[idx])\n        let val: UInt32 = d0 | d1 | d2 | d3\n\n        result.append(val)\n    }\n    return result\n}\n\nstruct BytesIterator: IteratorProtocol {\n    let chunkSize: Int\n    let data: [UInt8]\n\n    init(chunkSize: Int, data: [UInt8]) {\n        self.chunkSize = chunkSize\n        self.data = data\n    }\n\n    var offset = 0\n\n    mutating func next() -> ArraySlice<UInt8>? {\n        let end = min(chunkSize, data.count - offset)\n        let result = data[offset..<offset + end]\n        offset += result.count\n        return result.count > 0 ? result : nil\n    }\n}\n\nstruct BytesSequence: Sequence {\n    let chunkSize: Int\n    let data: [UInt8]\n\n    func makeIterator() -> BytesIterator {\n        BytesIterator(chunkSize: chunkSize, data: data)\n    }\n}\n\nfunc rotateLeft(_ value: UInt32, bits: UInt32) -> UInt32 {\n    ((value << bits) & 0xFFFF_FFFF) | (value >> (32 - bits))\n}\n\nclass MD5: HashProtocol {\n    static let size = 16 // 128 / 8\n    let message: [UInt8]\n\n    init(_ message: [UInt8]) {\n        self.message = message\n    }\n\n    /** specifies the per-round shift amounts */\n    private let shifts: [UInt32] = [\n        7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,\n        5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,\n        4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,\n        6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21,\n    ]\n\n    /** binary integer part of the sines of integers (Radians) */\n    private let sines: [UInt32] = [\n        0xD76A_A478, 0xE8C7_B756, 0x2420_70DB, 0xC1BD_CEEE,\n        0xF57C_0FAF, 0x4787_C62A, 0xA830_4613, 0xFD46_9501,\n        0x6980_98D8, 0x8B44_F7AF, 0xFFFF_5BB1, 0x895C_D7BE,\n        0x6B90_1122, 0xFD98_7193, 0xA679_438E, 0x49B4_0821,\n        0xF61E_2562, 0xC040_B340, 0x265E_5A51, 0xE9B6_C7AA,\n        0xD62F_105D, 0x0244_1453, 0xD8A1_E681, 0xE7D3_FBC8,\n        0x21E1_CDE6, 0xC337_07D6, 0xF4D5_0D87, 0x455A_14ED,\n        0xA9E3_E905, 0xFCEF_A3F8, 0x676F_02D9, 0x8D2A_4C8A,\n        0xFFFA_3942, 0x8771_F681, 0x6D9D_6122, 0xFDE5_380C,\n        0xA4BE_EA44, 0x4BDE_CFA9, 0xF6BB_4B60, 0xBEBF_BC70,\n        0x289B_7EC6, 0xEAA1_27FA, 0xD4EF_3085, 0x4881D05,\n        0xD9D4_D039, 0xE6DB_99E5, 0x1FA2_7CF8, 0xC4AC_5665,\n        0xF429_2244, 0x432A_FF97, 0xAB94_23A7, 0xFC93_A039,\n        0x655B_59C3, 0x8F0C_CC92, 0xFFEF_F47D, 0x8584_5DD1,\n        0x6FA8_7E4F, 0xFE2C_E6E0, 0xA301_4314, 0x4E08_11A1,\n        0xF753_7E82, 0xBD3A_F235, 0x2AD7_D2BB, 0xEB86_D391,\n    ]\n\n    private let hashes: [UInt32] = [0x6745_2301, 0xEFCD_AB89, 0x98BA_DCFE, 0x1032_5476]\n\n    func calculate() -> [UInt8] {\n        var tmpMessage = prepare(64)\n        tmpMessage.reserveCapacity(tmpMessage.count + 4)\n\n        // hash values\n        var hh = hashes\n\n        // Step 2. Append Length a 64-bit representation of lengthInBits\n        let lengthInBits = (message.count * 8)\n        let lengthBytes = lengthInBits.bytes(64 / 8)\n        tmpMessage += lengthBytes.reversed()\n\n        // Process the message in successive 512-bit chunks:\n        let chunkSizeBytes = 512 / 8 // 64\n\n        for chunk in BytesSequence(chunkSize: chunkSizeBytes, data: tmpMessage) {\n            // break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15\n            let M = toUInt32Array(chunk)\n            assert(M.count == 16, \"Invalid array\")\n\n            // Initialize hash value for this chunk:\n            var A: UInt32 = hh[0]\n            var B: UInt32 = hh[1]\n            var C: UInt32 = hh[2]\n            var D: UInt32 = hh[3]\n\n            var dTemp: UInt32 = 0\n\n            // Main loop\n            for j in 0..<sines.count {\n                var g = 0\n                var F: UInt32 = 0\n\n                switch j {\n                case 0...15:\n                    F = (B & C) | ((~B) & D)\n                    g = j\n                case 16...31:\n                    F = (D & B) | (~D & C)\n                    g = (5 * j + 1) % 16\n                case 32...47:\n                    F = B ^ C ^ D\n                    g = (3 * j + 5) % 16\n                case 48...63:\n                    F = C ^ (B | (~D))\n                    g = (7 * j) % 16\n                default:\n                    break\n                }\n                dTemp = D\n                D = C\n                C = B\n                B = B &+ rotateLeft(A &+ F &+ sines[j] &+ M[g], bits: shifts[j])\n                A = dTemp\n            }\n\n            hh[0] = hh[0] &+ A\n            hh[1] = hh[1] &+ B\n            hh[2] = hh[2] &+ C\n            hh[3] = hh[3] &+ D\n        }\n\n        var result = [UInt8]()\n        result.reserveCapacity(hh.count / 4)\n\n        hh.forEach {\n            let itemLE = $0.littleEndian\n            let r1 = UInt8(itemLE & 0xFF)\n            let r2 = UInt8((itemLE >> 8) & 0xFF)\n            let r3 = UInt8((itemLE >> 16) & 0xFF)\n            let r4 = UInt8((itemLE >> 24) & 0xFF)\n            result += [r1, r2, r3, r4]\n        }\n        return result\n    }\n}\n\n// swiftlint:enable all\n"
  },
  {
    "path": "Sources/XcodeGenCore/PathExtensions.swift",
    "content": "import Foundation\nimport PathKit\n\nextension Path {\n    /// Returns a Path without any inner parent directory references.\n    ///\n    /// Similar to `NSString.standardizingPath`, but works with relative paths.\n    ///\n    /// ### Examples\n    /// - `a/b/../c` simplifies to `a/c`\n    /// - `../a/b` simplifies to `../a/b`\n    /// - `a/../../c` simplifies to `../c`\n    public func simplifyingParentDirectoryReferences() -> Path {\n        if !string.contains(\"..\") { // Skip simplifying if its already simple\n            var string = self.string\n            while string.hasSuffix(Path.separator) { // Remove all trailing path separators\n                string.removeLast()\n            }\n            return Path(String(string))\n        }\n        return normalize().components.reduce(Path(), +)\n    }\n\n    /// Returns the relative path necessary to go from `base` to `self`.\n    ///\n    /// Both paths must be absolute or relative paths.\n    /// - throws: Throws an error when the path types do not match, or when `base` has so many parent path components\n    ///           that it refers to an unknown parent directory.\n    public func relativePath(from base: Path) throws -> Path {\n        enum PathArgumentError: Error {\n            /// Can't back out of an unknown parent directory\n            case unknownParentDirectory\n            /// It's impossible to determine the path between an absolute and a relative path\n            case unmatchedAbsolutePath\n        }\n\n        func pathComponents(for path: ArraySlice<String>, relativeTo base: ArraySlice<String>, memo: [String]) throws -> [String] {\n            switch (base.first, path.first) {\n            // Base case: Paths are equivalent\n            case (.none, .none):\n                return memo\n\n            // No path to backtrack from\n            case (.none, .some(let rhs)):\n                guard rhs != \".\" else {\n                    // Skip . instead of appending it\n                    return try pathComponents(for: path.dropFirst(), relativeTo: base, memo: memo)\n                }\n                return try pathComponents(for: path.dropFirst(), relativeTo: base, memo: memo + [rhs])\n\n            // Both sides have a common parent\n            case (.some(let lhs), .some(let rhs)) where memo.isEmpty && lhs == rhs:\n                return try pathComponents(for: path.dropFirst(), relativeTo: base.dropFirst(), memo: memo)\n\n            // `base` has a path to back out of\n            case (.some(let lhs), _):\n                guard lhs != \"..\" else {\n                    throw PathArgumentError.unknownParentDirectory\n                }\n                guard lhs != \".\" else {\n                    // Skip . instead of resolving it to ..\n                    return try pathComponents(for: path, relativeTo: base.dropFirst(), memo: memo)\n                }\n                return try pathComponents(for: path, relativeTo: base.dropFirst(), memo: memo + [\"..\"])\n            }\n        }\n\n        guard isAbsolute && base.isAbsolute || !isAbsolute && !base.isAbsolute else {\n            throw PathArgumentError.unmatchedAbsolutePath\n        }\n\n        return Path(components: try pathComponents(for: ArraySlice(simplifyingParentDirectoryReferences().components),\n                                                   relativeTo: ArraySlice(base.simplifyingParentDirectoryReferences().components),\n                                                   memo: []))\n    }\n\n    /// Returns whether `self` is a strict parent of `child`.\n    ///\n    /// Both paths must be asbolute or relative paths.\n    public func isParent(of child: Path) throws -> Bool {\n        let relativePath = try child.relativePath(from: self)\n        return relativePath.components.allSatisfy { $0 != \"..\" }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenCore/StringDiff.swift",
    "content": "import Foundation\n\n// https://gist.github.com/kristopherjohnson/543687c763cd6e524c91\n\n/// Find first differing character between two strings\n///\n/// :param: s1 First String\n/// :param: s2 Second String\n///\n/// :returns: .DifferenceAtIndex(i) or .NoDifference\npublic func firstDifferenceBetweenStrings(_ s1: String, _ s2: String) -> FirstDifferenceResult {\n    let len1 = s1.count\n    let len2 = s2.count\n\n    let lenMin = min(len1, len2)\n\n    for i in 0..<lenMin {\n        if (s1 as NSString).character(at: i) != (s2 as NSString).character(at: i) {\n            return .DifferenceAtIndex(i)\n        }\n    }\n\n    if len1 < len2 {\n        return .DifferenceAtIndex(len1)\n    }\n\n    if len2 < len1 {\n        return .DifferenceAtIndex(len2)\n    }\n\n    return .NoDifference\n}\n\n/// Create a formatted String representation of difference between strings\n///\n/// :param: s1 First string\n/// :param: s2 Second string\n///\n/// :returns: a string, possibly containing significant whitespace and newlines\npublic func prettyFirstDifferenceBetweenStrings(_ s1: String, _ s2: String, previewPrefixLength: Int = 25, previewSuffixLength: Int = 25) -> String {\n    let firstDifferenceResult = firstDifferenceBetweenStrings(s1, s2)\n\n    func diffString(at index: Int, _ s1: String, _ s2: String) -> String {\n        let markerArrow = \"\\u{2b06}\" // \"⬆\"\n        let ellipsis = \"\\u{2026}\" // \"…\"\n\n        /// Given a string and a range, return a string representing that substring.\n        ///\n        /// If the range starts at a position other than 0, an ellipsis\n        /// will be included at the beginning.\n        ///\n        /// If the range ends before the actual end of the string,\n        /// an ellipsis is added at the end.\n        func windowSubstring(_ s: String, _ range: NSRange) -> String {\n            let validRange = NSMakeRange(range.location, min(range.length, s.count - range.location))\n            let substring = (s as NSString).substring(with: validRange)\n\n            let prefix = range.location > 0 ? ellipsis : \"\"\n            let suffix = (s.count - range.location > range.length) ? ellipsis : \"\"\n\n            return \"\\(prefix)\\(substring)\\(suffix)\"\n        }\n\n        // Show this many characters before and after the first difference\n        let windowLength = previewPrefixLength + 1 + previewSuffixLength\n\n        let windowIndex = max(index - previewPrefixLength, 0)\n        let windowRange = NSMakeRange(windowIndex, windowLength)\n\n        let sub1 = windowSubstring(s1, windowRange)\n        let sub2 = windowSubstring(s2, windowRange)\n\n        let markerPosition = min(previewSuffixLength, index) + (windowIndex > 0 ? 1 : 0)\n\n        let markerPrefix = String(repeating: \" \", count: markerPosition)\n        let markerLine = \"\\(markerPrefix)\\(markerArrow)\"\n\n        return \"Difference at index \\(index):\\n\\(sub1)\\n\\(sub2)\\n\\(markerLine)\"\n    }\n\n    switch firstDifferenceResult {\n    case .NoDifference: return \"No difference\"\n    case let .DifferenceAtIndex(index): return diffString(at: index, s1, s2)\n    }\n}\n\n/// Result type for firstDifferenceBetweenStrings()\npublic enum FirstDifferenceResult {\n    /// Strings are identical\n    case NoDifference\n\n    /// Strings differ at the specified index.\n    ///\n    /// This could mean that characters at the specified index are different,\n    /// or that one string is longer than the other\n    case DifferenceAtIndex(Int)\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/BreakpointGenerator.swift",
    "content": "import Foundation\nimport ProjectSpec\nimport XcodeProj\n\npublic class BreakpointGenerator {\n\n    let project: Project\n\n    public init(project: Project) {\n        self.project = project\n    }\n\n    func generateBreakpointList() throws -> XCBreakpointList? {\n        let breakpoints = project.breakpoints\n        guard !breakpoints.isEmpty else {\n            return nil\n        }\n        return XCBreakpointList(type: \"4\", version: \"2.0\", breakpoints: try breakpoints.map({ try generateBreakpointProxy($0) }))\n    }\n\n    private func generateBreakpointProxy(_ breakpoint: Breakpoint) throws -> XCBreakpointList.BreakpointProxy {\n        let breakpointExtensionID: BreakpointExtensionID\n        var filePath: String?\n        var line: String?\n        var column: String?\n        var scope: String?\n        var stopOnStyle: String?\n        var symbol: String?\n        var module: String?\n        switch breakpoint.type {\n        case let .file(path, lineNumber, columnNumber):\n            breakpointExtensionID = .file\n            filePath = path\n            line = String(lineNumber)\n            column = columnNumber.map(String.init)\n        case let .exception(exception):\n            breakpointExtensionID = .exception\n            scope = exception.scope.rawValue\n            stopOnStyle = exception.stopOnStyle.rawValue\n        case .swiftError:\n            breakpointExtensionID = .swiftError\n        case .openGLError:\n            breakpointExtensionID = .openGLError\n        case let .symbolic(symbolName, moduleName):\n            breakpointExtensionID = .symbolic\n            symbol = symbolName\n            module = moduleName\n        case .ideConstraintError:\n            breakpointExtensionID = .ideConstraintError\n        case .ideTestFailure:\n            breakpointExtensionID = .ideTestFailure\n        case .runtimeIssue:\n            breakpointExtensionID = .runtimeIssue\n        }\n        let xcbreakpoint = XCBreakpointList.BreakpointProxy.BreakpointContent(\n            enabled: breakpoint.enabled,\n            ignoreCount: String(breakpoint.ignoreCount),\n            continueAfterRunningActions: breakpoint.continueAfterRunningActions,\n            filePath: filePath,\n            startingColumn: column,\n            endingColumn: column,\n            startingLine: line,\n            endingLine: line,\n            symbol: symbol,\n            module: module,\n            scope: scope,\n            stopOnStyle: stopOnStyle,\n            condition: breakpoint.condition,\n            actions: try breakpoint.actions.map { try generateBreakpointActionProxy($0) }\n        )\n\n        return XCBreakpointList.BreakpointProxy(\n            breakpointExtensionID: breakpointExtensionID,\n            breakpointContent: xcbreakpoint\n        )\n    }\n\n    private func generateBreakpointActionProxy(_ breakpointAction: Breakpoint.Action) throws -> XCBreakpointList.BreakpointProxy.BreakpointContent.BreakpointActionProxy {\n        let actionExtensionID: BreakpointActionExtensionID\n        var consoleCommand: String?\n        var message: String?\n        var conveyanceType: String?\n        var command: String?\n        var arguments: String?\n        var waitUntilDone: Bool?\n        var script: String?\n        var soundName: String?\n        switch breakpointAction {\n        case let .debuggerCommand(command):\n            actionExtensionID = .debuggerCommand\n            consoleCommand = command\n        case let .log(log):\n            actionExtensionID = .log\n            message = log.message\n            conveyanceType = log.conveyanceType.rawValue\n        case let .shellCommand(commandPath, commandArguments, waitUntilCommandDone):\n            actionExtensionID = .shellCommand\n            command = commandPath\n            arguments = commandArguments\n            waitUntilDone = waitUntilCommandDone\n        case .graphicsTrace:\n            actionExtensionID = .graphicsTrace\n        case let .appleScript(appleScript):\n            actionExtensionID = .appleScript\n            script = appleScript\n        case let .sound(sound):\n            actionExtensionID = .sound\n            soundName = sound.rawValue\n        }\n        let xcaction = XCBreakpointList.BreakpointProxy.BreakpointContent.BreakpointActionProxy.ActionContent(\n            consoleCommand: consoleCommand,\n            message: message,\n            conveyanceType: conveyanceType,\n            command: command,\n            arguments: arguments,\n            waitUntilDone: waitUntilDone,\n            script: script,\n            soundName: soundName\n        )\n\n        return XCBreakpointList.BreakpointProxy.BreakpointContent.BreakpointActionProxy(\n            actionExtensionID:  actionExtensionID,\n            actionContent: xcaction\n        )\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/CarthageDependencyResolver.swift",
    "content": "//\n//  CarthageDependencyResolver.swift\n//  XcodeGenKit\n//\n//  Created by Rogerio de Paula Assis on 2/4/19.\n//\n\nimport Foundation\nimport ProjectSpec\nimport PathKit\n\npublic struct ResolvedCarthageDependency: Equatable, Hashable {\n    let dependency: Dependency\n    let isFromTopLevelTarget: Bool\n}\n\npublic class CarthageDependencyResolver {\n    static func getBuildPath(_ project: Project) -> String {\n        return project.options.carthageBuildPath ?? \"Carthage/Build\"\n    }\n\n    /// Carthage's base build path as specified by the\n    /// project's `SpecOptions`, or `Carthage/Build` by default\n    var buildPath: String {\n        return CarthageDependencyResolver.getBuildPath(project)\n    }\n\n    /// Carthage's executable path as specified by the\n    /// project's `SpecOptions`, or `carthage` by default\n    var executable: String {\n        project.options.carthageExecutablePath ?? \"carthage\"\n    }\n\n    private let project: Project\n    let versionLoader: CarthageVersionLoader\n\n    init(project: Project) {\n        self.project = project\n        versionLoader = CarthageVersionLoader(buildPath: project.basePath + CarthageDependencyResolver.getBuildPath(project))\n    }\n\n    /// Carthage's build path for the given platform\n    func buildPath(for platform: Platform, linkType: Dependency.CarthageLinkType) -> String {\n        switch linkType {\n        case .static:\n            return \"\\(buildPath)/\\(platform.carthageName)/Static\"\n        case .dynamic:\n            return \"\\(buildPath)/\\(platform.carthageName)\"\n        }\n    }\n\n    /// Fetches all carthage dependencies for a given target\n    func dependencies(for topLevelTarget: Target) -> [ResolvedCarthageDependency] {\n        // this is used to resolve cyclical target dependencies\n        var visitedTargets: Set<String> = []\n        var frameworks: Set<ResolvedCarthageDependency> = []\n\n        var isTopLevelTarget = true\n        var queue: [ProjectTarget] = [topLevelTarget]\n        while !queue.isEmpty {\n            // projectTarget is not the top level target after the first loop ends\n            defer { isTopLevelTarget = false }\n\n            let projectTarget = queue.removeFirst()\n            if visitedTargets.contains(projectTarget.name) {\n                continue\n            }\n\n            if let target = projectTarget as? Target {\n                for dependency in target.dependencies {\n                    if case (false, false) = (dependency.link, dependency.embed ?? topLevelTarget.shouldEmbedCarthageDependencies) {\n                        continue\n                    }\n                    guard !frameworks.contains(where: { $0.dependency == dependency }) else {\n                        continue\n                    }\n\n                    switch dependency.type {\n                    case .carthage(let findFrameworks, _):\n                        let findFrameworks = findFrameworks ?? project.options.findCarthageFrameworks\n                        if findFrameworks {\n                            relatedDependencies(for: dependency, in: target.platform)\n                                .filter { dependency in\n                                    !frameworks.contains(where: { $0.dependency == dependency })\n                                }\n                                .forEach {\n                                    frameworks.insert(.init(\n                                        dependency: $0,\n                                        isFromTopLevelTarget: isTopLevelTarget\n                                    ))\n                                }\n                        } else {\n                            frameworks.insert(.init(\n                                dependency: dependency,\n                                isFromTopLevelTarget: isTopLevelTarget\n                            ))\n                        }\n                    case .target:\n                        if let projectTarget = project.getProjectTarget(dependency.reference) {\n                            if let dependencyTarget = projectTarget as? Target {\n                                if topLevelTarget.platform == dependencyTarget.platform {\n                                    queue.append(projectTarget)\n                                }\n                            } else {\n                                queue.append(projectTarget)\n                            }\n                        }\n                    default:\n                        break\n                    }\n                }\n            } else if let aggregateTarget = projectTarget as? AggregateTarget {\n                for dependencyName in aggregateTarget.targets {\n                    if let projectTarget = project.getProjectTarget(dependencyName) {\n                        queue.append(projectTarget)\n                    }\n                }\n            }\n\n            visitedTargets.update(with: projectTarget.name)\n        }\n\n        return frameworks.sorted(by: { $0.dependency.reference < $1.dependency.reference })\n    }\n\n    /// Reads the .version file generated for a given Carthage dependency\n    /// and returns a list of its related dependencies including self\n    func relatedDependencies(for dependency: Dependency, in platform: Platform) -> [Dependency] {\n        guard\n            case .carthage = dependency.type,\n            let versionFile = try? versionLoader.getVersionFile(for: dependency.reference) else {\n            // No .version file or we've been unable to parse\n            // so fail gracefully by returning the main dependency\n            return [dependency]\n        }\n        return versionFile.frameworks(for: platform)\n            .map { Dependency(\n                type: dependency.type,\n                reference: $0,\n                embed: dependency.embed,\n                codeSign: dependency.codeSign,\n                link: dependency.link,\n                implicit: dependency.implicit,\n                weakLink: dependency.weakLink\n            ) }\n            .sorted(by: { $0.reference < $1.reference })\n    }\n}\n\nextension Platform {\n\n    public var carthageName: String {\n        switch self {\n        case .auto:\n            // This is a dummy value\n            return \"auto\"\n        case .iOS:\n            return \"iOS\"\n        case .tvOS:\n            return \"tvOS\"\n        case .watchOS:\n            return \"watchOS\"\n        case .macOS:\n            return \"Mac\"\n        case .visionOS:\n            // This is a dummy value because Carthage doesn't support visionOS.\n            return \"visionOS\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/CarthageVersionLoader.swift",
    "content": "//\n//  CarthageVersionLoader.swift\n//  XcodeGenKit\n//\n//  Created by Yonas Kolb on 24/3/19.\n//\n\nimport Foundation\nimport PathKit\nimport ProjectSpec\n\nclass Mutex<T> {\n    var value: T\n    var semaphore: DispatchSemaphore = DispatchSemaphore(value: 1)\n\n    init(_ value: T) {\n        self.value = value\n    }\n\n    func get<U>(closure: (inout T) throws -> (U)) rethrows -> U {\n        semaphore.wait()\n        defer { semaphore.signal() }\n        return try closure(&value)\n    }\n\n    func get(closure: (inout T) -> Void) {\n        semaphore.wait()\n        closure(&value)\n        semaphore.signal()\n    }\n}\n\n// Note: this class can be accessed on multiple threads. It must therefore stay thread-safe.\nclass CarthageVersionLoader {\n\n    private let buildPath: Path\n    private var cachedFilesMutex: Mutex<[String: CarthageVersionFile]> = Mutex([:])\n\n    init(buildPath: Path) {\n        self.buildPath = buildPath\n    }\n\n    func getVersionFile(for dependency: String) throws -> CarthageVersionFile {\n        return try cachedFilesMutex.get { cachedFiles in\n            if let versionFile = cachedFiles[dependency] {\n                return versionFile\n            }\n            let filePath = buildPath + \".\\(dependency).version\"\n            let data = try filePath.read()\n            let carthageVersionFile = try JSONDecoder().decode(CarthageVersionFile.self, from: data)\n            cachedFiles[dependency] = carthageVersionFile\n            return carthageVersionFile\n        }\n    }\n}\n\nstruct CarthageVersionFile: Decodable {\n\n    private struct Reference: Decodable, Equatable {\n        public let name: String\n        public let hash: String\n    }\n\n    private let data: [Platform: [String]]\n\n    internal init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: Platform.self)\n        data = try Platform.allCases.reduce(into: [:]) { data, platform in\n            let references = try container.decodeIfPresent([Reference].self, forKey: platform) ?? []\n            let frameworks = Set(references.map { $0.name }).sorted()\n            data[platform] = frameworks\n        }\n    }\n}\n\nextension Platform: Swift.CodingKey {\n\n    public var stringValue: String {\n        carthageName\n    }\n}\n\nextension CarthageVersionFile {\n    func frameworks(for platform: Platform) -> [String] {\n        data[platform] ?? []\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/FileWriter.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport XcodeProj\n\npublic class FileWriter {\n\n    let project: Project\n\n    public init(project: Project) {\n        self.project = project\n    }\n\n    public func writeXcodeProject(_ xcodeProject: XcodeProj, to projectPath: Path? = nil) throws {\n        let projectPath = projectPath ?? project.defaultProjectPath\n        let tempPath = try Path.processUniqueTemporary() + \"XcodeGen\"\n        try? tempPath.delete()\n        if projectPath.exists {\n            try projectPath.copy(tempPath)\n        }\n        try xcodeProject.write(path: tempPath, override: true)\n        try? projectPath.delete()\n        try tempPath.copy(projectPath)\n        try? tempPath.delete()\n    }\n\n    public func writePlists() throws {\n\n        let infoPlistGenerator = InfoPlistGenerator()\n        for target in project.targets {\n            // write Info.plist\n            if let plist = target.info {\n                let properties = infoPlistGenerator.generateProperties(for: target).merged(plist.properties)\n                try writePlist(properties, path: plist.path)\n            }\n\n            // write entitlements\n            if let plist = target.entitlements {\n                try writePlist(plist.properties, path: plist.path)\n            }\n        }\n    }\n\n    private func writePlist(_ plist: [String: Any], path: String) throws {\n        let path = project.basePath + path\n        if path.exists, let data: Data = try? path.read(),\n            let existingPlist = (try? PropertyListSerialization.propertyList(from: data, format: nil)) as? [String: Any], NSDictionary(dictionary: plist).isEqual(to: existingPlist) {\n            // file is the same\n            return\n        }\n        let data = try PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0)\n        try? path.delete()\n        try path.parent().mkpath()\n        try path.write(data)\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/InfoPlistGenerator.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\n\npublic class InfoPlistGenerator {\n\n    /**\n     Default info plist attributes taken from:\n     /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Base/Base_DefinitionsInfoPlist.xctemplate/TemplateInfo.plist\n     */\n    private func generateDefaultInfoPlist(for target: Target) -> [String: Any] {\n        var dictionary: [String: Any] = [:]\n        dictionary[\"CFBundleIdentifier\"] = \"$(PRODUCT_BUNDLE_IDENTIFIER)\"\n        dictionary[\"CFBundleInfoDictionaryVersion\"] = \"6.0\"\n\n        dictionary[\"CFBundleName\"] = \"$(PRODUCT_NAME)\"\n        dictionary[\"CFBundleDevelopmentRegion\"] = \"$(DEVELOPMENT_LANGUAGE)\"\n        dictionary[\"CFBundleShortVersionString\"] = \"1.0\"\n        dictionary[\"CFBundleVersion\"] = \"1\"\n\n        // Bundles should not contain any CFBundleExecutable otherwise they will be rejected when uploading.\n        if target.type != .bundle {\n            dictionary[\"CFBundleExecutable\"] = \"$(EXECUTABLE_NAME)\"\n        }\n\n        return dictionary\n    }\n\n    public func generateProperties(for target: Target) -> [String: Any] {\n        var targetInfoPlist = generateDefaultInfoPlist(for: target)\n        switch target.type {\n        case .uiTestBundle,\n             .unitTestBundle:\n            targetInfoPlist[\"CFBundlePackageType\"] = \"BNDL\"\n        case .application,\n             .watch2App:\n            targetInfoPlist[\"CFBundlePackageType\"] = \"APPL\"\n        case .framework:\n            targetInfoPlist[\"CFBundlePackageType\"] = \"FMWK\"\n        case .bundle:\n            targetInfoPlist[\"CFBundlePackageType\"] = \"BNDL\"\n        case .xpcService,\n             .appExtension:\n            targetInfoPlist[\"CFBundlePackageType\"] = \"XPC!\"\n        default: break\n        }\n        return targetInfoPlist\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/PBXProjGenerator.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport XcodeProj\nimport Yams\nimport Version\n\npublic class PBXProjGenerator {\n\n    let project: Project\n\n    let pbxProj: PBXProj\n    let projectDirectory: Path?\n    let carthageResolver: CarthageDependencyResolver\n\n    public static let copyFilesActionMask: UInt = 8\n\n    var sourceGenerator: SourceGenerator!\n\n    var targetObjects: [String: PBXTarget] = [:]\n    var targetAggregateObjects: [String: PBXAggregateTarget] = [:]\n    var targetFileReferences: [String: PBXFileReference] = [:]\n    var sdkFileReferences: [String: PBXFileReference] = [:]\n    var packageReferences: [String: XCRemoteSwiftPackageReference] = [:]\n    var localPackageReferences: [String: XCLocalSwiftPackageReference] = [:]\n\n    var carthageFrameworksByPlatform: [String: Set<PBXFileElement>] = [:]\n    var frameworkFiles: [PBXFileElement] = []\n    var bundleFiles: [PBXFileElement] = []\n\n    var generated = false\n\n    private var projects: [ProjectReference: PBXProj] = [:]\n\n    public init(project: Project, projectDirectory: Path? = nil) {\n        self.project = project\n        carthageResolver = CarthageDependencyResolver(project: project)\n        pbxProj = PBXProj(rootObject: nil, objectVersion: project.objectVersion)\n        self.projectDirectory = projectDirectory\n        sourceGenerator = SourceGenerator(project: project,\n                                          pbxProj: pbxProj,\n                                          projectDirectory: projectDirectory)\n    }\n\n    @discardableResult\n    func addObject<T: PBXObject>(_ object: T, context: String? = nil) -> T {\n        pbxProj.add(object: object)\n        object.context = context\n        return object\n    }\n\n    public func generate() throws -> PBXProj {\n        if generated {\n            fatalError(\"Cannot use PBXProjGenerator to generate more than once\")\n        }\n        generated = true\n\n        for group in project.fileGroups {\n            try sourceGenerator.getFileGroups(path: group)\n        }\n\n        let buildConfigs: [XCBuildConfiguration] = project.configs.map { config in\n            let buildSettings = project.getProjectBuildSettings(config: config)\n            var baseConfiguration: PBXFileReference?\n            if let configPath = project.configFiles[config.name],\n                let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference {\n                baseConfiguration = fileReference\n            }\n            let buildConfig = addObject(\n                XCBuildConfiguration(\n                    name: config.name,\n                    buildSettings: buildSettings\n                )\n            )\n            buildConfig.baseConfiguration = baseConfiguration\n            return buildConfig\n        }\n\n        let configName = project.options.defaultConfig ?? buildConfigs.first?.name ?? \"\"\n        let buildConfigList = addObject(\n            XCConfigurationList(\n                buildConfigurations: buildConfigs,\n                defaultConfigurationName: configName\n            )\n        )\n\n        var derivedGroups: [PBXGroup] = []\n\n        let mainGroup = addObject(\n            PBXGroup(\n                children: [],\n                sourceTree: .group,\n                usesTabs: project.options.usesTabs,\n                indentWidth: project.options.indentWidth,\n                tabWidth: project.options.tabWidth\n            )\n        )\n\n        let developmentRegion = project.options.developmentLanguage ?? \"en\"\n        let pbxProject = addObject(\n            PBXProject(\n                name: project.name,\n                buildConfigurationList: buildConfigList,\n                compatibilityVersion: project.compatibilityVersion,\n                preferredProjectObjectVersion: project.preferredProjectObjectVersion.map { Int($0) },\n                minimizedProjectReferenceProxies: project.minimizedProjectReferenceProxies,\n                mainGroup: mainGroup,\n                developmentRegion: developmentRegion\n            )\n        )\n\n        pbxProj.rootObject = pbxProject\n\n        for target in project.targets {\n            let targetObject: PBXTarget\n\n            if target.isLegacy {\n                targetObject = PBXLegacyTarget(\n                    name: target.name,\n                    buildToolPath: target.legacy?.toolPath,\n                    buildArgumentsString: target.legacy?.arguments,\n                    passBuildSettingsInEnvironment: target.legacy?.passSettings ?? false,\n                    buildWorkingDirectory: target.legacy?.workingDirectory,\n                    buildPhases: []\n                )\n            } else {\n                targetObject = PBXNativeTarget(name: target.name, buildPhases: [])\n            }\n\n            targetObjects[target.name] = addObject(targetObject)\n\n            var explicitFileType: String?\n            var lastKnownFileType: String?\n            let fileType = Xcode.fileType(path: Path(target.filename), productType: target.type)\n            if target.platform == .macOS || target.platform == .watchOS || target.type == .framework || target.type == .extensionKitExtension {\n                explicitFileType = fileType\n            } else {\n                lastKnownFileType = fileType\n            }\n\n            if !target.isLegacy {\n                let fileReference = addObject(\n                    PBXFileReference(\n                        sourceTree: .buildProductsDir,\n                        explicitFileType: explicitFileType,\n                        lastKnownFileType: lastKnownFileType,\n                        path: target.filename,\n                        includeInIndex: false\n                    ),\n                    context: target.name\n                )\n\n                targetFileReferences[target.name] = fileReference\n            }\n        }\n\n        for target in project.aggregateTargets {\n\n            let aggregateTarget = addObject(\n                PBXAggregateTarget(\n                    name: target.name,\n                    productName: target.name\n                )\n            )\n            targetAggregateObjects[target.name] = aggregateTarget\n        }\n\n        for (name, package) in project.packages {\n            switch package {\n            case let .remote(url, versionRequirement):\n                let packageReference = XCRemoteSwiftPackageReference(repositoryURL: url, versionRequirement: versionRequirement)\n                packageReferences[name] = packageReference\n                addObject(packageReference)\n            case let .local(path, group, excludeFromProject):\n                let packageReference = XCLocalSwiftPackageReference(relativePath: path)\n                localPackageReferences[name] = packageReference\n\n                if !excludeFromProject {\n                    addObject(packageReference)\n                    try sourceGenerator.createLocalPackage(path: Path(path), group: group.map { Path($0) })\n                }\n            }\n        }\n\n        let productGroup = addObject(\n            PBXGroup(\n                children: targetFileReferences.valueArray,\n                sourceTree: .group,\n                name: \"Products\"\n            )\n        )\n        derivedGroups.append(productGroup)\n        pbxProject.productsGroup = productGroup\n\n        let sortedProjectReferences = project.projectReferences.sorted { $0.name < $1.name }\n        let subprojectFileReferences: [PBXFileReference] = sortedProjectReferences.map { projectReference in\n            let projectPath = Path(projectReference.path)\n\n            return addObject(\n                PBXFileReference(\n                    sourceTree: .group,\n                    name: projectReference.name,\n                    lastKnownFileType: Xcode.fileType(path: projectPath),\n                    path: projectPath.normalize().string\n                )\n            )\n        }\n        if subprojectFileReferences.count > 0 {\n            let subprojectsGroups = addObject(\n                PBXGroup(\n                    children: subprojectFileReferences,\n                    sourceTree: .group,\n                    name: \"Projects\"\n                )\n            )\n            derivedGroups.append(subprojectsGroups)\n\n            let subprojects: [[String: PBXFileElement]] = subprojectFileReferences.map { projectReference in\n                let group = addObject(\n                    PBXGroup(\n                        children: [],\n                        sourceTree: .group,\n                        name: \"Products\"\n                    )\n                )\n                return [\n                    \"ProductGroup\": group,\n                    \"ProjectRef\": projectReference,\n                ]\n            }\n\n            pbxProject.projects = subprojects\n        }\n\n        try project.targets.forEach(generateTarget)\n        try project.aggregateTargets.forEach(generateAggregateTarget)\n\n        if !carthageFrameworksByPlatform.isEmpty {\n            var platforms: [PBXGroup] = []\n            for (platform, files) in carthageFrameworksByPlatform {\n                let platformGroup: PBXGroup = addObject(\n                    PBXGroup(\n                        children: Array(files),\n                        sourceTree: .group,\n                        path: platform\n                    )\n                )\n                platforms.append(platformGroup)\n            }\n            let carthageGroup = addObject(\n                PBXGroup(\n                    children: platforms,\n                    sourceTree: .group,\n                    name: \"Carthage\",\n                    path: carthageResolver.buildPath\n                )\n            )\n            frameworkFiles.append(carthageGroup)\n        }\n\n        if !frameworkFiles.isEmpty {\n            let group = addObject(\n                PBXGroup(\n                    children: frameworkFiles,\n                    sourceTree: .group,\n                    name: \"Frameworks\"\n                )\n            )\n            derivedGroups.append(group)\n        }\n\n        if !bundleFiles.isEmpty {\n            let group = addObject(\n                PBXGroup(\n                    children: bundleFiles,\n                    sourceTree: .group,\n                    name: \"Bundles\"\n                )\n            )\n            derivedGroups.append(group)\n        }\n\n        mainGroup.children = Array(sourceGenerator.rootGroups)\n        sortGroups(group: mainGroup)\n        setupGroupOrdering(group: mainGroup)\n        // add derived groups at the end\n        derivedGroups.forEach(sortGroups)\n        mainGroup.children += derivedGroups\n            .sorted(by: PBXFileElement.sortByNamePath)\n            .map { $0 }\n\n        let assetTags = Set(project.targets\n            .map { target in\n                target.sources.map { $0.resourceTags }.flatMap { $0 }\n            }.flatMap { $0 }\n        ).sorted()\n\n        var projectAttributes: [String: ProjectAttribute] = [\n            \"BuildIndependentTargetsInParallel\": \"YES\"\n        ]\n        for (key, value) in project.attributes {\n            projectAttributes[key] = ProjectAttribute(any: value)\n        }\n\n        // Set default LastUpgradeCheck if user did not specify a valid string value\n        let lastUpgradeKey = \"LastUpgradeCheck\"\n        if !(project.attributes[lastUpgradeKey] is String) {\n            projectAttributes[lastUpgradeKey] = .string(project.xcodeVersion)\n        }\n\n        if !assetTags.isEmpty {\n            projectAttributes[\"knownAssetTags\"] = .array(assetTags)\n        }\n\n        var knownRegions = Set(sourceGenerator.knownRegions)\n        knownRegions.insert(developmentRegion)\n        if project.options.useBaseInternationalization {\n            knownRegions.insert(\"Base\")\n        }\n        pbxProject.knownRegions = knownRegions.sorted()\n\n        pbxProject.remotePackages = packageReferences.sorted { $0.key < $1.key }.map { $1 }\n        pbxProject.localPackages = localPackageReferences.sorted { $0.key < $1.key }.map { $1 }\n\n        let allTargets: [PBXTarget] = targetObjects.valueArray + targetAggregateObjects.valueArray\n        pbxProject.targets = allTargets\n            .sorted { $0.name < $1.name }\n        pbxProject.attributes = projectAttributes\n        pbxProject.targetAttributes = generateTargetAttributes()\n        return pbxProj\n    }\n\n    func generateAggregateTarget(_ target: AggregateTarget) throws {\n\n        let aggregateTarget = targetAggregateObjects[target.name]!\n\n        let configs: [XCBuildConfiguration] = project.configs.map { config in\n\n            let buildSettings = project.getBuildSettings(settings: target.settings, config: config)\n\n            var baseConfiguration: PBXFileReference?\n            if let configPath = target.configFiles[config.name] {\n                baseConfiguration = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference\n            }\n            let buildConfig = XCBuildConfiguration(\n                name: config.name,\n                baseConfiguration: baseConfiguration,\n                buildSettings: buildSettings\n            )\n            return addObject(buildConfig)\n        }\n\n        var dependencies = target.targets.map { generateTargetDependency(from: target.name, to: $0, platform: nil, platforms: nil) }\n\n        let defaultConfigurationName = project.options.defaultConfig ?? project.configs.first?.name ?? \"\"\n        let buildConfigList = addObject(XCConfigurationList(\n            buildConfigurations: configs,\n            defaultConfigurationName: defaultConfigurationName\n        ))\n\n        var buildPhases: [PBXBuildPhase] = []\n        buildPhases += try target.buildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }\n\n        let packagePluginDependencies = makePackagePluginDependency(for: target)\n        dependencies.append(contentsOf: packagePluginDependencies)\n\n        aggregateTarget.buildPhases = buildPhases\n        aggregateTarget.buildConfigurationList = buildConfigList\n        aggregateTarget.dependencies = dependencies\n    }\n\n    func generateTargetDependency(from: String, to target: String, platform: String?, platforms: [String]?) -> PBXTargetDependency {\n        guard let targetObject = targetObjects[target] ?? targetAggregateObjects[target] else {\n            fatalError(\"Target dependency not found: from ( \\(from) ) to ( \\(target) )\")\n        }\n\n        let targetProxy = addObject(\n            PBXContainerItemProxy(\n                containerPortal: .project(pbxProj.rootObject!),\n                remoteGlobalID: .object(targetObject),\n                proxyType: .nativeTarget,\n                remoteInfo: target\n            )\n        )\n\n        let targetDependency = addObject(\n            PBXTargetDependency(\n                platformFilter: platform,\n                platformFilters: platforms,\n                target: targetObject,\n                targetProxy: targetProxy\n            )\n        )\n        return targetDependency\n    }\n\n    func generateExternalTargetDependency(from: String, to target: String, in project: String, platform: Platform) throws -> (PBXTargetDependency, Target, PBXReferenceProxy) {\n        guard let projectReference = self.project.getProjectReference(project) else {\n            fatalError(\"project '\\(project)' not found\")\n        }\n\n        let pbxProj = try getPBXProj(from: projectReference)\n\n        guard let targetObject = pbxProj.targets(named: target).first else {\n            fatalError(\"target '\\(target)' not found in project '\\(project)'\")\n        }\n\n        let projectFileReferenceIndex = self.pbxProj.rootObject!\n            .projects\n            .map { $0[\"ProjectRef\"] as? PBXFileReference }\n            .firstIndex { $0?.path == Path(projectReference.path).normalize().string }\n\n        guard let index = projectFileReferenceIndex,\n            let projectFileReference = self.pbxProj.rootObject?.projects[index][\"ProjectRef\"] as? PBXFileReference,\n            let productsGroup = self.pbxProj.rootObject?.projects[index][\"ProductGroup\"] as? PBXGroup else {\n            fatalError(\"Missing subproject file reference\")\n        }\n\n        let targetProxy = addObject(\n            PBXContainerItemProxy(\n                containerPortal: .fileReference(projectFileReference),\n                remoteGlobalID: .object(targetObject),\n                proxyType: .nativeTarget,\n                remoteInfo: target\n            )\n        )\n\n        let productProxy = PBXContainerItemProxy(\n            containerPortal: .fileReference(projectFileReference),\n            remoteGlobalID: targetObject.product.flatMap(PBXContainerItemProxy.RemoteGlobalID.object),\n            proxyType: .reference,\n            remoteInfo: target\n        )\n\n        var path = targetObject.productNameWithExtension()\n\n        if targetObject.productType == .staticLibrary,\n            let tmpPath = path, !tmpPath.hasPrefix(\"lib\") {\n            path = \"lib\\(tmpPath)\"\n        }\n\n        let productReferenceProxyFileType = targetObject.productNameWithExtension()\n            .flatMap { Xcode.fileType(path: Path($0)) }\n\n        let existingValue = self.pbxProj.referenceProxies.first { referenceProxy in\n            referenceProxy.path == path &&\n            referenceProxy.remote == productProxy &&\n            referenceProxy.sourceTree == .buildProductsDir &&\n            referenceProxy.fileType == productReferenceProxyFileType\n        }\n\n        let productReferenceProxy: PBXReferenceProxy\n        if let existingValue = existingValue {\n            productReferenceProxy = existingValue\n        } else {\n            addObject(productProxy)\n            productReferenceProxy = addObject(\n                PBXReferenceProxy(\n                    fileType: productReferenceProxyFileType,\n                    path: path,\n                    remote: productProxy,\n                    sourceTree: .buildProductsDir\n                )\n            )\n\n            productsGroup.children.append(productReferenceProxy)\n        }\n\n\n        let targetDependency = addObject(\n            PBXTargetDependency(\n                name: targetObject.name,\n                targetProxy: targetProxy\n            )\n        )\n\n        guard let buildConfigurations = targetObject.buildConfigurationList?.buildConfigurations,\n            let defaultConfigurationName = targetObject.buildConfigurationList?.defaultConfigurationName,\n            let defaultConfiguration = buildConfigurations.first(where: { $0.name == defaultConfigurationName }) ?? buildConfigurations.first else {\n\n            fatalError(\"Missing target info\")\n        }\n\n        let productType: PBXProductType = targetObject.productType ?? .none\n        let buildSettings = defaultConfiguration.buildSettings\n        let settings = Settings(buildSettings: buildSettings, configSettings: [:], groups: [])\n        let deploymentTargetString = buildSettings[platform.deploymentTargetSetting]?.stringValue\n        let deploymentTarget = deploymentTargetString == nil ? nil : try Version.parse(deploymentTargetString!)\n        let requiresObjCLinking = buildSettings[\"OTHER_LDFLAGS\"]?.stringValue?.contains(\"-ObjC\") ?? (productType == .staticLibrary)\n        let dependencyTarget = Target(\n            name: targetObject.name,\n            type: productType,\n            platform: platform,\n            productName: targetObject.productName,\n            deploymentTarget: deploymentTarget,\n            settings: settings,\n            requiresObjCLinking: requiresObjCLinking\n        )\n\n        return (targetDependency, dependencyTarget, productReferenceProxy)\n    }\n\n    func generateBuildScript(targetName: String, buildScript: BuildScript) throws -> PBXShellScriptBuildPhase {\n\n        let shellScript: String\n        switch buildScript.script {\n        case let .path(path):\n            shellScript = try (project.basePath + path).read()\n        case let .script(script):\n            shellScript = script\n        }\n\n        let shellScriptPhase = PBXShellScriptBuildPhase(\n            name: buildScript.name ?? \"Run Script\",\n            inputPaths: buildScript.inputFiles,\n            outputPaths: buildScript.outputFiles,\n            inputFileListPaths: buildScript.inputFileLists,\n            outputFileListPaths: buildScript.outputFileLists,\n            shellPath: buildScript.shell ?? \"/bin/sh\",\n            shellScript: shellScript,\n            runOnlyForDeploymentPostprocessing: buildScript.runOnlyWhenInstalling,\n            showEnvVarsInLog: buildScript.showEnvVars,\n            alwaysOutOfDate: !buildScript.basedOnDependencyAnalysis,\n            dependencyFile: buildScript.discoveredDependencyFile\n        )\n        return addObject(shellScriptPhase)\n    }\n\n    func generateCopyFiles(targetName: String, copyFiles: BuildPhaseSpec.CopyFilesSettings, buildPhaseFiles: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {\n        let copyFilesBuildPhase = PBXCopyFilesBuildPhase(\n            dstPath: copyFiles.subpath,\n            dstSubfolderSpec: copyFiles.destination.destination,\n            files: buildPhaseFiles\n        )\n        return addObject(copyFilesBuildPhase)\n    }\n\n    func generateTargetAttributes() -> [PBXTarget: [String: ProjectAttribute]] {\n\n        var targetAttributes: [PBXTarget: [String: ProjectAttribute]] = [:]\n\n        let testTargets = pbxProj.nativeTargets.filter { $0.productType == .uiTestBundle || $0.productType == .unitTestBundle }\n        for testTarget in testTargets {\n\n            // look up TEST_TARGET_NAME build setting\n            func testTargetName(_ target: PBXTarget) -> String? {\n                guard let buildConfigurations = target.buildConfigurationList?.buildConfigurations else { return nil }\n\n                return buildConfigurations\n                    .compactMap { $0.buildSettings[\"TEST_TARGET_NAME\"]?.stringValue }\n                    .first\n            }\n\n            guard let name = testTargetName(testTarget) else { continue }\n            guard let target = self.pbxProj.targets(named: name).first else { continue }\n\n            targetAttributes[testTarget, default: [:]].merge([\"TestTargetID\": .targetReference(target)])\n        }\n\n        func generateTargetAttributes(_ target: ProjectTarget, pbxTarget: PBXTarget) {\n            if !target.attributes.isEmpty {\n                targetAttributes[pbxTarget, default: [:]].merge(target.attributes.mapValues { ProjectAttribute(any: $0) })\n            }\n\n            func getSingleBuildSetting(_ setting: String) -> String? {\n                let settings = project.configs.compactMap {\n                    project.getCombinedBuildSetting(setting, target: target, config: $0)?.stringValue\n                }\n                guard settings.count == project.configs.count,\n                    let firstSetting = settings.first,\n                    settings.filter({ $0 == firstSetting }).count == settings.count else {\n                    return nil\n                }\n                return firstSetting\n            }\n\n            func setTargetAttribute(attribute: String, buildSetting: String) {\n                if let setting = getSingleBuildSetting(buildSetting) {\n                    targetAttributes[pbxTarget, default: [:]].merge([attribute: .string(setting)])\n                }\n            }\n\n            setTargetAttribute(attribute: \"ProvisioningStyle\", buildSetting: \"CODE_SIGN_STYLE\")\n            setTargetAttribute(attribute: \"DevelopmentTeam\", buildSetting: \"DEVELOPMENT_TEAM\")\n        }\n\n        for target in project.aggregateTargets {\n            guard let pbxTarget = targetAggregateObjects[target.name] else {\n                continue\n            }\n            generateTargetAttributes(target, pbxTarget: pbxTarget)\n        }\n\n        for target in project.targets {\n            guard let pbxTarget = targetObjects[target.name] else {\n                continue\n            }\n            generateTargetAttributes(target, pbxTarget: pbxTarget)\n        }\n\n        return targetAttributes\n    }\n\n    func sortGroups(group: PBXGroup) {\n        // sort children\n        let children = group.children\n            .sorted { child1, child2 in\n                let sortOrder1 = child1.getSortOrder(groupSortPosition: project.options.groupSortPosition)\n                let sortOrder2 = child2.getSortOrder(groupSortPosition: project.options.groupSortPosition)\n\n                if sortOrder1 != sortOrder2 {\n                    return sortOrder1 < sortOrder2\n                } else {\n                    if (child1.name, child1.path) != (child2.name, child2.path) {\n                        return PBXFileElement.sortByNamePath(child1, child2)\n                    } else {\n                        return child1.context ?? \"\" < child2.context ?? \"\"\n                    }\n                }\n            }\n        group.children = children.filter { $0 != group }\n\n        // sort sub groups\n        let childGroups = group.children.compactMap { $0 as? PBXGroup }\n        childGroups.forEach(sortGroups)\n    }\n\n    public func setupGroupOrdering(group: PBXGroup) {\n        let groupOrdering = project.options.groupOrdering.first { groupOrdering in\n            let groupName = group.nameOrPath\n\n            if groupName == groupOrdering.pattern {\n                return true\n            }\n\n            if let regex = groupOrdering.regex {\n                return regex.isMatch(to: groupName)\n            }\n\n            return false\n        }\n\n        if let order = groupOrdering?.order {\n            let files = group.children.filter { !$0.isGroupOrFolder }\n            var groups = group.children.filter {  $0.isGroupOrFolder }\n\n            var filteredGroups = [PBXFileElement]()\n\n            for groupName in order {\n                guard let group = groups.first(where: { $0.nameOrPath == groupName }) else {\n                    continue\n                }\n\n                filteredGroups.append(group)\n                groups.removeAll { $0 == group }\n            }\n\n            filteredGroups += groups\n\n            switch project.options.groupSortPosition {\n            case .top:\n                group.children = filteredGroups + files\n            case .bottom:\n                group.children = files + filteredGroups\n            default:\n                break\n            }\n        }\n\n        // sort sub groups\n        let childGroups = group.children.compactMap { $0 as? PBXGroup }\n        childGroups.forEach(setupGroupOrdering)\n    }\n\n    func getPBXProj(from reference: ProjectReference) throws -> PBXProj {\n        if let cachedProject = projects[reference] {\n            return cachedProject\n        }\n        let pbxproj = try XcodeProj(pathString: (project.basePath + Path(reference.path).normalize()).string).pbxproj\n        projects[reference] = pbxproj\n        return pbxproj\n    }\n\n    func generateTarget(_ target: Target) throws {\n        let carthageDependencies = carthageResolver.dependencies(for: target)\n\n        let infoPlistFiles: [Config: String] = getInfoPlists(for: target)\n        let sourceFileBuildPhaseOverrideSequence: [(Path, BuildPhaseSpec)] = Set(infoPlistFiles.values).map({ (project.basePath + $0, .none) })\n        let sourceFileBuildPhaseOverrides = Dictionary(uniqueKeysWithValues: sourceFileBuildPhaseOverrideSequence)\n        let sourceFiles = try sourceGenerator.getAllSourceFiles(targetType: target.type, sources: target.sources, buildPhases: sourceFileBuildPhaseOverrides)\n            .sorted { $0.path.lastComponent < $1.path.lastComponent }\n\n        var anyDependencyRequiresObjCLinking = false\n\n        var dependencies: [PBXTargetDependency] = []\n        var targetFrameworkBuildFiles: [PBXBuildFile] = []\n        var frameworkBuildPaths = Set<String>()\n        var customCopyDependenciesReferences: [PBXBuildFile] = []\n        var copyFilesBuildPhasesFiles: [BuildPhaseSpec.CopyFilesSettings: [PBXBuildFile]] = [:]\n        var copyFrameworksReferences: [PBXBuildFile] = []\n        var copyResourcesReferences: [PBXBuildFile] = []\n        var copyBundlesReferences: [PBXBuildFile] = []\n        var copyWatchReferences: [PBXBuildFile] = []\n        var packageDependencies: [XCSwiftPackageProductDependency] = []\n        var extensions: [PBXBuildFile] = []\n        var extensionKitExtensions: [PBXBuildFile] = []\n        var systemExtensions: [PBXBuildFile] = []\n        var appClips: [PBXBuildFile] = []\n        var carthageFrameworksToEmbed: [String] = []\n        var buildFileCopyPhases: [PBXBuildFile: BuildPhaseSpec.CopyFilesSettings] = [:]\n\n        let targetDependencies = (target.transitivelyLinkDependencies ?? project.options.transitivelyLinkDependencies) ?\n            getAllDependenciesPlusTransitiveNeedingEmbedding(target: target) : target.dependencies\n\n        let targetSupportsDirectEmbed = !(target.platform.requiresSimulatorStripping &&\n            (target.type.isApp || target.type == .watch2Extension))\n        let directlyEmbedCarthage = target.directlyEmbedCarthageDependencies ?? targetSupportsDirectEmbed\n\n        func getEmbedSettings(dependency: Dependency, codeSign: Bool) -> [String: BuildFileSetting] {\n            var embedAttributes: [String] = []\n            if codeSign {\n                embedAttributes.append(\"CodeSignOnCopy\")\n            }\n            if dependency.removeHeaders {\n                embedAttributes.append(\"RemoveHeadersOnCopy\")\n            }\n            return [\"ATTRIBUTES\": .array(embedAttributes)]\n        }\n\n        func getDependencyFrameworkSettings(dependency: Dependency) -> [String: BuildFileSetting]? {\n            var linkingAttributes: [String] = []\n            if dependency.weakLink {\n                linkingAttributes.append(\"Weak\")\n            }\n            return !linkingAttributes.isEmpty ? [\"ATTRIBUTES\": .array(linkingAttributes)] : nil\n        }\n\n        func processTargetDependency(_ dependency: Dependency, dependencyTarget: Target, embedFileReference: PBXFileElement?, platform: String?, platforms: [String]?) {\n            let dependencyLinkage = dependencyTarget.defaultLinkage\n            let link = dependency.link ??\n                ((dependencyLinkage == .dynamic && target.type != .staticLibrary) ||\n                    (dependencyLinkage == .static && target.type.isExecutable))\n\n            if link, let dependencyFile = embedFileReference {\n                let pbxBuildFile = PBXBuildFile(file: dependencyFile, settings: getDependencyFrameworkSettings(dependency: dependency))\n                pbxBuildFile.platformFilter = platform\n                pbxBuildFile.platformFilters = platforms\n                let buildFile = addObject(pbxBuildFile)\n                targetFrameworkBuildFiles.append(buildFile)\n\n                if !anyDependencyRequiresObjCLinking\n                    && dependencyTarget.requiresObjCLinking ?? (dependencyTarget.type == .staticLibrary) {\n                    anyDependencyRequiresObjCLinking = true\n                }\n            }\n\n            let embed = dependency.embed ?? target.type.shouldEmbed(dependencyTarget)\n            if embed {\n                let pbxBuildFile = PBXBuildFile(\n                    file: embedFileReference,\n                    settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable)\n                )\n                pbxBuildFile.platformFilter = platform\n                pbxBuildFile.platformFilters = platforms\n                let embedFile = addObject(pbxBuildFile)\n\n                if let copyPhase = dependency.copyPhase {\n                    // custom copy takes precedence\n                    buildFileCopyPhases[embedFile] = copyPhase\n                    customCopyDependenciesReferences.append(embedFile)\n                } else if dependencyTarget.type.isExtension {\n                    if dependencyTarget.type == .extensionKitExtension {\n                        // embed extension kit extension\n                        extensionKitExtensions.append(embedFile)\n                    } else {\n                        // embed app extension\n                        extensions.append(embedFile)\n                    }\n                } else if dependencyTarget.type.isSystemExtension {\n                    // embed system extension\n                    systemExtensions.append(embedFile)\n                } else if dependencyTarget.type == .onDemandInstallCapableApplication {\n                    // embed app clip\n                    appClips.append(embedFile)\n                } else if dependencyTarget.type.isFramework {\n                    copyFrameworksReferences.append(embedFile)\n                } else if dependencyTarget.type.isApp && dependencyTarget.platform == .watchOS {\n                    copyWatchReferences.append(embedFile)\n                } else if dependencyTarget.type == .xpcService {\n                    copyFilesBuildPhasesFiles[.xpcServices, default: []].append(embedFile)\n                } else {\n                    copyResourcesReferences.append(embedFile)\n                }\n            }\n        }\n\n        for dependency in targetDependencies {\n\n            let embed = dependency.embed ?? target.shouldEmbedDependencies\n            let platform = makePlatformFilter(for: dependency.platformFilter)\n            let platforms = makeDestinationFilters(for: dependency.destinationFilters)\n            \n            switch dependency.type {\n            case .target:\n                let dependencyTargetReference = try TargetReference(dependency.reference)\n\n                switch dependencyTargetReference.location {\n                case .local:\n                    let dependencyTargetName = dependency.reference\n                    let targetDependency = generateTargetDependency(from: target.name, to: dependencyTargetName, platform: platform, platforms: platforms)\n                    dependencies.append(targetDependency)\n                    guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue }\n                    processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: targetFileReferences[dependencyTarget.name], platform: platform, platforms: platforms)\n                case .project(let dependencyProjectName):\n                    let dependencyTargetName = dependencyTargetReference.name\n                    let (targetDependency, dependencyTarget, dependencyProductProxy) = try generateExternalTargetDependency(from: target.name, to: dependencyTargetName, in: dependencyProjectName, platform: target.platform)\n                    dependencies.append(targetDependency)\n                    processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: dependencyProductProxy, platform: platform, platforms: platforms)\n                }\n\n            case .framework:\n                if !dependency.implicit {\n                    let buildPath = Path(dependency.reference).parent().string.quoted\n                    frameworkBuildPaths.insert(buildPath)\n                }\n\n                let fileReference: PBXFileElement\n                if dependency.implicit {\n                    fileReference = sourceGenerator.getFileReference(\n                        path: Path(dependency.reference),\n                        inPath: project.basePath,\n                        sourceTree: .buildProductsDir\n                    )\n                } else {\n                    fileReference = sourceGenerator.getFileReference(\n                        path: Path(dependency.reference),\n                        inPath: project.basePath\n                    )\n                }\n\n                if dependency.link ?? (target.type != .staticLibrary) {\n                    let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))\n                    pbxBuildFile.platformFilter = platform\n                    pbxBuildFile.platformFilters = platforms\n                    let buildFile = addObject(pbxBuildFile)\n\n                    targetFrameworkBuildFiles.append(buildFile)\n                }\n\n                if !frameworkFiles.contains(fileReference) {\n                    frameworkFiles.append(fileReference)\n                }\n\n                if embed {\n                    let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))\n                    pbxBuildFile.platformFilter = platform\n                    pbxBuildFile.platformFilters = platforms\n                    let embedFile = addObject(pbxBuildFile)\n                    \n                    if let copyPhase = dependency.copyPhase {\n                        buildFileCopyPhases[embedFile] = copyPhase\n                        customCopyDependenciesReferences.append(embedFile)\n                    } else {\n                        copyFrameworksReferences.append(embedFile)\n                    }\n                }\n            case .sdk(let root):\n\n                var dependencyPath = Path(dependency.reference)\n                if !dependency.reference.contains(\"/\") {\n                    switch dependencyPath.extension ?? \"\" {\n                    case \"framework\":\n                        dependencyPath = Path(\"System/Library/Frameworks\") + dependencyPath\n                    case \"tbd\":\n                        dependencyPath = Path(\"usr/lib\") + dependencyPath\n                    case \"dylib\":\n                        dependencyPath = Path(\"usr/lib\") + dependencyPath\n                    default: break\n                    }\n                }\n\n                let fileReference: PBXFileReference\n                if let existingFileReferences = sdkFileReferences[dependency.reference] {\n                    fileReference = existingFileReferences\n                } else {\n                    let sourceTree: PBXSourceTree\n                    if let root = root {\n                        sourceTree = .custom(root)\n                    } else {\n                        sourceTree = .sdkRoot\n                    }\n                    fileReference = addObject(\n                        PBXFileReference(\n                            sourceTree: sourceTree,\n                            name: dependencyPath.lastComponent,\n                            lastKnownFileType: Xcode.fileType(path: dependencyPath),\n                            path: dependencyPath.string\n                        )\n                    )\n                    sdkFileReferences[dependency.reference] = fileReference\n                    frameworkFiles.append(fileReference)\n                }\n\n                let pbxBuildFile = PBXBuildFile(\n                    file: fileReference,\n                    settings: getDependencyFrameworkSettings(dependency: dependency)\n                )\n                pbxBuildFile.platformFilter = platform\n                pbxBuildFile.platformFilters = platforms\n                let buildFile = addObject(pbxBuildFile)\n                targetFrameworkBuildFiles.append(buildFile)\n\n                if dependency.embed == true {\n                    let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))\n                    pbxBuildFile.platformFilter = platform\n                    pbxBuildFile.platformFilters = platforms\n                    let embedFile = addObject(pbxBuildFile)\n                    \n                    if let copyPhase = dependency.copyPhase {\n                        buildFileCopyPhases[embedFile] = copyPhase\n                        customCopyDependenciesReferences.append(embedFile)\n                    } else {\n                        copyFrameworksReferences.append(embedFile)\n                    }\n                }\n\n            case .carthage(let findFrameworks, let linkType):\n                let findFrameworks = findFrameworks ?? project.options.findCarthageFrameworks\n                let allDependencies = findFrameworks\n                    ? carthageResolver.relatedDependencies(for: dependency, in: target.platform) : [dependency]\n                allDependencies.forEach { dependency in\n\n                    let platformPath = Path(carthageResolver.buildPath(for: target.platform, linkType: linkType))\n                    var frameworkPath = platformPath + dependency.reference\n                    if frameworkPath.extension == nil {\n                        frameworkPath = Path(frameworkPath.string + \".framework\")\n                    }\n                    let fileReference = self.sourceGenerator.getFileReference(path: frameworkPath, inPath: platformPath)\n\n                    self.carthageFrameworksByPlatform[target.platform.carthageName, default: []].insert(fileReference)\n\n                    let isStaticLibrary = target.type == .staticLibrary\n                    let isCarthageStaticLink = dependency.carthageLinkType == .static\n                    if dependency.link ?? (!isStaticLibrary && !isCarthageStaticLink) {\n                        let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))\n                        pbxBuildFile.platformFilter = platform\n                        pbxBuildFile.platformFilters = platforms\n                        let buildFile = addObject(pbxBuildFile)\n                        targetFrameworkBuildFiles.append(buildFile)\n                    }\n                }\n            // Embedding handled by iterating over `carthageDependencies` below\n            case .package(let products):\n                let packageReference = packageReferences[dependency.reference]\n\n                // If package's reference is none and there is no specified package in localPackages,\n                // then ignore the package specified as dependency.\n                if packageReference == nil, localPackageReferences[dependency.reference] == nil {\n                    continue\n                }\n\n                func addPackageProductDependency(named productName: String) {\n                    let packageDependency = addObject(\n                        XCSwiftPackageProductDependency(productName: productName, package: packageReference)\n                    )\n\n                    // Add package dependency if linking is true.\n                    if dependency.link ?? true {\n                        packageDependencies.append(packageDependency)\n                    }\n\n                    let link = dependency.link ?? (target.type != .staticLibrary)\n                    if link {\n                        let file = PBXBuildFile(product: packageDependency, settings: getDependencyFrameworkSettings(dependency: dependency))\n                        file.platformFilter = platform\n                        file.platformFilters = platforms\n                        let buildFile = addObject(file)\n                        targetFrameworkBuildFiles.append(buildFile)\n                    } else {\n                        let targetDependency = addObject(\n                            PBXTargetDependency(platformFilter: platform, platformFilters: platforms, product: packageDependency)\n                        )\n                        dependencies.append(targetDependency)\n                    }\n\n                    if dependency.embed == true {\n                        let pbxBuildFile = PBXBuildFile(product: packageDependency,\n                        settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))\n                        pbxBuildFile.platformFilter = platform\n                        pbxBuildFile.platformFilters = platforms\n                        let embedFile = addObject(pbxBuildFile)\n\n                        if let copyPhase = dependency.copyPhase {\n                            buildFileCopyPhases[embedFile] = copyPhase\n                            customCopyDependenciesReferences.append(embedFile)\n                        } else {\n                            copyFrameworksReferences.append(embedFile)\n                        }\n                    }\n                }\n\n                if !products.isEmpty {\n                    for product in products {\n                        addPackageProductDependency(named: product)\n                    }\n                } else {\n                    addPackageProductDependency(named: dependency.reference)\n                }\n            case .bundle:\n                // Static and dynamic libraries can't copy resources\n                guard target.type != .staticLibrary && target.type != .dynamicLibrary else { break }\n\n                let fileReference = sourceGenerator.getFileReference(\n                    path: Path(dependency.reference),\n                    inPath: project.basePath,\n                    sourceTree: .buildProductsDir\n                )\n\n                let pbxBuildFile = PBXBuildFile(\n                    file: fileReference,\n                    settings: embed ? getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true) : nil\n                )\n                pbxBuildFile.platformFilter = platform\n                pbxBuildFile.platformFilters = platforms\n                let buildFile = addObject(pbxBuildFile)\n                copyBundlesReferences.append(buildFile)\n\n                if !bundleFiles.contains(fileReference) {\n                    bundleFiles.append(fileReference)\n                }\n            }\n        }\n\n        for carthageDependency in carthageDependencies {\n            let dependency = carthageDependency.dependency\n            let isFromTopLevelTarget = carthageDependency.isFromTopLevelTarget\n            let embed = dependency.embed ?? target.shouldEmbedCarthageDependencies\n\n            let platformPath = Path(carthageResolver.buildPath(for: target.platform, linkType: dependency.carthageLinkType ?? .default))\n            var frameworkPath = platformPath + dependency.reference\n            if frameworkPath.extension == nil {\n                frameworkPath = Path(frameworkPath.string + \".framework\")\n            }\n            let fileReference = sourceGenerator.getFileReference(path: frameworkPath, inPath: platformPath)\n\n            if dependency.carthageLinkType == .static {\n                guard isFromTopLevelTarget else { continue } // ignore transitive dependencies if static\n                let linkFile = addObject(\n                    PBXBuildFile(file: fileReference, settings: getDependencyFrameworkSettings(dependency: dependency))\n                )\n                targetFrameworkBuildFiles.append(linkFile)\n            } else if embed {\n                if directlyEmbedCarthage {\n                    let embedFile = addObject(\n                        PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))\n                    )\n                    if let copyPhase = dependency.copyPhase {\n                        buildFileCopyPhases[embedFile] = copyPhase\n                        customCopyDependenciesReferences.append(embedFile)\n                    } else {\n                        copyFrameworksReferences.append(embedFile)\n                    }\n                } else {\n                    carthageFrameworksToEmbed.append(dependency.reference)\n                }\n            }\n        }\n        \n        carthageFrameworksToEmbed = carthageFrameworksToEmbed.uniqued()\n\n        let packagePluginDependencies = makePackagePluginDependency(for: target)\n        dependencies.append(contentsOf: packagePluginDependencies)\n        \n        var buildPhases: [PBXBuildPhase] = []\n\n        func getBuildFilesForSourceFiles(_ sourceFiles: [SourceFile]) -> [PBXBuildFile] {\n            sourceFiles\n                .reduce(into: [SourceFile]()) { output, sourceFile in\n                    if !output.contains(where: { $0.fileReference === sourceFile.fileReference }) {\n                        output.append(sourceFile)\n                    }\n                }\n                .map { addObject($0.buildFile) }\n        }\n\n        func getBuildFilesForPhase(_ buildPhase: BuildPhase) -> [PBXBuildFile] {\n            let filteredSourceFiles = sourceFiles\n                .filter { $0.buildPhase?.buildPhase == buildPhase }\n            return getBuildFilesForSourceFiles(filteredSourceFiles)\n        }\n\n        func getBuildFilesForCopyFilesPhases() -> [BuildPhaseSpec.CopyFilesSettings: [PBXBuildFile]] {\n            var sourceFilesByCopyFiles: [BuildPhaseSpec.CopyFilesSettings: [SourceFile]] = [:]\n            for sourceFile in sourceFiles {\n                guard case let .copyFiles(copyFilesSettings)? = sourceFile.buildPhase else { continue }\n                sourceFilesByCopyFiles[copyFilesSettings, default: []].append(sourceFile)\n            }\n            return sourceFilesByCopyFiles.mapValues { getBuildFilesForSourceFiles($0) }\n        }\n\n        func getPBXCopyFilesBuildPhase(dstSubfolderSpec: PBXCopyFilesBuildPhase.SubFolder, dstPath: String = \"\", name: String, files: [PBXBuildFile]) -> PBXCopyFilesBuildPhase {\n            return PBXCopyFilesBuildPhase(\n                dstPath: dstPath,\n                dstSubfolderSpec: dstSubfolderSpec,\n                name: name,\n                buildActionMask: target.onlyCopyFilesOnInstall ? PBXProjGenerator.copyFilesActionMask : PBXBuildPhase.defaultBuildActionMask,\n                files: files,\n                runOnlyForDeploymentPostprocessing: target.onlyCopyFilesOnInstall ? true : false\n            )\n        }\n        \n        func splitCopyDepsByDestination(_ references: [PBXBuildFile]) -> [BuildPhaseSpec.CopyFilesSettings : [PBXBuildFile]] {\n\n            var retval = [BuildPhaseSpec.CopyFilesSettings : [PBXBuildFile]]()\n            for reference in references {\n\n                guard let key = buildFileCopyPhases[reference] else { continue }\n                var filesWithSameDestination = retval[key] ?? [PBXBuildFile]()\n                filesWithSameDestination.append(reference)\n                retval[key] = filesWithSameDestination\n            }\n            return retval\n        }\n        \n        copyFilesBuildPhasesFiles.merge(getBuildFilesForCopyFilesPhases()) { $0 + $1 }\n\n        buildPhases += try target.preBuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }\n\n        buildPhases += copyFilesBuildPhasesFiles\n            .filter { $0.key.phaseOrder == .preCompile }\n            .map { generateCopyFiles(targetName: target.name, copyFiles: $0, buildPhaseFiles: $1) }\n\n        let headersBuildPhaseFiles = getBuildFilesForPhase(.headers)\n        if !headersBuildPhaseFiles.isEmpty {\n            if target.type.isFramework || target.type == .dynamicLibrary {\n                let headersBuildPhase = addObject(PBXHeadersBuildPhase(files: headersBuildPhaseFiles))\n                buildPhases.append(headersBuildPhase)\n            } else {\n                headersBuildPhaseFiles.forEach { pbxProj.delete(object: $0) }\n            }\n        }\n\n        func addResourcesBuildPhase() {\n            let resourcesBuildPhaseFiles = getBuildFilesForPhase(.resources) + copyResourcesReferences\n            let hasSynchronizedRootGroups = sourceFiles.contains { $0.fileReference is PBXFileSystemSynchronizedRootGroup }\n            if !resourcesBuildPhaseFiles.isEmpty || hasSynchronizedRootGroups {\n                let resourcesBuildPhase = addObject(PBXResourcesBuildPhase(files: resourcesBuildPhaseFiles))\n                buildPhases.append(resourcesBuildPhase)\n            }\n        }\n\n        if target.putResourcesBeforeSourcesBuildPhase {\n            addResourcesBuildPhase()\n        }\n\n        let sourcesBuildPhaseFiles = getBuildFilesForPhase(.sources)\n        let shouldSkipSourcesBuildPhase = sourcesBuildPhaseFiles.isEmpty && target.type.canSkipCompileSourcesBuildPhase\n        if !shouldSkipSourcesBuildPhase {\n            let sourcesBuildPhase = addObject(PBXSourcesBuildPhase(files: sourcesBuildPhaseFiles))\n            buildPhases.append(sourcesBuildPhase)\n        }\n\n        buildPhases += try target.postCompileScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }\n\n        if !target.putResourcesBeforeSourcesBuildPhase {\n            addResourcesBuildPhase()\n        }\n\n        let swiftObjCInterfaceHeader = project.getCombinedBuildSetting(\"SWIFT_OBJC_INTERFACE_HEADER_NAME\", target: target, config: project.configs[0])?.stringValue\n        let swiftInstallObjCHeader = project.getBoolBuildSetting(\"SWIFT_INSTALL_OBJC_HEADER\", target: target, config: project.configs[0]) ?? true // Xcode default\n\n        if target.type == .staticLibrary\n            && swiftObjCInterfaceHeader != \"\"\n            && swiftInstallObjCHeader\n            && sourceFiles.contains(where: { $0.buildPhase == .sources && $0.path.extension == \"swift\" }) {\n\n            let inputPaths = [\"$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\"]\n            let outputPaths = [\"$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\"]\n            let script = addObject(\n                PBXShellScriptBuildPhase(\n                    name: \"Copy Swift Objective-C Interface Header\",\n                    inputPaths: inputPaths,\n                    outputPaths: outputPaths,\n                    shellPath: \"/bin/sh\",\n                    shellScript: \"ditto \\\"${SCRIPT_INPUT_FILE_0}\\\" \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\"\n                )\n            )\n            buildPhases.append(script)\n        }\n\n        buildPhases += copyFilesBuildPhasesFiles\n            .filter { $0.key.phaseOrder == .postCompile }\n            .map { generateCopyFiles(targetName: target.name, copyFiles: $0, buildPhaseFiles: $1) }\n\n        if !carthageFrameworksToEmbed.isEmpty {\n\n            let inputPaths = carthageFrameworksToEmbed\n                .map { \"$(SRCROOT)/\\(carthageResolver.buildPath(for: target.platform, linkType: .dynamic))/\\($0)\\($0.contains(\".\") ? \"\" : \".framework\")\" }\n            let outputPaths = carthageFrameworksToEmbed\n                .map { \"$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/\\($0)\\($0.contains(\".\") ? \"\" : \".framework\")\" }\n            let carthageExecutable = carthageResolver.executable\n            let carthageScript = addObject(\n                PBXShellScriptBuildPhase(\n                    name: \"Carthage\",\n                    inputPaths: inputPaths,\n                    outputPaths: outputPaths,\n                    shellPath: \"/bin/sh -l\",\n                    shellScript: \"\\(carthageExecutable) copy-frameworks\\n\"\n                )\n            )\n            buildPhases.append(carthageScript)\n        }\n\n        if !targetFrameworkBuildFiles.isEmpty {\n\n            let frameworkBuildPhase = addObject(\n                PBXFrameworksBuildPhase(files: targetFrameworkBuildFiles)\n            )\n            buildPhases.append(frameworkBuildPhase)\n        }\n\n        if !copyBundlesReferences.isEmpty {\n            let copyBundlesPhase = addObject(PBXCopyFilesBuildPhase(\n                dstSubfolderSpec: .resources,\n                name: \"Copy Bundle Resources\",\n                files: copyBundlesReferences\n            ))\n            buildPhases.append(copyBundlesPhase)\n        }\n\n        if !extensions.isEmpty {\n\n            let copyFilesPhase = addObject(\n                getPBXCopyFilesBuildPhase(dstSubfolderSpec: .plugins, name: \"Embed Foundation Extensions\", files: extensions)\n            )\n\n            buildPhases.append(copyFilesPhase)\n        }\n\n        if !extensionKitExtensions.isEmpty {\n\n            let copyFilesPhase = addObject(\n                getPBXCopyFilesBuildPhase(dstSubfolderSpec: .productsDirectory, dstPath: \"$(EXTENSIONS_FOLDER_PATH)\", name: \"Embed ExtensionKit Extensions\", files: extensionKitExtensions)\n            )\n            buildPhases.append(copyFilesPhase)\n        }\n\n        if !systemExtensions.isEmpty {\n\n            let copyFilesPhase = addObject(\n                // With parameters below the Xcode will show \"Destination: System Extensions\".\n                getPBXCopyFilesBuildPhase(dstSubfolderSpec: .productsDirectory, dstPath: \"$(SYSTEM_EXTENSIONS_FOLDER_PATH)\", name: \"Embed System Extensions\", files: systemExtensions)\n            )\n\n            buildPhases.append(copyFilesPhase)\n        }\n\n        if !appClips.isEmpty {\n\n            let copyFilesPhase = addObject(\n                PBXCopyFilesBuildPhase(\n                    dstPath: \"$(CONTENTS_FOLDER_PATH)/AppClips\",\n                    dstSubfolderSpec: .productsDirectory,\n                    name: \"Embed App Clips\",\n                    files: appClips\n                )\n            )\n\n            buildPhases.append(copyFilesPhase)\n        }\n\n        copyFrameworksReferences += getBuildFilesForPhase(.frameworks)\n        if !copyFrameworksReferences.isEmpty {\n\n            let copyFilesPhase = addObject(\n                getPBXCopyFilesBuildPhase(dstSubfolderSpec: .frameworks, name: \"Embed Frameworks\", files: copyFrameworksReferences)\n            )\n\n            buildPhases.append(copyFilesPhase)\n        }\n\n        if !customCopyDependenciesReferences.isEmpty {\n            \n            let splitted = splitCopyDepsByDestination(customCopyDependenciesReferences)\n            for (phase, references) in splitted {\n                \n                guard let destination = phase.destination.destination else { continue }\n                \n                let copyFilesPhase = addObject(\n                    getPBXCopyFilesBuildPhase(dstSubfolderSpec: destination, dstPath:phase.subpath, name: \"Embed Dependencies\", files: references)\n                )\n\n                buildPhases.append(copyFilesPhase)\n            }\n        }\n        \n        if !copyWatchReferences.isEmpty {\n\n            let copyFilesPhase = addObject(\n                PBXCopyFilesBuildPhase(\n                    dstPath: \"$(CONTENTS_FOLDER_PATH)/Watch\",\n                    dstSubfolderSpec: .productsDirectory,\n                    name: \"Embed Watch Content\",\n                    files: copyWatchReferences\n                )\n            )\n\n            buildPhases.append(copyFilesPhase)\n        }\n\n        let buildRules = target.buildRules.map { buildRule in\n            addObject(\n                PBXBuildRule(\n                    compilerSpec: buildRule.action.compilerSpec,\n                    fileType: buildRule.fileType.fileType,\n                    isEditable: true,\n                    filePatterns: buildRule.fileType.pattern,\n                    name: buildRule.name ?? \"Build Rule\",\n                    outputFiles: buildRule.outputFiles,\n                    outputFilesCompilerFlags: buildRule.outputFilesCompilerFlags,\n                    script: buildRule.action.script,\n                    runOncePerArchitecture: buildRule.runOncePerArchitecture\n                )\n            )\n        }\n\n        buildPhases += try target.postBuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }\n\n        let configs: [XCBuildConfiguration] = project.configs.map { config in\n            var buildSettings = project.getTargetBuildSettings(target: target, config: config)\n\n            // Set CODE_SIGN_ENTITLEMENTS\n            if let entitlements = target.entitlements {\n                buildSettings[\"CODE_SIGN_ENTITLEMENTS\"] = .string(entitlements.path)\n            }\n\n            // Set INFOPLIST_FILE based on the resolved value\n            if let infoPlistFile = infoPlistFiles[config] {\n                buildSettings[\"INFOPLIST_FILE\"] = .string(infoPlistFile)\n            }\n\n            // automatically calculate bundle id\n            if let bundleIdPrefix = project.options.bundleIdPrefix,\n                !project.targetHasBuildSetting(\"PRODUCT_BUNDLE_IDENTIFIER\", target: target, config: config) {\n                let characterSet = CharacterSet.alphanumerics.union(CharacterSet(charactersIn: \"-.\")).inverted\n                let escapedTargetName = target.name\n                    .replacingOccurrences(of: \"_\", with: \"-\")\n                    .components(separatedBy: characterSet)\n                    .joined(separator: \"\")\n                buildSettings[\"PRODUCT_BUNDLE_IDENTIFIER\"] = .string(bundleIdPrefix + \".\" + escapedTargetName)\n            }\n\n            // automatically set test target name\n            if target.type == .uiTestBundle,\n                !project.targetHasBuildSetting(\"TEST_TARGET_NAME\", target: target, config: config) {\n                for dependency in target.dependencies {\n                    if dependency.type == .target,\n                        let dependencyTarget = project.getTarget(dependency.reference),\n                        dependencyTarget.type.isApp {\n                        buildSettings[\"TEST_TARGET_NAME\"] = .string(dependencyTarget.name)\n                        break\n                    }\n                }\n            }\n\n            // automatically set TEST_HOST\n            if target.type == .unitTestBundle,\n                !project.targetHasBuildSetting(\"TEST_HOST\", target: target, config: config) {\n                for dependency in target.dependencies {\n                    if dependency.type == .target,\n                        let dependencyTarget = project.getTarget(dependency.reference),\n                        dependencyTarget.type.isApp {\n                        if dependencyTarget.platform == .macOS {\n                            buildSettings[\"TEST_HOST\"] = \"$(BUILT_PRODUCTS_DIR)/\\(dependencyTarget.productName).app/Contents/MacOS/\\(dependencyTarget.productName)\"\n                        } else {\n                            buildSettings[\"TEST_HOST\"] = \"$(BUILT_PRODUCTS_DIR)/\\(dependencyTarget.productName).app/\\(dependencyTarget.productName)\"\n                        }\n                        break\n                    }\n                }\n            }\n\n            // objc linkage\n            if anyDependencyRequiresObjCLinking {\n                let otherLinkingFlags = \"OTHER_LDFLAGS\"\n                let objCLinking = \"-ObjC\"\n                if var array = buildSettings[otherLinkingFlags]?.arrayValue {\n                    array.append(objCLinking)\n                    buildSettings[otherLinkingFlags] = .array(array)\n                } else if let string = buildSettings[otherLinkingFlags]?.stringValue {\n                    buildSettings[otherLinkingFlags] = .array([string, objCLinking])\n                } else {\n                    buildSettings[otherLinkingFlags] = .array([\"$(inherited)\", objCLinking])\n                }\n            }\n\n            // set Carthage search paths\n            let configFrameworkBuildPaths: [String]\n            if !carthageDependencies.isEmpty {\n                var carthagePlatformBuildPaths: Set<String> = []\n                if carthageDependencies.contains(where: { $0.dependency.carthageLinkType == .static }) {\n                    let carthagePlatformBuildPath = \"$(PROJECT_DIR)/\" + carthageResolver.buildPath(for: target.platform, linkType: .static)\n                    carthagePlatformBuildPaths.insert(carthagePlatformBuildPath)\n                }\n                if carthageDependencies.contains(where: { $0.dependency.carthageLinkType == .dynamic }) {\n                    let carthagePlatformBuildPath = \"$(PROJECT_DIR)/\" + carthageResolver.buildPath(for: target.platform, linkType: .dynamic)\n                    carthagePlatformBuildPaths.insert(carthagePlatformBuildPath)\n                }\n                configFrameworkBuildPaths = carthagePlatformBuildPaths.sorted() + frameworkBuildPaths.sorted()\n            } else {\n                configFrameworkBuildPaths = frameworkBuildPaths.sorted()\n            }\n\n            // set framework search paths\n            if !configFrameworkBuildPaths.isEmpty {\n                let frameworkSearchPaths = \"FRAMEWORK_SEARCH_PATHS\"\n                if var array = buildSettings[frameworkSearchPaths]?.arrayValue {\n                    array.append(contentsOf: configFrameworkBuildPaths)\n                    buildSettings[frameworkSearchPaths] = .array(array)\n                } else if let string = buildSettings[frameworkSearchPaths]?.stringValue {\n                    buildSettings[frameworkSearchPaths] = .array([string] + configFrameworkBuildPaths)\n                } else {\n                    buildSettings[frameworkSearchPaths] = .array([\"$(inherited)\"] + configFrameworkBuildPaths)\n                }\n            }\n\n            var baseConfiguration: PBXFileReference?\n            if let configPath = target.configFiles[config.name],\n                let fileReference = sourceGenerator.getContainedFileReference(path: project.basePath + configPath) as? PBXFileReference {\n                baseConfiguration = fileReference\n            }\n            let buildConfig = XCBuildConfiguration(\n                name: config.name,\n                buildSettings: buildSettings\n            )\n            buildConfig.baseConfiguration = baseConfiguration\n            return addObject(buildConfig)\n        }\n\n        let defaultConfigurationName = project.options.defaultConfig ?? project.configs.first?.name ?? \"\"\n        let buildConfigList = addObject(XCConfigurationList(\n            buildConfigurations: configs,\n            defaultConfigurationName: defaultConfigurationName\n        ))\n\n        let targetObject = targetObjects[target.name]!\n\n        let targetFileReference = targetFileReferences[target.name]\n\n        targetObject.name = target.name\n        targetObject.buildConfigurationList = buildConfigList\n        targetObject.buildPhases = buildPhases\n        targetObject.dependencies = dependencies\n        targetObject.productName = target.name\n        targetObject.buildRules = buildRules\n        targetObject.packageProductDependencies = packageDependencies\n        targetObject.product = targetFileReference\n        if !target.isLegacy {\n            targetObject.productType = target.type\n        }\n\n        // add fileSystemSynchronizedGroups\n\t\tlet synchronizedRootGroups: [PBXFileSystemSynchronizedRootGroup] = sourceFiles.compactMap { sourceFile in\n            guard let syncedGroup = sourceFile.fileReference as? PBXFileSystemSynchronizedRootGroup else { return nil }\n            \n            configureMembershipExceptions(\n                for: syncedGroup,\n                path: sourceFile.path,\n                target: target,\n                targetObject: targetObject,\n                infoPlistFiles: infoPlistFiles\n            )\n            return syncedGroup\n        }\n        if !synchronizedRootGroups.isEmpty {\n            targetObject.fileSystemSynchronizedGroups = synchronizedRootGroups\n        }\n    }\n\n    private func configureMembershipExceptions(\n        for syncedGroup: PBXFileSystemSynchronizedRootGroup,\n        path syncedPath: Path,\n        target: Target,\n        targetObject: PBXTarget,\n        infoPlistFiles: [Config: String]\n    ) {\n        guard let targetSource = target.sources.first(where: {\n            (project.basePath + $0.path).normalize() == syncedPath\n        }) else { return }\n\n        var exceptions: Set<String> = Set(\n            sourceGenerator.syncedFolderExceptions(for: targetSource, at: syncedPath)\n                .compactMap { try? $0.relativePath(from: syncedPath).string }\n        )\n\n        for infoPlistPath in Set(infoPlistFiles.values) {\n            let relative = try? (project.basePath + infoPlistPath).normalize()\n                .relativePath(from: syncedPath)\n            if let rel = relative?.string, !rel.hasPrefix(\"..\") {\n                exceptions.insert(rel)\n            }\n        }\n\n        guard !exceptions.isEmpty else { return }\n\n        let exceptionSet = PBXFileSystemSynchronizedBuildFileExceptionSet(\n            target: targetObject,\n            membershipExceptions: exceptions.sorted(),\n            publicHeaders: nil,\n            privateHeaders: nil,\n            additionalCompilerFlagsByRelativePath: nil,\n            attributesByRelativePath: nil\n        )\n        addObject(exceptionSet)\n        syncedGroup.exceptions = (syncedGroup.exceptions ?? []) + [exceptionSet]\n    }\n    \n    private func makePlatformFilter(for filter: Dependency.PlatformFilter) -> String? {\n        switch filter {\n        case .all:\n            return nil\n        case .macOS:\n            return \"maccatalyst\"\n        case .iOS:\n            return \"ios\"\n        }\n    }\n    \n    private func makeDestinationFilters(for filters: [SupportedDestination]?) -> [String]? {\n        guard let filters = filters, !filters.isEmpty else { return nil }\n        return filters.map { $0.string }\n    }\n    \n    /// Make `Build Tools Plug-ins` as a dependency to the target\n    /// - Parameter target: ProjectTarget\n    /// - Returns: Elements for referencing other targets through content proxies.\n    func makePackagePluginDependency(for target: ProjectTarget) -> [PBXTargetDependency] {\n        target.buildToolPlugins.compactMap { buildToolPlugin in\n            let packageReference = packageReferences[buildToolPlugin.package]\n            if packageReference == nil, localPackageReferences[buildToolPlugin.package] == nil {\n                return nil\n            }\n\n            let packageDependency = addObject(\n                XCSwiftPackageProductDependency(productName: buildToolPlugin.plugin, package: packageReference, isPlugin: true)\n            )\n            let targetDependency = addObject(\n                PBXTargetDependency(product: packageDependency)\n            )\n\n            return targetDependency\n        }\n    }\n    \n    func getInfoPlists(for target: Target) -> [Config: String] {\n        var searchForDefaultInfoPlist: Bool = true\n        var defaultInfoPlist: String?\n\n        let values: [(Config, String)] = project.configs.compactMap { config in\n            // First, if the plist path was defined by `INFOPLIST_FILE`, use that\n            let buildSettings = project.getTargetBuildSettings(target: target, config: config)\n            if let value = buildSettings[\"INFOPLIST_FILE\"]?.stringValue {\n                return (config, value)\n            }\n\n            // Otherwise check if the path was defined as part of the `info` spec\n            if let value = target.info?.path {\n                return (config, value)\n            }\n\n            // If we haven't yet looked for the default info plist, try doing so\n            if searchForDefaultInfoPlist {\n                searchForDefaultInfoPlist = false\n\n                if let plistPath = getInfoPlist(target.sources) {\n                    let basePath = projectDirectory ?? project.basePath.absolute()\n                    let relative = (try? plistPath.relativePath(from: basePath)) ?? plistPath\n                    defaultInfoPlist = relative.string\n                }\n            }\n\n            // Return the default plist if there was one\n            if let value = defaultInfoPlist {\n                return (config, value)\n            }\n            return nil\n        }\n\n        return Dictionary(uniqueKeysWithValues: values)\n    }\n\n    func getInfoPlist(_ sources: [TargetSource]) -> Path? {\n        sources\n            .lazy\n            .map { self.project.basePath + $0.path }\n            .compactMap { (path) -> Path? in\n                if path.isFile {\n                    return path.lastComponent == \"Info.plist\" ? path : nil\n                } else {\n                    return path.first(where: { $0.lastComponent == \"Info.plist\" })?.absolute()\n                }\n            }\n            .first\n    }\n\n    func getAllDependenciesPlusTransitiveNeedingEmbedding(target topLevelTarget: Target) -> [Dependency] {\n        // this is used to resolve cyclical target dependencies\n        var visitedTargets: Set<String> = []\n        var dependencies: [String: Dependency] = [:]\n        var queue: [Target] = [topLevelTarget]\n        while !queue.isEmpty {\n            let target = queue.removeFirst()\n            if visitedTargets.contains(target.name) {\n                continue\n            }\n\n            let isTopLevel = target == topLevelTarget\n\n            for dependency in target.dependencies {\n                // don't overwrite dependencies, to allow top level ones to rule\n                if dependencies[dependency.uniqueID] != nil {\n                    continue\n                }\n\n                // don't want a dependency if it's going to be embedded or statically linked in a non-top level target\n                // in .target check we filter out targets that will embed all of their dependencies\n                // For some more context about the `dependency.embed != true` lines, refer to https://github.com/yonaskolb/XcodeGen/pull/820\n                switch dependency.type {\n                case .sdk:\n                    dependencies[dependency.uniqueID] = dependency\n                case .framework, .carthage, .package:\n                    if isTopLevel || dependency.embed != true {\n                        dependencies[dependency.uniqueID] = dependency\n                    }\n                case .target:\n                    let dependencyTargetReference = try! TargetReference(dependency.reference)\n\n                    switch dependencyTargetReference.location {\n                    case .local:\n                        if isTopLevel || dependency.embed != true {\n                            if let dependencyTarget = project.getTarget(dependency.reference) {\n                                dependencies[dependency.uniqueID] = dependency\n                                if !dependencyTarget.shouldEmbedDependencies {\n                                    // traverse target's dependencies if it doesn't embed them itself\n                                    queue.append(dependencyTarget)\n                                }\n                            } else if project.getAggregateTarget(dependency.reference) != nil {\n                                // Aggregate targets should be included\n                                dependencies[dependency.uniqueID] = dependency\n                            }\n                        }\n                    case .project:\n                        if isTopLevel || dependency.embed != true {\n                            dependencies[dependency.uniqueID] = dependency\n                        }\n                    }\n                case .bundle:\n                    if isTopLevel {\n                        dependencies[dependency.uniqueID] = dependency\n                    }\n                }\n            }\n\n            visitedTargets.update(with: target.name)\n        }\n\n        return dependencies.sorted(by: { $0.key < $1.key }).map { $0.value }\n    }\n}\n\nextension Target {\n\n    var shouldEmbedDependencies: Bool {\n        type.isApp || type.isTest\n    }\n\n    var shouldEmbedCarthageDependencies: Bool {\n        (type.isApp && platform != .watchOS)\n            || type == .watch2Extension\n            || type.isTest\n    }\n}\n\nextension Platform {\n    /// - returns: `true` for platforms that the app store requires simulator slices to be stripped.\n    public var requiresSimulatorStripping: Bool {\n        switch self {\n        case .auto, .iOS, .tvOS, .watchOS, .visionOS:\n            return true\n        case .macOS:\n            return false\n        }\n    }\n}\n\nextension PBXFileElement {\n    /// - returns: `true` if the element is a group, a folder reference (likely an SPM package), or a synced folder.\n    var isGroupOrFolder: Bool {\n        self is PBXGroup || self is PBXFileSystemSynchronizedRootGroup || (self as? PBXFileReference)?.lastKnownFileType == \"folder\"\n    }\n\n    public func getSortOrder(groupSortPosition: SpecOptions.GroupSortPosition) -> Int {\n        if self is PBXGroup || self is PBXFileSystemSynchronizedRootGroup {\n            switch groupSortPosition {\n            case .top: return -1\n            case .bottom: return 1\n            case .none: return 0\n            }\n        } else {\n            return 0\n        }\n    }\n}\n\nprivate extension Dependency {\n    var carthageLinkType: Dependency.CarthageLinkType? {\n        switch type {\n        case .carthage(_, let linkType):\n            return linkType\n        default:\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/ProjectFormat.swift",
    "content": "public extension ProjectFormat {\n    static let `default`: ProjectFormat = .xcode16_0\n}\n\npublic enum ProjectFormat: String {\n    case xcode16_3\n    case xcode16_0\n    case xcode15_3\n    case xcode15_0\n    case xcode14_0\n\n    public var objectVersion: UInt {\n        switch self {\n        case .xcode16_3: 90\n        case .xcode16_0: 77\n        case .xcode15_3: 63\n        case .xcode15_0: 60\n        case .xcode14_0: 56\n        }\n    }\n\n    public var preferredProjectObjectVersion: UInt? {\n        switch self {\n        case .xcode16_3, .xcode16_0: objectVersion\n        case .xcode15_3, .xcode15_0, .xcode14_0: nil\n        }\n    }\n\n    public var compatibilityVersion: String? {\n        switch self {\n        case .xcode16_3, .xcode16_0: nil\n        case .xcode15_3: \"Xcode 15.3\"\n        case .xcode15_0: \"Xcode 15.0\"\n        case .xcode14_0: \"Xcode 14.0\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/ProjectGenerator.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport ProjectSpec\nimport XcodeProj\nimport Yams\n\npublic class ProjectGenerator {\n\n    let project: Project\n\n    public init(project: Project) {\n        self.project = project\n    }\n\n    public func generateXcodeProject(in projectDirectory: Path? = nil, userName: String) throws -> XcodeProj {\n\n        // generate PBXProj\n        let pbxProjGenerator = PBXProjGenerator(project: project,\n                                                projectDirectory: projectDirectory)\n        let pbxProj = try pbxProjGenerator.generate()\n\n        // generate Workspace\n        let workspace = try generateWorkspace()\n\n        // generate Schemes\n        let schemeGenerator = SchemeGenerator(project: project, pbxProj: pbxProj)\n        let (sharedSchemes, userSchemes, schemeManagement) = try schemeGenerator.generateSchemes()\n\n        // generate Breakpoints\n        let breakpointGenerator = BreakpointGenerator(project: project)\n        let xcbreakpointlist = try breakpointGenerator.generateBreakpointList()\n\n        // generate shared data\n        let sharedData = XCSharedData(schemes: sharedSchemes, breakpoints: xcbreakpointlist)\n\n        // generate user data\n        let userData = userSchemes.isEmpty && schemeManagement == nil ? [] : [\n            XCUserData(userName: userName, schemes: userSchemes, schemeManagement: schemeManagement)\n        ]\n\n        return XcodeProj(\n            workspace: workspace,\n            pbxproj: pbxProj,\n            sharedData: sharedData,\n            userData: userData\n        )\n    }\n\n    func generateWorkspace() throws -> XCWorkspace {\n        let selfReference = XCWorkspaceDataFileRef(location: .current(\"\"))\n        let dataElement = XCWorkspaceDataElement.file(selfReference)\n        let workspaceData = XCWorkspaceData(children: [dataElement])\n        return XCWorkspace(data: workspaceData)\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/SchemeGenerator.swift",
    "content": "import Foundation\nimport ProjectSpec\nimport XcodeProj\nimport PathKit\n\nprivate func suitableConfig(for type: ConfigType, in project: Project) -> Config {\n    if let defaultConfig = Config.defaultConfigs.first(where: { $0.type == type }),\n        project.configs.contains(defaultConfig) {\n        return defaultConfig\n    }\n    return project.configs.first { $0.type == type }!\n}\n\npublic class SchemeGenerator {\n\n    let project: Project\n    let pbxProj: PBXProj\n\n    var defaultDebugConfig: Config {\n        suitableConfig(for: .debug, in: project)\n    }\n\n    var defaultReleaseConfig: Config {\n        suitableConfig(for: .release, in: project)\n    }\n\n    public init(project: Project, pbxProj: PBXProj) {\n        self.project = project\n        self.pbxProj = pbxProj\n    }\n\n    private var projects: [ProjectReference: PBXProj] = [:]\n\n    func getPBXProj(from reference: ProjectReference) throws -> PBXProj {\n        if let cachedProject = projects[reference] {\n            return cachedProject\n        }\n        let pbxproj = try XcodeProj(path: project.basePath + Path(reference.path)).pbxproj\n        projects[reference] = pbxproj\n        return pbxproj\n    }\n\n    public func generateSchemes() throws -> (\n        shared: [XCScheme],\n        user: [XCScheme],\n        management: XCSchemeManagement?\n    ) {\n        var schemes: [(Scheme, ProjectTarget?)] = []\n\n        for scheme in project.schemes {\n            schemes.append((scheme, nil))\n        }\n\n        for target in project.projectTargets {\n            if let targetScheme = target.scheme {\n                if targetScheme.configVariants.isEmpty {\n                    let schemeName = target.name\n\n                    let debugConfig = suitableConfig(for: .debug, in: project)\n                    let releaseConfig = suitableConfig(for: .release, in: project)\n\n                    let scheme = Scheme(\n                        name: schemeName,\n                        target: target,\n                        targetScheme: targetScheme,\n                        project: project,\n                        debugConfig: debugConfig.name,\n                        releaseConfig: releaseConfig.name\n                    )\n                    schemes.append((scheme, target))\n                } else {\n                    for configVariant in targetScheme.configVariants {\n\n                        let schemeName = \"\\(target.name) \\(configVariant)\"\n\n                        let debugConfig = project.configs\n                            .first(including: configVariant, for: .debug)!\n\n                        let releaseConfig = project.configs\n                            .first(including: configVariant, for: .release)!\n\n                        let scheme = Scheme(\n                            name: schemeName,\n                            target: target,\n                            targetScheme: targetScheme,\n                            project: project,\n                            debugConfig: debugConfig.name,\n                            releaseConfig: releaseConfig.name\n                        )\n                        schemes.append((scheme, target))\n                    }\n                }\n            }\n        }\n\n        var sharedSchemes: [XCScheme] = []\n        var userSchemes: [XCScheme] = []\n        var schemeManagements: [XCSchemeManagement.UserStateScheme] = []\n\n        for (scheme, projectTarget) in schemes {\n            let xcscheme = try generateScheme(scheme, for: projectTarget)\n\n            if scheme.management?.shared == false {\n                userSchemes.append(xcscheme)\n            } else {\n                sharedSchemes.append(xcscheme)\n            }\n\n            if let management = scheme.management {\n                schemeManagements.append(\n                    XCSchemeManagement.UserStateScheme(\n                        name: scheme.name + \".xcscheme\",\n                        shared: management.shared,\n                        orderHint: management.orderHint,\n                        isShown: management.isShown\n                    )\n                )\n            }\n        }\n\n        return (\n            shared: sharedSchemes,\n            user: userSchemes,\n            management: schemeManagements.isEmpty\n                ? nil\n                : XCSchemeManagement(schemeUserState: schemeManagements, suppressBuildableAutocreation: nil)\n        )\n    }\n\n    public func generateScheme(_ scheme: Scheme, for target: ProjectTarget? = nil) throws -> XCScheme {\n\n        func getBuildableReference(_ target: TargetReference) throws -> XCScheme.BuildableReference {\n            let pbxProj: PBXProj\n            let projectFilePath: String\n            switch target.location {\n            case .project(let project):\n                guard let projectReference = self.project.getProjectReference(project) else {\n                    throw SchemeGenerationError.missingProject(project)\n                }\n                pbxProj = try getPBXProj(from: projectReference)\n                projectFilePath = projectReference.path\n            case .local:\n                pbxProj = self.pbxProj\n                projectFilePath = \"\\(self.project.name).xcodeproj\"\n            }\n\n            guard let pbxTarget = pbxProj.targets(named: target.name).first else {\n                throw SchemeGenerationError.missingTarget(target, projectPath: projectFilePath)\n            }\n            let buildableName: String\n\n            switch target.location {\n            case .project:\n                buildableName = pbxTarget.productNameWithExtension() ?? pbxTarget.name\n            case .local:\n                guard let _buildableName =\n                    project.getTarget(target.name)?.filename ??\n                    project.getAggregateTarget(target.name)?.name else {\n                    fatalError(\"Unable to determinate \\\"buildableName\\\" for build target: \\(target)\")\n                }\n                buildableName = _buildableName\n            }\n\n            return XCScheme.BuildableReference(\n                referencedContainer: \"container:\\(projectFilePath)\",\n                blueprint: pbxTarget,\n                buildableName: buildableName,\n                blueprintName: target.name\n            )\n        }\n        \n        func getBuildableTestableReference(_ target: TestableTargetReference) throws -> XCScheme.BuildableReference {\n            switch target.location {\n            case .package(let packageName):\n                guard let package = self.project.getPackage(packageName),\n                      case let .local(path, _, _) = package else {\n                    throw SchemeGenerationError.missingPackage(packageName)\n                }\n                return XCScheme.BuildableReference(\n                    referencedContainer: \"container:\\(path)\",\n                    blueprintIdentifier: target.name,\n                    buildableName: target.name,\n                    blueprintName: target.name\n                )\n            default:\n                return try getBuildableReference(target.targetReference)\n            }\n        }\n\n        func getBuildEntry(_ buildTarget: Scheme.BuildTarget) throws -> XCScheme.BuildAction.Entry {\n            let buildableReference = try getBuildableTestableReference(buildTarget.target)\n            return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes)\n        }\n\n        let testTargets = scheme.test?.targets ?? []\n        let testBuildTargets = testTargets.map {\n            Scheme.BuildTarget(target: $0.targetReference, buildTypes: BuildType.testOnly)\n        }\n\n        let testBuildTargetEntries = try testBuildTargets.map(getBuildEntry)\n\n        let buildActionEntries: [XCScheme.BuildAction.Entry] = try scheme.build.targets.map(getBuildEntry)\n\n        func getExecutionAction(_ action: Scheme.ExecutionAction) -> XCScheme.ExecutionAction {\n            // ExecutionActions can require the use of build settings. Xcode allows the settings to come from a build or test target.\n            let environmentBuildable = action.settingsTarget.flatMap { settingsTarget in\n                (buildActionEntries + testBuildTargetEntries)\n                    .first { settingsTarget == $0.buildableReference.blueprintName }?\n                    .buildableReference\n            }\n            return XCScheme.ExecutionAction(\n                scriptText: action.script,\n                title: action.name,\n                shellToInvoke: action.shell,\n                environmentBuildable: environmentBuildable\n            )\n        }\n\n        let schemeTarget: ProjectTarget?\n\n        if let targetName = scheme.run?.executable {\n            schemeTarget = project.getTarget(targetName)\n        } else {\n            guard let firstTarget = scheme.build.targets.first else {\n                throw SchemeGenerationError.missingBuildTargets(scheme.name)\n            }\n            let name = scheme.build.targets.first { $0.buildTypes.contains(.running) }?.target.name ?? firstTarget.target.name\n            schemeTarget = target ?? project.getTarget(name)\n        }\n\n        let shouldExecuteOnLaunch = schemeTarget?.shouldExecuteOnLaunch == true\n\n        let buildableReference = buildActionEntries.first(where: { $0.buildableReference.blueprintName == schemeTarget?.name })?.buildableReference ?? buildActionEntries.first!.buildableReference\n        let runnables = makeProductRunnables(for: schemeTarget, buildableReference: buildableReference)\n\n        let buildAction = XCScheme.BuildAction(\n            buildActionEntries: buildActionEntries,\n            preActions: scheme.build.preActions.map(getExecutionAction),\n            postActions: scheme.build.postActions.map(getExecutionAction),\n            parallelizeBuild: scheme.build.parallelizeBuild,\n            buildImplicitDependencies: scheme.build.buildImplicitDependencies,\n            runPostActionsOnFailure: scheme.build.runPostActionsOnFailure\n        )\n\n        let testables: [XCScheme.TestableReference] = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuildEntries in\n            \n            var locationScenarioReference: XCScheme.LocationScenarioReference?\n            if var location = testTarget.location {\n                \n                if location.contains(\".gpx\") {\n                    var path = Path(components: [project.options.schemePathPrefix, location])\n                    path = path.simplifyingParentDirectoryReferences()\n                    location = path.string\n                }\n                \n                let referenceType = location.contains(\".gpx\") ? \"0\" : \"1\"\n                locationScenarioReference = XCScheme.LocationScenarioReference(identifier: location, referenceType: referenceType)\n                \n            }\n            \n            return XCScheme.TestableReference(\n                skipped: testTarget.skipped,\n                parallelization: testTarget.parallelizable ? .all : .none,\n                randomExecutionOrdering: testTarget.randomExecutionOrder,\n                buildableReference: testBuildEntries.buildableReference,\n                locationScenarioReference: locationScenarioReference,\n                skippedTests: testTarget.skippedTests.map(XCScheme.TestItem.init),\n                selectedTests: testTarget.selectedTests.map(XCScheme.TestItem.init),\n                useTestSelectionWhitelist: !testTarget.selectedTests.isEmpty ? true : nil\n            )\n        }\n\n        let coverageBuildableTargets = try scheme.test?.coverageTargets.map {\n            try getBuildableTestableReference($0)\n        } ?? []\n\n        let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) }\n        let launchCommandLineArgs = scheme.run.map { XCScheme.CommandLineArguments($0.commandLineArguments) }\n        let profileCommandLineArgs = scheme.profile.map { XCScheme.CommandLineArguments($0.commandLineArguments) }\n\n        let testVariables = scheme.test.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables }\n        let launchVariables = scheme.run.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables }\n        let profileVariables = scheme.profile.flatMap { $0.environmentVariables.isEmpty ? nil : $0.environmentVariables }\n\n        let defaultTestPlanIndex = scheme.test?.testPlans.firstIndex { $0.defaultPlan } ?? 0\n        let testPlans = scheme.test?.testPlans.enumerated().map { index, testPlan in\n             XCScheme.TestPlanReference(reference: \"container:\\(testPlan.path)\", default: defaultTestPlanIndex == index)\n        } ?? []\n        let testBuildableEntries = buildActionEntries.filter({ $0.buildFor.contains(.testing) }) + testBuildTargetEntries\n        let testMacroExpansionBuildableRef = testBuildableEntries.map(\\.buildableReference).contains(buildableReference) ? buildableReference : testBuildableEntries.first?.buildableReference\n\n        let testMacroExpansion: XCScheme.BuildableReference = buildActionEntries.first(\n            where: { value in\n                if let macroExpansion = scheme.test?.macroExpansion {\n                    return value.buildableReference.blueprintName == macroExpansion\n                }\n                return false\n            }\n        )?.buildableReference ?? testMacroExpansionBuildableRef ?? buildableReference\n\n        let testAction = XCScheme.TestAction(\n            buildConfiguration: scheme.test?.config ?? defaultDebugConfig.name,\n            macroExpansion: testMacroExpansion,\n            testables: testables,\n            testPlans: testPlans.isEmpty ? nil : testPlans,\n            preActions: scheme.test?.preActions.map(getExecutionAction) ?? [],\n            postActions: scheme.test?.postActions.map(getExecutionAction) ?? [],\n            selectedDebuggerIdentifier: (scheme.test?.debugEnabled ?? Scheme.Test.debugEnabledDefault) ? XCScheme.defaultDebugger : \"\",\n            selectedLauncherIdentifier: (scheme.test?.debugEnabled ?? Scheme.Test.debugEnabledDefault) ? XCScheme.defaultLauncher : \"Xcode.IDEFoundation.Launcher.PosixSpawn\",\n            shouldUseLaunchSchemeArgsEnv: scheme.test?.shouldUseLaunchSchemeArgsEnv ?? true,\n            codeCoverageEnabled: scheme.test?.gatherCoverageData ?? Scheme.Test.gatherCoverageDataDefault,\n            codeCoverageTargets: coverageBuildableTargets,\n            onlyGenerateCoverageForSpecifiedTargets: !coverageBuildableTargets.isEmpty,\n            enableAddressSanitizer: scheme.test?.enableAddressSanitizer ?? Scheme.Test.enableAddressSanitizerDefault,\n            enableASanStackUseAfterReturn: scheme.test?.enableASanStackUseAfterReturn ?? Scheme.Test.enableASanStackUseAfterReturnDefault,\n            enableThreadSanitizer: scheme.test?.enableThreadSanitizer ?? Scheme.Test.enableThreadSanitizerDefault,\n            enableUBSanitizer: scheme.test?.enableUBSanitizer ?? Scheme.Test.enableUBSanitizerDefault,\n            disableMainThreadChecker: scheme.test?.disableMainThreadChecker ?? Scheme.Test.disableMainThreadCheckerDefault,\n            commandlineArguments: testCommandLineArgs,\n            environmentVariables: testVariables,\n            language: scheme.test?.language,\n            region: scheme.test?.region,\n            systemAttachmentLifetime: scheme.test?.systemAttachmentLifetime,\n            preferredScreenCaptureFormat: scheme.test?.preferredScreenCaptureFormat,\n            customLLDBInitFile: scheme.test?.customLLDBInit\n        )\n\n        let allowLocationSimulation = scheme.run?.simulateLocation?.allow ?? true\n        var locationScenarioReference: XCScheme.LocationScenarioReference?\n        if let simulateLocation = scheme.run?.simulateLocation, var identifier = simulateLocation.defaultLocation, let referenceType = simulateLocation.referenceType {\n            if referenceType == .gpx {\n                var path = Path(components: [project.options.schemePathPrefix, identifier])\n                path = path.simplifyingParentDirectoryReferences()\n                identifier = path.string\n            }\n            locationScenarioReference = XCScheme.LocationScenarioReference(identifier: identifier, referenceType: referenceType.rawValue)\n        }\n\n        var storeKitConfigurationFileReference: XCScheme.StoreKitConfigurationFileReference?\n        if let storeKitConfiguration = scheme.run?.storeKitConfiguration {\n            let storeKitConfigurationPath = Path(components: [project.options.schemePathPrefix, storeKitConfiguration]).simplifyingParentDirectoryReferences()\n            storeKitConfigurationFileReference = XCScheme.StoreKitConfigurationFileReference(identifier: storeKitConfigurationPath.string)\n        }\n\n        let macroExpansion: XCScheme.BuildableReference?\n        if let macroExpansionName = scheme.run?.macroExpansion,\n           let resolvedMacroExpansion = buildActionEntries.first(where: { $0.buildableReference.blueprintName == macroExpansionName })?.buildableReference {\n            macroExpansion = resolvedMacroExpansion\n        } else {\n            macroExpansion = shouldExecuteOnLaunch ? nil : buildableReference\n        }\n\n        let launchAction = XCScheme.LaunchAction(\n            runnable: shouldExecuteOnLaunch ? runnables.launch : nil,\n            buildConfiguration: scheme.run?.config ?? defaultDebugConfig.name,\n            preActions: scheme.run?.preActions.map(getExecutionAction) ?? [],\n            postActions: scheme.run?.postActions.map(getExecutionAction) ?? [],\n            macroExpansion: macroExpansion,\n            selectedDebuggerIdentifier: selectedDebuggerIdentifier(for: schemeTarget, run: scheme.run),\n            selectedLauncherIdentifier: selectedLauncherIdentifier(for: schemeTarget, run: scheme.run),\n            askForAppToLaunch: scheme.run?.askForAppToLaunch,\n            customWorkingDirectory: scheme.run?.customWorkingDirectory,\n            useCustomWorkingDirectory: scheme.run?.customWorkingDirectory != nil,\n            allowLocationSimulation: allowLocationSimulation,\n            locationScenarioReference: locationScenarioReference,\n            enableGPUFrameCaptureMode: scheme.run?.enableGPUFrameCaptureMode ?? XCScheme.LaunchAction.defaultGPUFrameCaptureMode,\n            disableGPUValidationMode: !(scheme.run?.enableGPUValidationMode ?? Scheme.Run.enableGPUValidationModeDefault),\n            enableAddressSanitizer: scheme.run?.enableAddressSanitizer ?? Scheme.Run.enableAddressSanitizerDefault,\n            enableASanStackUseAfterReturn: scheme.run?.enableASanStackUseAfterReturn ?? Scheme.Run.enableASanStackUseAfterReturnDefault,\n            enableThreadSanitizer: scheme.run?.enableThreadSanitizer ?? Scheme.Run.enableThreadSanitizerDefault,\n            enableUBSanitizer: scheme.run?.enableUBSanitizer ?? Scheme.Run.enableUBSanitizerDefault,\n            disableMainThreadChecker: scheme.run?.disableMainThreadChecker ?? Scheme.Run.disableMainThreadCheckerDefault,\n            disablePerformanceAntipatternChecker: scheme.run?.disableThreadPerformanceChecker ?? Scheme.Run.disableThreadPerformanceCheckerDefault,\n            stopOnEveryMainThreadCheckerIssue: scheme.run?.stopOnEveryMainThreadCheckerIssue ?? Scheme.Run.stopOnEveryMainThreadCheckerIssueDefault,\n            commandlineArguments: launchCommandLineArgs,\n            environmentVariables: launchVariables,\n            language: scheme.run?.language,\n            region: scheme.run?.region,\n            launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle ?? launchAutomaticallySubstyle(for: schemeTarget),\n            storeKitConfigurationFileReference: storeKitConfigurationFileReference,\n            customLLDBInitFile: scheme.run?.customLLDBInit\n        )\n\n        let profileAction = XCScheme.ProfileAction(\n            buildableProductRunnable: shouldExecuteOnLaunch ? runnables.profile : nil,\n            buildConfiguration: scheme.profile?.config ?? defaultReleaseConfig.name,\n            preActions: scheme.profile?.preActions.map(getExecutionAction) ?? [],\n            postActions: scheme.profile?.postActions.map(getExecutionAction) ?? [],\n            macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference,\n            shouldUseLaunchSchemeArgsEnv: scheme.profile?.shouldUseLaunchSchemeArgsEnv ?? true,\n            askForAppToLaunch: scheme.profile?.askForAppToLaunch,\n            commandlineArguments: profileCommandLineArgs,\n            environmentVariables: profileVariables\n        )\n\n        let analyzeAction = XCScheme.AnalyzeAction(buildConfiguration: scheme.analyze?.config ?? defaultDebugConfig.name)\n\n        let archiveAction = XCScheme.ArchiveAction(\n            buildConfiguration: scheme.archive?.config ?? defaultReleaseConfig.name,\n            revealArchiveInOrganizer: scheme.archive?.revealArchiveInOrganizer ?? true,\n            customArchiveName: scheme.archive?.customArchiveName,\n            preActions: scheme.archive?.preActions.map(getExecutionAction) ?? [],\n            postActions: scheme.archive?.postActions.map(getExecutionAction) ?? []\n        )\n\n        let lastUpgradeVersion = project.attributes[\"LastUpgradeCheck\"] as? String ?? project.xcodeVersion\n\n        return XCScheme(\n            name: scheme.name,\n            lastUpgradeVersion: lastUpgradeVersion,\n            version: project.schemeVersion,\n            buildAction: buildAction,\n            testAction: testAction,\n            launchAction: launchAction,\n            profileAction: profileAction,\n            analyzeAction: analyzeAction,\n            archiveAction: archiveAction,\n            wasCreatedForAppExtension: schemeTarget\n                .flatMap { $0.type.isExtension ? true : nil }\n        )\n    }\n    \n    private func launchAutomaticallySubstyle(for target: ProjectTarget?) -> String? {\n        if target?.type.isExtension == true {\n            return \"2\"\n        } else {\n            return nil\n        }\n    }\n\n    private func makeProductRunnables(for target: ProjectTarget?, buildableReference: XCScheme.BuildableReference) -> (launch: XCScheme.Runnable, profile: XCScheme.BuildableProductRunnable) {\n        let buildable = XCScheme.BuildableProductRunnable(buildableReference: buildableReference)\n        if target?.type.isWatchApp == true {\n            let remote = XCScheme.RemoteRunnable(\n                buildableReference: buildableReference,\n                bundleIdentifier: \"com.apple.Carousel\",\n                runnableDebuggingMode: \"2\"\n            )\n            return (remote, buildable)\n        } else {\n            return (buildable, buildable)\n        }\n    }\n\n    private func selectedDebuggerIdentifier(for target: ProjectTarget?, run: Scheme.Run?) -> String {\n        if target?.type.canUseDebugLauncher != false && run?.debugEnabled ?? Scheme.Run.debugEnabledDefault {\n            return XCScheme.defaultDebugger\n        } else {\n            return \"\"\n        }\n    }\n\n    private func selectedLauncherIdentifier(for target: ProjectTarget?, run: Scheme.Run?) -> String {\n        if target?.type.canUseDebugLauncher != false && run?.debugEnabled ?? Scheme.Run.debugEnabledDefault {\n            return XCScheme.defaultLauncher\n        } else {\n            return \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n        }\n    }\n}\n\nenum SchemeGenerationError: Error, CustomStringConvertible {\n\n    case missingTarget(TargetReference, projectPath: String)\n    case missingPackage(String)\n    case missingProject(String)\n    case missingBuildTargets(String)\n\n    var description: String {\n        switch self {\n        case .missingTarget(let target, let projectPath):\n            return \"Unable to find target named \\\"\\(target)\\\" in \\\"\\(projectPath)\\\"\"\n        case .missingProject(let project):\n            return \"Unable to find project reference named \\\"\\(project)\\\" in project.yml\"\n        case .missingBuildTargets(let name):\n            return \"Unable to find at least one build target in scheme \\\"\\(name)\\\"\"\n        case .missingPackage(let package):\n            return \"Unable to find swift package named \\\"\\(package)\\\" in project.yml\"\n        }\n    }\n}\n\nextension Scheme {\n    public init(name: String, target: ProjectTarget, targetScheme: TargetScheme, project: Project, debugConfig: String, releaseConfig: String) {\n        self.init(\n            name: name,\n            build: .init(\n                targets: Scheme.buildTargets(for: target, project: project),\n                buildImplicitDependencies: targetScheme.buildImplicitDependencies,\n                preActions: targetScheme.preActions,\n                postActions: targetScheme.postActions\n            ),\n            run: .init(\n                config: debugConfig,\n                commandLineArguments: targetScheme.commandLineArguments,\n                environmentVariables: targetScheme.environmentVariables,\n                disableMainThreadChecker: targetScheme.disableMainThreadChecker,\n                stopOnEveryMainThreadCheckerIssue: targetScheme.stopOnEveryMainThreadCheckerIssue,\n                disableThreadPerformanceChecker: targetScheme.disableThreadPerformanceChecker,\n                language: targetScheme.language,\n                region: targetScheme.region,\n                storeKitConfiguration: targetScheme.storeKitConfiguration\n            ),\n            test: .init(\n                config: debugConfig,\n                gatherCoverageData: targetScheme.gatherCoverageData,\n                coverageTargets: targetScheme.coverageTargets,\n                disableMainThreadChecker: targetScheme.disableMainThreadChecker,\n                commandLineArguments: targetScheme.commandLineArguments,\n                targets: targetScheme.testTargets,\n                environmentVariables: targetScheme.environmentVariables,\n                testPlans: targetScheme.testPlans,\n                language: targetScheme.language,\n                region: targetScheme.region\n            ),\n            profile: .init(\n                config: releaseConfig,\n                commandLineArguments: targetScheme.commandLineArguments,\n                environmentVariables: targetScheme.environmentVariables\n            ),\n            analyze: .init(\n                config: debugConfig\n            ),\n            archive: .init(\n                config: releaseConfig\n            ),\n            management: targetScheme.management\n        )\n    }\n\n    private static func buildTargets(for target: ProjectTarget, project: Project) -> [BuildTarget] {\n        let buildTarget = Scheme.BuildTarget(target: TestableTargetReference.local(target.name))\n        switch target.type {\n        case .watchApp, .watch2App:\n            let hostTarget = project.targets\n                .first { projectTarget in\n                    projectTarget.dependencies.contains { $0.reference == target.name }\n                }\n                .map { BuildTarget(target: TestableTargetReference.local($0.name)) }\n            return hostTarget.map { [buildTarget, $0] } ?? [buildTarget]\n        default:\n            return [buildTarget]\n        }\n    }\n}\n\nextension PBXProductType {\n    var canUseDebugLauncher: Bool {\n        // Extensions don't use the lldb launcher\n        return !isExtension\n    }\n\n    var isWatchApp: Bool {\n        switch self {\n        case .watchApp, .watch2App:\n            return true\n        default:\n            return false\n        }\n    }\n}\n\nextension Scheme.Test {\n    var systemAttachmentLifetime: XCScheme.TestAction.AttachmentLifetime? {\n        switch (captureScreenshotsAutomatically, deleteScreenshotsWhenEachTestSucceeds) {\n        case (false, _):\n            return .keepNever\n        case (true, false):\n            return .keepAlways\n        case (true, true):\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/SettingsBuilder.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\nimport ProjectSpec\nimport XcodeProj\nimport Yams\n\nextension Project {\n\n    public func getProjectBuildSettings(config: Config) -> BuildSettings {\n        var buildSettings: BuildSettings = [:]\n\n        // set project SDKROOT is a single platform\n        if let firstPlatform = targets.first?.platform,\n           targets.allSatisfy({ $0.platform == firstPlatform })\n        {\n            buildSettings[\"SDKROOT\"] = .string(firstPlatform.sdkRoot)\n        }\n\n        if let type = config.type, options.settingPresets.applyProject {\n            buildSettings += SettingsPresetFile.base.getBuildSettings()\n            buildSettings += SettingsPresetFile.config(type).getBuildSettings()\n        }\n\n        // apply custom platform version\n        for platform in Platform.allCases {\n            if let version = options.deploymentTarget.version(for: platform) {\n                buildSettings[platform.deploymentTargetSetting] = .string(version.deploymentTarget)\n            }\n        }\n\n        // Prevent setting presets from overwriting settings in project xcconfig files\n        if let configPath = configFiles[config.name] {\n            buildSettings = removeConfigFileSettings(from: buildSettings, configPath: configPath)\n        }\n\n        buildSettings += getBuildSettings(settings: settings, config: config)\n\n        return buildSettings\n    }\n\n    public func getTargetBuildSettings(target: Target, config: Config) -> BuildSettings {\n        var buildSettings = BuildSettings()\n        \n        // list of supported destination sorted by priority\n        let specSupportedDestinations = target.supportedDestinations?.sorted(by: { $0.priority < $1.priority }) ?? []\n        \n        if options.settingPresets.applyTarget {\n            let platform: Platform\n            \n            if target.platform == .auto,\n               let firstDestination = specSupportedDestinations.first,\n               let firstDestinationPlatform = Platform(rawValue: firstDestination.rawValue) {\n                \n                platform = firstDestinationPlatform\n            } else {\n                platform = target.platform\n            }\n            \n            buildSettings += SettingsPresetFile.platform(platform).getBuildSettings()\n            buildSettings += SettingsPresetFile.product(target.type).getBuildSettings()\n            buildSettings += SettingsPresetFile.productPlatform(target.type, platform).getBuildSettings()\n            \n            if target.platform == .auto {\n                // this fix is necessary because the platform preset overrides the original value\n                buildSettings[\"SDKROOT\"] = .string(Platform.auto.rawValue)\n            }\n            \n            if !specSupportedDestinations.isEmpty {\n                var supportedPlatforms: [String] = []\n                var targetedDeviceFamily: [String] = []\n                \n                for supportedDestination in specSupportedDestinations {\n                    let supportedPlatformBuildSettings = SettingsPresetFile.supportedDestination(supportedDestination).getBuildSettings()\n                    buildSettings += supportedPlatformBuildSettings\n                    \n                    if let value = supportedPlatformBuildSettings?[\"SUPPORTED_PLATFORMS\"]?.stringValue {\n                        supportedPlatforms += value.components(separatedBy: \" \")\n                    }\n                    if let value = supportedPlatformBuildSettings?[\"TARGETED_DEVICE_FAMILY\"]?.stringValue {\n                        targetedDeviceFamily += value.components(separatedBy: \",\")\n                    }\n                }\n                \n                buildSettings[\"SUPPORTED_PLATFORMS\"] = .string(supportedPlatforms.joined(separator: \" \"))\n                buildSettings[\"TARGETED_DEVICE_FAMILY\"] = .string(targetedDeviceFamily.joined(separator: \",\"))\n            }\n        }\n        \n        // apply custom platform version\n        if let version = target.deploymentTarget {\n            if !specSupportedDestinations.isEmpty {\n                for supportedDestination in specSupportedDestinations {\n                    if let platform = Platform(rawValue: supportedDestination.rawValue) {\n                        buildSettings[platform.deploymentTargetSetting] = .string(version.deploymentTarget)\n                    }\n                }\n            } else {\n                buildSettings[target.platform.deploymentTargetSetting] = .string(version.deploymentTarget)\n            }\n        }\n\n        // Prevent setting presets from overrwriting settings in target xcconfig files\n        if let configPath = target.configFiles[config.name] {\n            buildSettings = removeConfigFileSettings(from: buildSettings, configPath: configPath)\n        }\n        // Prevent setting presets from overrwriting settings in project xcconfig files\n        if let configPath = configFiles[config.name] {\n            buildSettings = removeConfigFileSettings(from: buildSettings, configPath: configPath)\n        }\n\n        buildSettings += getBuildSettings(settings: target.settings, config: config)\n\n        return buildSettings\n    }\n\n    public func getBuildSettings(settings: Settings, config: Config) -> BuildSettings {\n        var buildSettings: BuildSettings = [:]\n\n        for group in settings.groups {\n            if let settings = settingGroups[group] {\n                buildSettings += getBuildSettings(settings: settings, config: config)\n            }\n        }\n\n        buildSettings += settings.buildSettings\n\n        for (configVariant, settings) in settings.configSettings {\n            let isPartialMatch = config.name.lowercased().contains(configVariant.lowercased())\n            if isPartialMatch {\n                let exactConfig = getConfig(configVariant)\n                let matchesExactlyToOtherConfig = exactConfig != nil && exactConfig?.name != config.name\n                if !matchesExactlyToOtherConfig {\n                    buildSettings += getBuildSettings(settings: settings, config: config)\n                }\n            }\n        }\n\n        return buildSettings\n    }\n\n    // combines all levels of a target's settings: target, target config, project, project config\n    public func getCombinedBuildSetting(_ setting: String, target: ProjectTarget, config: Config) -> BuildSetting? {\n        if let target = target as? Target,\n            let value = getTargetBuildSettings(target: target, config: config)[setting] {\n            return value\n        }\n        if let configFilePath = target.configFiles[config.name],\n            let value = loadConfigFileBuildSettings(path: configFilePath)?[setting] {\n            return value\n        }\n        if let value = getProjectBuildSettings(config: config)[setting] {\n            return value\n        }\n        if let configFilePath = configFiles[config.name],\n            let value = loadConfigFileBuildSettings(path: configFilePath)?[setting] {\n            return value\n        }\n        return nil\n    }\n\n    public func getBoolBuildSetting(_ setting: String, target: ProjectTarget, config: Config) -> Bool? {\n        getCombinedBuildSetting(setting, target: target, config: config)?.boolValue\n    }\n\n    public func targetHasBuildSetting(_ setting: String, target: Target, config: Config) -> Bool {\n        getCombinedBuildSetting(setting, target: target, config: config) != nil\n    }\n\n    /// Removes values from build settings if they are defined in an xcconfig file\n    private func removeConfigFileSettings(from buildSettings: BuildSettings, configPath: String) -> BuildSettings {\n        var buildSettings = buildSettings\n\n        if let configSettings = loadConfigFileBuildSettings(path: configPath) {\n            for key in configSettings.keys {\n                // FIXME: Catch platform specifier. e.g. LD_RUNPATH_SEARCH_PATHS[sdk=iphone*]\n                buildSettings.removeValue(forKey: key)\n                buildSettings.removeValue(forKey: key.quoted)\n            }\n        }\n\n        return buildSettings\n    }\n\n    /// Returns cached build settings from a config file\n    private func loadConfigFileBuildSettings(path: String) -> BuildSettings? {\n        let configFilePath = basePath + path\n        if let cached = configFileSettings[configFilePath.string] {\n            return cached.value\n        } else {\n            guard let configFile = try? XCConfig(path: configFilePath) else {\n                configFileSettings[configFilePath.string] = .nothing\n                return nil\n            }\n            let settings = configFile.flattenedBuildSettings()\n            configFileSettings[configFilePath.string] = .cached(settings)\n            return settings\n        }\n    }\n}\n\nprivate enum Cached<T> {\n    case cached(T)\n    case nothing\n\n    var value: T? {\n        switch self {\n        case let .cached(value): return value\n        case .nothing: return nil\n        }\n    }\n}\n\n// cached flattened xcconfig file settings\nprivate var configFileSettings: [String: Cached<BuildSettings>] = [:]\n\n// cached setting preset settings\nprivate var settingPresetSettings: [String: Cached<BuildSettings>] = [:]\n\nextension SettingsPresetFile {\n\n    public func getBuildSettings() -> BuildSettings? {\n        if let cached = settingPresetSettings[path] {\n            return cached.value\n        }\n        let bundlePath = Path(Bundle.main.bundlePath)\n        let relativePath = Path(\"SettingPresets/\\(path).yml\")\n        var possibleSettingsPaths: [Path] = [\n            relativePath,\n            bundlePath + relativePath,\n            bundlePath + \"../share/xcodegen/\\(relativePath)\",\n            Path(#file).parent().parent().parent() + relativePath,\n        ]\n\n        if let resourcePath = Bundle.main.resourcePath {\n            possibleSettingsPaths.append(Path(resourcePath) + relativePath)\n        }\n\n        if let symlink = try? (bundlePath + \"xcodegen\").symlinkDestination() {\n            possibleSettingsPaths = [\n                symlink.parent() + relativePath,\n            ] + possibleSettingsPaths\n        }\n        if let moduleResourcePath = Bundle.availableModule?.path(forResource: \"SettingPresets\", ofType: nil) {\n            possibleSettingsPaths.append(Path(moduleResourcePath) + \"\\(path).yml\")\n        }\n\n        guard let settingsPath = possibleSettingsPaths.first(where: { $0.exists }) else {\n            switch self {\n            case .base, .config, .platform, .supportedDestination:\n                print(\"No \\\"\\(name)\\\" settings found\")\n            case .product, .productPlatform:\n                break\n            }\n            settingPresetSettings[path] = .nothing\n            return nil\n        }\n\n        guard let dictionary = try? loadYamlDictionary(path: settingsPath) else {\n            print(\"Error parsing \\\"\\(name)\\\" settings\")\n            return nil\n        }\n        let buildSettings: BuildSettings = dictionary.mapValues { BuildSetting(any: $0) }\n        settingPresetSettings[path] = .cached(buildSettings)\n        return buildSettings\n    }\n}\n\nprivate class BundleFinder {}\n\n/// The default SPM generated `Bundle.module` crashes on runtime if there is no .bundle file.\n/// Below implementation modified from generated `Bundle.module` code which call `fatalError` if .bundle file not found.\nprivate extension Bundle {\n    /// Returns the resource bundle associated with the current Swift module.\n    static let availableModule: Bundle? = {\n        let bundleName = \"XcodeGen_XcodeGenKit\"\n\n        let overrides: [URL]\n        #if DEBUG\n        // The 'PACKAGE_RESOURCE_BUNDLE_PATH' name is preferred since the expected value is a path. The\n        // check for 'PACKAGE_RESOURCE_BUNDLE_URL' will be removed when all clients have switched over.\n        // This removal is tracked by rdar://107766372.\n        if let override = ProcessInfo.processInfo.environment[\"PACKAGE_RESOURCE_BUNDLE_PATH\"]\n                       ?? ProcessInfo.processInfo.environment[\"PACKAGE_RESOURCE_BUNDLE_URL\"] {\n            overrides = [URL(fileURLWithPath: override)]\n        } else {\n            overrides = []\n        }\n        #else\n        overrides = []\n        #endif\n\n        let candidates = overrides + [\n            // Bundle should be present here when the package is linked into an App.\n            Bundle.main.resourceURL,\n\n            // Bundle should be present here when the package is linked into a framework.\n            Bundle(for: BundleFinder.self).resourceURL,\n\n            // For command-line tools.\n            Bundle.main.bundleURL,\n        ]\n\n        for candidate in candidates {\n            let bundlePath = candidate?.appendingPathComponent(bundleName + \".bundle\")\n            if let bundle = bundlePath.flatMap(Bundle.init(url:)) {\n                return bundle\n            }\n        }\n        return nil\n    }()\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/SettingsPresetFile.swift",
    "content": "import Foundation\nimport ProjectSpec\nimport XcodeProj\n\npublic enum SettingsPresetFile {\n    case config(ConfigType)\n    case platform(Platform)\n    case supportedDestination(SupportedDestination)\n    case product(PBXProductType)\n    case productPlatform(PBXProductType, Platform)\n    case base\n\n    var path: String {\n        switch self {\n        case let .config(config): return \"Configs/\\(config.rawValue)\"\n        case let .platform(platform): return \"Platforms/\\(platform.rawValue)\"\n        case let .supportedDestination(supportedDestination): return \"SupportedDestinations/\\(supportedDestination.rawValue)\"\n        case let .product(product): return \"Products/\\(product.name)\"\n        case let .productPlatform(product, platform): return \"Product_Platform/\\(product.name)_\\(platform.rawValue)\"\n        case .base: return \"base\"\n        }\n    }\n\n    var name: String {\n        switch self {\n        case let .config(config): return \"\\(config.rawValue) config\"\n        case let .platform(platform): return platform.rawValue\n        case let .supportedDestination(supportedDestination): return supportedDestination.rawValue\n        case let .product(product): return product.name\n        case let .productPlatform(product, platform): return \"\\(platform) \\(product)\"\n        case .base: return \"base\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/SourceGenerator.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport XcodeProj\nimport XcodeGenCore\n\nstruct SourceFile {\n    let path: Path\n    let fileReference: PBXFileElement\n    let buildFile: PBXBuildFile\n    let buildPhase: BuildPhaseSpec?\n}\n\nclass SourceGenerator {\n\n    var rootGroups: Set<PBXFileElement> = []\n    private let projectDirectory: Path?\n    private var fileReferencesByPath: [String: PBXFileElement] = [:]\n    private var groupsByPath: [Path: PBXGroup] = [:]\n    private var variantGroupsByPath: [Path: PBXVariantGroup] = [:]\n    private var syncedGroupsByPath: [String: PBXFileSystemSynchronizedRootGroup] = [:]\n\n    private let project: Project\n    let pbxProj: PBXProj\n\n    private var defaultExcludedFiles = [\n        \".DS_Store\",\n    ]\n    private let defaultExcludedExtensions = [\n        \"orig\",\n    ]\n\n    private(set) var knownRegions: Set<String> = []\n\n    /// The effective base path for resolving group and file paths in the generated project.\n    /// Uses `projectDirectory` when the xcodeproj is generated in a different location than the spec.\n    private var basePath: Path {\n        projectDirectory ?? project.basePath\n    }\n\n    init(project: Project, pbxProj: PBXProj, projectDirectory: Path?) {\n        self.project = project\n        self.pbxProj = pbxProj\n        self.projectDirectory = projectDirectory\n    }\n\n    private func resolveGroupPath(_ path: Path, isTopLevelGroup: Bool) -> String {\n        if isTopLevelGroup, let relativePath = try? path.relativePath(from: basePath).string {\n            return relativePath\n        } else {\n            return path.lastComponent\n        }\n    }\n\n    @discardableResult\n    func addObject<T: PBXObject>(_ object: T, context: String? = nil) -> T {\n        pbxProj.add(object: object)\n        object.context = context\n        return object\n    }\n\n    func createLocalPackage(path: Path, group: Path?) throws {\n        var parentGroup: String = project.options.localPackagesGroup ?? \"Packages\"\n        if let group {\n          parentGroup = group.string\n        }\n\n        let absolutePath = project.basePath + path.normalize()\n\n        // Get the local package's relative path from the project root\n        let fileReferencePath = try? absolutePath.relativePath(from: basePath).string\n\n        let fileReference = addObject(\n            PBXFileReference(\n                sourceTree: .sourceRoot,\n                name: absolutePath.lastComponent,\n                lastKnownFileType: \"folder\",\n                path: fileReferencePath\n            )\n        )\n\n        if parentGroup == \"\" {\n            rootGroups.insert(fileReference)\n        } else {\n            let parentGroups = parentGroup.components(separatedBy: \"/\")\n            createParentGroups(parentGroups, for: fileReference)\n        }\n    }\n\n    /// Collects an array complete of all `SourceFile` objects that make up the target based on the provided `TargetSource` definitions.\n    ///\n    /// - Parameters:\n    ///   - targetType: The type of target that the source files should belong to.\n    ///   - sources: The array of sources defined as part of the targets spec.\n    ///   - buildPhases: A dictionary containing any build phases that should be applied to source files at specific paths in the event that the associated `TargetSource` didn't already define a `buildPhase`. Values from this dictionary are used in cases where the project generator knows more about a file than the spec/filesystem does (i.e if the file should be treated as the targets Info.plist and so on).\n    func getAllSourceFiles(targetType: PBXProductType, sources: [TargetSource], buildPhases: [Path : BuildPhaseSpec]) throws -> [SourceFile] {\n        try sources.flatMap { try getSourceFiles(targetType: targetType, targetSource: $0, buildPhases: buildPhases) }\n    }\n\n    // get groups without build files. Use for Project.fileGroups\n    func getFileGroups(path: String) throws {\n        _ = try getSourceFiles(targetType: .none, targetSource: TargetSource(path: path), buildPhases: [:])\n    }\n\n    func getFileType(path: Path) -> FileType? {\n        if let fileExtension = path.extension {\n            return project.options.fileTypes[fileExtension] ?? FileType.defaultFileTypes[fileExtension]\n        } else {\n            return nil\n        }\n    }\n    \n    private func makeDestinationFilters(for path: Path, with filters: [SupportedDestination]?, or inferDestinationFiltersByPath: Bool?) -> [String]? {\n        if let filters = filters, !filters.isEmpty {\n            return filters.map { $0.string }\n        } else if inferDestinationFiltersByPath == true {\n            for supportedDestination in SupportedDestination.allCases {\n                let regex1 = try? NSRegularExpression(pattern: \"\\\\/\\(supportedDestination)\\\\/\", options: .caseInsensitive)\n                let regex2 = try? NSRegularExpression(pattern: \"\\\\_\\(supportedDestination)\\\\.swift$\", options: .caseInsensitive)\n                \n                if regex1?.isMatch(to: path.string) == true || regex2?.isMatch(to: path.string) == true {\n                    return [supportedDestination.string]\n                }\n            }\n        }\n        return nil\n    }\n    \n    func generateSourceFile(targetType: PBXProductType, targetSource: TargetSource, path: Path, fileReference: PBXFileElement? = nil, buildPhases: [Path: BuildPhaseSpec]) -> SourceFile {\n        let fileReference = fileReference ?? fileReferencesByPath[path.string.lowercased()]!\n        var settings: [String: BuildFileSetting] = [:]\n        let fileType = getFileType(path: path)\n        var attributes: [String] = targetSource.attributes + (fileType?.attributes ?? [])\n        var chosenBuildPhase: BuildPhaseSpec?\n        var compilerFlags: String = \"\"\n        let assetTags: [String] = targetSource.resourceTags + (fileType?.resourceTags ?? [])\n\n        let headerVisibility = targetSource.headerVisibility ?? .public\n\n        if let buildPhase = targetSource.buildPhase {\n            chosenBuildPhase = buildPhase\n        } else if resolvedTargetSourceType(for: targetSource, at: path) == .folder {\n            chosenBuildPhase = .resources\n        } else if let buildPhase = buildPhases[path] {\n            chosenBuildPhase = buildPhase\n        } else {\n            chosenBuildPhase = getDefaultBuildPhase(for: path, targetType: targetType)\n        }\n\n        if chosenBuildPhase == .headers && targetType == .staticLibrary {\n            // Static libraries don't support the header build phase\n            // For public headers they need to be copied\n            if headerVisibility == .public {\n                chosenBuildPhase = .copyFiles(BuildPhaseSpec.CopyFilesSettings(\n                    destination: .productsDirectory,\n                    subpath: \"include/$(PRODUCT_NAME)\",\n                    phaseOrder: .preCompile\n                ))\n            } else {\n                chosenBuildPhase = nil\n            }\n        }\n\n        if chosenBuildPhase == .headers {\n            if headerVisibility != .project {\n                // Xcode doesn't write the default of project\n                attributes.append(headerVisibility.settingName)\n            }\n        }\n\n        if let flags = fileType?.compilerFlags {\n            compilerFlags += flags.joined(separator: \" \")\n        }\n\n        if !targetSource.compilerFlags.isEmpty {\n            if !compilerFlags.isEmpty {\n                compilerFlags += \" \"\n            }\n            compilerFlags += targetSource.compilerFlags.joined(separator: \" \")\n        }\n\n        if chosenBuildPhase == .sources && !compilerFlags.isEmpty {\n            settings[\"COMPILER_FLAGS\"] = .string(compilerFlags)\n        }\n\n        if !attributes.isEmpty {\n            settings[\"ATTRIBUTES\"] = .array(attributes)\n        }\n\n        if chosenBuildPhase == .resources && !assetTags.isEmpty {\n            settings[\"ASSET_TAGS\"] = .array(assetTags)\n        }\n        \n        let platforms = makeDestinationFilters(for: path, with: targetSource.destinationFilters, or: targetSource.inferDestinationFiltersByPath)\n        \n        let buildFile = PBXBuildFile(file: fileReference, settings: settings.isEmpty ? nil : settings, platformFilters: platforms)\n        return SourceFile(\n            path: path,\n            fileReference: fileReference,\n            buildFile: buildFile,\n            buildPhase: chosenBuildPhase\n        )\n    }\n\n    func getContainedFileReference(path: Path) -> PBXFileElement {\n        let createIntermediateGroups = project.options.createIntermediateGroups\n\n        let parentPath = path.parent()\n        let fileReference = getFileReference(path: path, inPath: parentPath)\n        let parentGroup = getGroup(\n            path: parentPath,\n            mergingChildren: [fileReference],\n            createIntermediateGroups: createIntermediateGroups,\n            hasCustomParent: false,\n            isBaseGroup: true\n        )\n\n        if createIntermediateGroups {\n            createIntermediaGroups(for: parentGroup, at: parentPath)\n        }\n        return fileReference\n    }\n\n    func getFileReference(path: Path, inPath: Path, name: String? = nil, sourceTree: PBXSourceTree = .group, lastKnownFileType: String? = nil) -> PBXFileElement {\n        let fileReferenceKey = path.string.lowercased()\n        if let fileReference = fileReferencesByPath[fileReferenceKey] {\n            return fileReference\n        } else {\n            let fileReferencePath = (try? path.relativePath(from: inPath)) ?? path\n            var fileReferenceName: String? = name ?? fileReferencePath.lastComponent\n            if fileReferencePath.string == fileReferenceName {\n                fileReferenceName = nil\n            }\n            let lastKnownFileType = lastKnownFileType ?? Xcode.fileType(path: path)\n\n            if path.extension == \"xcdatamodeld\" {\n                let versionedModels = (try? path.children()) ?? []\n\n                // Sort the versions alphabetically\n                let sortedPaths = versionedModels\n                    .filter { $0.extension == \"xcdatamodel\" }\n                    .sorted { $0.string.localizedStandardCompare($1.string) == .orderedAscending }\n\n                let modelFileReferences =\n                    sortedPaths.map { path in\n                        addObject(\n                            PBXFileReference(\n                                sourceTree: .group,\n                                lastKnownFileType: \"wrapper.xcdatamodel\",\n                                path: path.lastComponent\n                            )\n                        )\n                    }\n                // If no current version path is found we fall back to alphabetical\n                // order by taking the last item in the sortedPaths array\n                let currentVersionPath = findCurrentCoreDataModelVersionPath(using: versionedModels) ?? sortedPaths.last\n                let currentVersion: PBXFileReference? = {\n                    guard let indexOf = sortedPaths.firstIndex(where: { $0 == currentVersionPath }) else { return nil }\n                    return modelFileReferences[indexOf]\n                }()\n                let versionGroup = addObject(XCVersionGroup(\n                    currentVersion: currentVersion,\n                    path: fileReferencePath.string,\n                    sourceTree: sourceTree,\n                    versionGroupType: \"wrapper.xcdatamodel\",\n                    children: modelFileReferences\n                ))\n                fileReferencesByPath[fileReferenceKey] = versionGroup\n                return versionGroup\n            } else {\n                // For all extensions other than `xcdatamodeld`\n                let fileReference = addObject(\n                    PBXFileReference(\n                        sourceTree: sourceTree,\n                        name: fileReferenceName,\n                        lastKnownFileType: lastKnownFileType,\n                        path: fileReferencePath.string\n                    )\n                )\n                fileReferencesByPath[fileReferenceKey] = fileReference\n                return fileReference\n            }\n        }\n    }\n\n    /// returns a default build phase for a given path. This is based off the filename\n    private func getDefaultBuildPhase(for path: Path, targetType: PBXProductType) -> BuildPhaseSpec? {\n        if let buildPhase = getFileType(path: path)?.buildPhase {\n            return buildPhase\n        }\n        if let fileExtension = path.extension {\n            switch fileExtension {\n            case \"modulemap\":\n                guard targetType == .staticLibrary else { return nil }\n                return .copyFiles(BuildPhaseSpec.CopyFilesSettings(\n                    destination: .productsDirectory,\n                    subpath: \"include/$(PRODUCT_NAME)\",\n                    phaseOrder: .preCompile\n                ))\n            case \"swiftcrossimport\":\n                guard targetType == .framework else { return nil }\n                return .copyFiles(BuildPhaseSpec.CopyFilesSettings(\n                    destination: .productsDirectory,\n                    subpath: \"$(PRODUCT_NAME).framework/Modules\",\n                    phaseOrder: .preCompile\n                ))\n            default:\n                return .resources\n            }\n        }\n        return nil\n    }\n\n    /// Create a group or return an existing one at the path.\n    /// Any merged children are added to a new group or merged into an existing one.\n    private func getGroup(path: Path, name: String? = nil, mergingChildren children: [PBXFileElement], createIntermediateGroups: Bool, hasCustomParent: Bool, isBaseGroup: Bool) -> PBXGroup {\n        let groupReference: PBXGroup\n\n        if let cachedGroup = groupsByPath[path] {\n            var cachedGroupChildren = cachedGroup.children\n            for child in children {\n                // only add the children that aren't already in the cachedGroup\n                // Check equality by path and sourceTree because XcodeProj.PBXObject.== is very slow.\n                if !cachedGroupChildren.contains(where: { $0.name == child.name && $0.path == child.path && $0.sourceTree == child.sourceTree }) {\n                    cachedGroupChildren.append(child)\n                    child.parent = cachedGroup\n                }\n            }\n            cachedGroup.children = cachedGroupChildren\n            groupReference = cachedGroup\n        } else {\n\n            // lives outside the project base path\n            let isOutOfBasePath = !path.absolute().string.contains(project.basePath.absolute().string)\n\n            // whether the given path is a strict parent of the project base path\n            // e.g. foo/bar is a parent of foo/bar/baz, but not foo/baz\n            let isParentOfBasePath = isOutOfBasePath && ((try? path.isParent(of: project.basePath)) == true)\n\n            // has no valid parent paths\n            let isRootPath = (isBaseGroup && isOutOfBasePath && isParentOfBasePath) || path.parent() == project.basePath\n\n            // is a top level group in the project\n            let isTopLevelGroup = !hasCustomParent && ((isBaseGroup && !createIntermediateGroups) || isRootPath || isParentOfBasePath)\n\n            let groupName = name ?? path.lastComponent\n\n            let groupPath = resolveGroupPath(path, isTopLevelGroup: hasCustomParent || isTopLevelGroup)\n\n            let group = PBXGroup(\n                children: children,\n                sourceTree: .group,\n                name: groupName != groupPath ? groupName : nil,\n                path: groupPath\n            )\n            groupReference = addObject(group)\n            groupsByPath[path] = groupReference\n\n            if isTopLevelGroup {\n                rootGroups.insert(groupReference)\n            }\n        }\n        return groupReference\n    }\n\n    /// Creates a variant group or returns an existing one at the path\n    private func getVariantGroup(path: Path, inPath: Path) -> PBXVariantGroup {\n        let variantGroup: PBXVariantGroup\n        if let cachedGroup = variantGroupsByPath[path] {\n            variantGroup = cachedGroup\n        } else {\n            let group = PBXVariantGroup(\n                sourceTree: .group,\n                name: path.lastComponent\n            )\n            variantGroup = addObject(group)\n            variantGroupsByPath[path] = variantGroup\n        }\n        return variantGroup\n    }\n\n    /// Returns the expanded set of excluded paths for a target source by resolving its exclude glob patterns.\n    func expandedExcludes(for targetSource: TargetSource) -> Set<Path> {\n        getSourceMatches(targetSource: targetSource, patterns: targetSource.excludes)\n    }\n\n    /// Returns the expanded set of exception paths for a synced folder, including excludes and non-included files.\n    func syncedFolderExceptions(for targetSource: TargetSource, at syncedPath: Path) -> Set<Path> {\n        let excludePaths = expandedExcludes(for: targetSource)\n        if targetSource.includes.isEmpty {\n            return excludePaths\n        }\n\n        let includePaths = SortedArray(getSourceMatches(targetSource: targetSource, patterns: targetSource.includes))\n        var exceptions: Set<Path> = []\n\n        func findExceptions(in path: Path) {\n            guard let children = try? path.children() else { return }\n\n            for child in children {\n                if isIncludedPath(child, excludePaths: excludePaths, includePaths: includePaths) {\n                    if child.isDirectory && !Xcode.isDirectoryFileWrapper(path: child) {\n                        findExceptions(in: child)\n                    }\n                } else {\n                    exceptions.insert(child)\n                }\n            }\n        }\n\n        findExceptions(in: syncedPath)\n        return exceptions\n    }\n\n    /// Collects all the excluded paths within the targetSource\n    private func getSourceMatches(targetSource: TargetSource, patterns: [String]) -> Set<Path> {\n        let rootSourcePath = project.basePath + targetSource.path\n\n        return Set(\n            patterns.parallelMap { pattern in\n                guard !pattern.isEmpty else { return [] }\n                return Glob(pattern: \"\\(rootSourcePath)/\\(pattern)\")\n                    .map { Path($0) }\n                    .map {\n                        guard $0.isDirectory else {\n                            return [$0]\n                        }\n\n                        return (try? $0.recursiveChildren()) ?? []\n                    }\n                    .reduce([], +)\n            }\n            .reduce([], +)\n        )\n    }\n\n    /// Expands glob patterns in `explicitFolders` relative to the synced root path.\n    private func resolveExplicitFolders(targetSource: TargetSource) -> [String] {\n        let rootSourcePath = project.basePath + targetSource.path\n\n        return targetSource.explicitFolders.flatMap { pattern in\n            let matches = Glob(pattern: \"\\(rootSourcePath)/\\(pattern)\")\n                .map { Path($0) }\n                .filter { $0.isDirectory }\n                .compactMap { try? $0.relativePath(from: rootSourcePath).string }\n                .sorted()\n            return matches.isEmpty ? [pattern] : matches\n        }\n    }\n\n    /// Checks whether the path is not in any default or TargetSource excludes\n    func isIncludedPath(_ path: Path, excludePaths: Set<Path>, includePaths: SortedArray<Path>?) -> Bool {\n        return !defaultExcludedFiles.contains(where: { path.lastComponent == $0 })\n            && !(path.extension.map(defaultExcludedExtensions.contains) ?? false)\n            && !excludePaths.contains(path)\n            // If includes is empty, it's included. If it's not empty, the path either needs to match exactly, or it needs to be a direct parent of an included path.\n            && (includePaths.flatMap { _isIncludedPathSorted(path, sortedPaths: $0) } ?? true)\n    }\n    \n    private func _isIncludedPathSorted(_ path: Path, sortedPaths: SortedArray<Path>) -> Bool {\n        guard let idx = sortedPaths.firstIndex(where: { $0 >= path }) else { return false }\n        let foundPath = sortedPaths.value[idx]\n        return foundPath.description.hasPrefix(path.description)\n    }\n\n\n    /// Gets all the children paths that aren't excluded\n    private func getSourceChildren(targetSource: TargetSource, dirPath: Path, excludePaths: Set<Path>, includePaths: SortedArray<Path>?) throws -> [Path] {\n        try dirPath.children()\n            .filter {\n                if $0.isDirectory {\n                    let children = try $0.children()\n\n                    if children.isEmpty {\n                        return project.options.generateEmptyDirectories\n                    }\n\n                    return !children\n                        .filter { self.isIncludedPath($0, excludePaths: excludePaths, includePaths: includePaths) }\n                        .isEmpty\n                } else if $0.isFile {\n                    return self.isIncludedPath($0, excludePaths: excludePaths, includePaths: includePaths)\n                } else {\n                    return false\n                }\n            }\n    }\n\n    /// creates all the source files and groups they belong to for a given targetSource\n    private func getGroupSources(\n        targetType: PBXProductType,\n        targetSource: TargetSource,\n        path: Path,\n        isBaseGroup: Bool,\n        hasCustomParent: Bool,\n        excludePaths: Set<Path>,\n        includePaths: SortedArray<Path>?,\n        buildPhases: [Path: BuildPhaseSpec]\n    ) throws -> (sourceFiles: [SourceFile], groups: [PBXGroup]) {\n\n        let children = try getSourceChildren(targetSource: targetSource, dirPath: path, excludePaths: excludePaths, includePaths: includePaths)\n\n        let createIntermediateGroups = targetSource.createIntermediateGroups ?? project.options.createIntermediateGroups\n        let nonLocalizedChildren = children.filter { $0.extension != \"lproj\" }\n        let stringCatalogChildren = children.filter { $0.extension == \"xcstrings\" }\n\n        let directories = nonLocalizedChildren\n            .filter {\n                if let fileType = getFileType(path: $0) {\n                    return !fileType.file\n                } else {\n                    return $0.isDirectory && !Xcode.isDirectoryFileWrapper(path: $0)\n                }\n            }\n\n        let filePaths = nonLocalizedChildren\n            .filter {\n                if let fileType = getFileType(path: $0) {\n                    return fileType.file\n                } else {\n                    return $0.isFile || $0.isDirectory && Xcode.isDirectoryFileWrapper(path: $0)\n                }\n            }\n\n        let localisedDirectories = children\n            .filter { $0.extension == \"lproj\" }\n\n        var groupChildren: [PBXFileElement] = filePaths.map { getFileReference(path: $0, inPath: path) }\n        var allSourceFiles: [SourceFile] = filePaths.map {\n            generateSourceFile(targetType: targetType, targetSource: targetSource, path: $0, buildPhases: buildPhases)\n        }\n        var groups: [PBXGroup] = []\n\n        for path in directories {\n\n            let subGroups = try getGroupSources(\n                targetType: targetType,\n                targetSource: targetSource,\n                path: path,\n                isBaseGroup: false,\n                hasCustomParent: false,\n                excludePaths: excludePaths,\n                includePaths: includePaths,\n                buildPhases: buildPhases\n            )\n\n            guard !subGroups.sourceFiles.isEmpty || project.options.generateEmptyDirectories else {\n                continue\n            }\n\n            allSourceFiles += subGroups.sourceFiles\n\n            if let firstGroup = subGroups.groups.first {\n                groupChildren.append(firstGroup)\n                groups += subGroups.groups\n            } else if project.options.generateEmptyDirectories {\n                groups += subGroups.groups\n            }\n        }\n\n        // find the base localised directory\n        let baseLocalisedDirectory: Path? = {\n            func findLocalisedDirectory(by languageId: String) -> Path? {\n                localisedDirectories.first { $0.lastComponent == \"\\(languageId).lproj\" }\n            }\n            return findLocalisedDirectory(by: \"Base\") ??\n                findLocalisedDirectory(by: NSLocale.canonicalLanguageIdentifier(from: project.options.developmentLanguage ?? \"en\"))\n        }()\n\n        knownRegions.formUnion(localisedDirectories.map { $0.lastComponentWithoutExtension })\n        \n        // XCode 15 - Detect known regions from locales present in string catalogs\n        \n        let stringCatalogsLocales = stringCatalogChildren\n            .compactMap { StringCatalog(from: $0) }\n            .reduce(Set<String>(), { partialResult, stringCatalog in\n                partialResult.union(stringCatalog.includedLocales)\n            })\n        knownRegions.formUnion(stringCatalogsLocales)\n\n        // create variant groups of the base localisation first\n        var baseLocalisationVariantGroups: [PBXVariantGroup] = []\n\n        if let baseLocalisedDirectory = baseLocalisedDirectory {\n            let filePaths = try baseLocalisedDirectory.children()\n                .filter { self.isIncludedPath($0, excludePaths: excludePaths, includePaths: includePaths) }\n                .sorted()\n            for filePath in filePaths {\n                let variantGroup = getVariantGroup(path: filePath, inPath: path)\n                groupChildren.append(variantGroup)\n                baseLocalisationVariantGroups.append(variantGroup)\n\n                let sourceFile = generateSourceFile(targetType: targetType,\n                                                    targetSource: targetSource,\n                                                    path: filePath,\n                                                    fileReference: variantGroup,\n                                                    buildPhases: buildPhases)\n                allSourceFiles.append(sourceFile)\n            }\n        }\n\n        // add references to localised resources into base localisation variant groups\n        for localisedDirectory in localisedDirectories {\n            let localisationName = localisedDirectory.lastComponentWithoutExtension\n            let filePaths = try localisedDirectory.children()\n                .filter { self.isIncludedPath($0, excludePaths: excludePaths, includePaths: includePaths) }\n                .sorted { $0.lastComponent < $1.lastComponent }\n            for filePath in filePaths {\n                // find base localisation variant group\n                // ex: Foo.strings will be added to Foo.strings or Foo.storyboard variant group\n                let variantGroup = baseLocalisationVariantGroups\n                    .first {\n                        Path($0.name!).lastComponent == filePath.lastComponent\n\n                    } ?? baseLocalisationVariantGroups.first {\n                        Path($0.name!).lastComponentWithoutExtension == filePath.lastComponentWithoutExtension\n                    }\n\n                let fileReference = getFileReference(\n                    path: filePath,\n                    inPath: path,\n                    name: variantGroup != nil ? localisationName : filePath.lastComponent\n                )\n\n                if let variantGroup = variantGroup {\n                    if !variantGroup.children.contains(fileReference) {\n                        variantGroup.children.append(fileReference)\n                    }\n                } else {\n                    // add SourceFile to group if there is no Base.lproj directory\n                    let sourceFile = generateSourceFile(targetType: targetType,\n                                                        targetSource: targetSource,\n                                                        path: filePath,\n                                                        fileReference: fileReference,\n                                                        buildPhases: buildPhases)\n                    allSourceFiles.append(sourceFile)\n                    groupChildren.append(fileReference)\n                }\n            }\n        }\n\n        let group = getGroup(\n            path: path,\n            mergingChildren: groupChildren,\n            createIntermediateGroups: createIntermediateGroups,\n            hasCustomParent: hasCustomParent,\n            isBaseGroup: isBaseGroup\n        )\n        if createIntermediateGroups {\n            createIntermediaGroups(for: group, at: path)\n        }\n\n        groups.insert(group, at: 0)\n        return (allSourceFiles, groups)\n    }\n\n    /// creates source files\n    private func getSourceFiles(targetType: PBXProductType, targetSource: TargetSource, buildPhases: [Path: BuildPhaseSpec]) throws -> [SourceFile] {\n\n        // generate excluded paths\n        let path = project.basePath + targetSource.path\n        let excludePaths = getSourceMatches(targetSource: targetSource, patterns: targetSource.excludes)\n        // generate included paths. Excluded paths will override this.\n        let includePaths = targetSource.includes.isEmpty ? nil : getSourceMatches(targetSource: targetSource, patterns: targetSource.includes)\n\n        let type = resolvedTargetSourceType(for: targetSource, at: path)\n\n        let customParentGroups = (targetSource.group ?? \"\").split(separator: \"/\").map { String($0) }\n        let hasCustomParent = !customParentGroups.isEmpty\n\n        let createIntermediateGroups = targetSource.createIntermediateGroups ?? project.options.createIntermediateGroups\n\n        var sourceFiles: [SourceFile] = []\n        let sourceReference: PBXFileElement\n        var sourcePath = path\n        switch type {\n        case .folder:\n            let fileReference = getFileReference(\n                path: path,\n                inPath: project.basePath,\n                name: targetSource.name ?? path.lastComponent,\n                sourceTree: .sourceRoot,\n                lastKnownFileType: \"folder\"\n            )\n\n            if !(createIntermediateGroups || hasCustomParent) || path.parent() == project.basePath {\n                rootGroups.insert(fileReference)\n            }\n\n            let sourceFile = generateSourceFile(targetType: targetType, targetSource: targetSource, path: path, buildPhases: buildPhases)\n\n            sourceFiles.append(sourceFile)\n            sourceReference = fileReference\n        case .file:\n            let parentPath = path.parent()\n            let fileReference = getFileReference(path: path, inPath: parentPath, name: targetSource.name)\n\n            let sourceFile = generateSourceFile(targetType: targetType, targetSource: targetSource, path: path, buildPhases: buildPhases)\n\n            if hasCustomParent {\n                sourcePath = path\n                sourceReference = fileReference\n            } else if parentPath == project.basePath {\n                sourcePath = path\n                sourceReference = fileReference\n                rootGroups.insert(fileReference)\n            } else {\n                let parentGroup = getGroup(\n                    path: parentPath,\n                    mergingChildren: [fileReference],\n                    createIntermediateGroups: createIntermediateGroups,\n                    hasCustomParent: hasCustomParent,\n                    isBaseGroup: true\n                )\n                sourcePath = parentPath\n                sourceReference = parentGroup\n            }\n            sourceFiles.append(sourceFile)\n\n        case .group:\n            if targetSource.optional && !path.exists {\n                // This group is missing, so if's optional just return an empty array\n                return []\n            }\n\n            let (groupSourceFiles, groups) = try getGroupSources(\n                targetType: targetType,\n                targetSource: targetSource,\n                path: path,\n                isBaseGroup: true,\n                hasCustomParent: hasCustomParent,\n                excludePaths: excludePaths,\n                includePaths: includePaths.flatMap(SortedArray.init(_:)),\n                buildPhases: buildPhases\n            )\n\n            let group = groups.first!\n            if let name = targetSource.name {\n                group.name = name\n            }\n\n            sourceFiles += groupSourceFiles\n            sourceReference = group\n        case .syncedFolder:\n\n            let relativePath = (try? path.relativePath(from: project.basePath)) ?? path\n            let resolvedExplicitFolders = resolveExplicitFolders(targetSource: targetSource)\n\n            let syncedRootGroup: PBXFileSystemSynchronizedRootGroup\n            if let existingGroup = syncedGroupsByPath[relativePath.string] {\n                syncedRootGroup = existingGroup\n                let newExplicitFolders = Set(syncedRootGroup.explicitFolders ?? [])\n                    .union(resolvedExplicitFolders)\n                    .sorted()\n                syncedRootGroup.explicitFolders = newExplicitFolders\n            } else {\n                syncedRootGroup = PBXFileSystemSynchronizedRootGroup(\n                    sourceTree: .group,\n                    path: relativePath.string,\n                    name: targetSource.name,\n                    explicitFileTypes: [:],\n                    exceptions: [],\n                    explicitFolders: resolvedExplicitFolders\n                )\n                addObject(syncedRootGroup)\n                syncedGroupsByPath[relativePath.string] = syncedRootGroup\n            }\n            sourceReference = syncedRootGroup\n\n            if !(createIntermediateGroups || hasCustomParent) || path.parent() == project.basePath {\n                rootGroups.insert(syncedRootGroup)\n            }\n\n            let sourceFile = generateSourceFile(\n                targetType: targetType,\n                targetSource: targetSource,\n                path: path,\n                fileReference: syncedRootGroup,\n                buildPhases: buildPhases\n            )\n            sourceFiles.append(sourceFile)\n        }\n\n        if hasCustomParent {\n            createParentGroups(customParentGroups, for: sourceReference)\n            try makePathRelative(for: sourceReference, at: path)\n        } else if createIntermediateGroups {\n            createIntermediaGroups(for: sourceReference, at: sourcePath)\n            if type != .folder {\n                try makePathRelative(for: sourceReference, at: sourcePath)\n            }\n        }\n\n        return sourceFiles\n    }\n\n    /// Returns the resolved `SourceType` for a given `TargetSource`.\n    ///\n    /// While `TargetSource` declares `type`, its optional and in the event that the value is not defined then we must resolve a sensible default based on the path of the source.\n    private func resolvedTargetSourceType(for targetSource: TargetSource, at path: Path) -> SourceType {\n        if let chosenType = targetSource.type {\n            return chosenType\n        } else {\n            if path.isFile || path.extension != nil {\n                return .file\n            } else if let sourceType = project.options.defaultSourceDirectoryType {\n                return sourceType\n            } else {\n                return .group\n            }\n        }\n    }\n\n    private func createParentGroups(_ parentGroups: [String], for fileElement: PBXFileElement) {\n        guard let parentName = parentGroups.last else {\n            return\n        }\n\n        let parentPath = project.basePath + Path(parentGroups.joined(separator: \"/\"))\n        let parentPathExists = parentPath.exists\n        let parentGroupAlreadyExists = groupsByPath[parentPath] != nil\n\n        let parentGroup = getGroup(\n            path: parentPath,\n            mergingChildren: [fileElement],\n            createIntermediateGroups: false,\n            hasCustomParent: false,\n            isBaseGroup: parentGroups.count == 1\n        )\n\n        // As this path is a custom group, remove the path reference\n        if !parentPathExists {\n            parentGroup.name = String(parentName)\n            parentGroup.path = nil\n        }\n\n        if !parentGroupAlreadyExists {\n            createParentGroups(parentGroups.dropLast(), for: parentGroup)\n        }\n    }\n\n    // Add groups for all parents recursively\n    private func createIntermediaGroups(for fileElement: PBXFileElement, at path: Path) {\n\n        let parentPath = path.parent()\n        guard parentPath != project.basePath else {\n            // we've reached the top\n            return\n        }\n\n        let hasParentGroup = groupsByPath[parentPath] != nil\n        if !hasParentGroup {\n            do {\n                // if the path is a parent of the project base path (or if calculating that fails)\n                // do not create a parent group\n                // e.g. for project path foo/bar/baz\n                //  - create foo/baz\n                //  - create baz/\n                //  - do not create foo\n                let pathIsParentOfProject = try path.isParent(of: project.basePath)\n                if pathIsParentOfProject { return }\n            } catch {\n                return\n            }\n        }\n        let parentGroup = getGroup(\n            path: parentPath,\n            mergingChildren: [fileElement],\n            createIntermediateGroups: true,\n            hasCustomParent: false,\n            isBaseGroup: false\n        )\n\n        if !hasParentGroup {\n            createIntermediaGroups(for: parentGroup, at: parentPath)\n        }\n    }\n\n    // Make the fileElement path and name relative to its parents aggregated paths\n    private func makePathRelative(for fileElement: PBXFileElement, at path: Path) throws {\n        // This makes the fileElement path relative to its parent and not to the project. Xcode then rebuilds the actual\n        // path for the file based on the hierarchy this fileElement lives in.\n        var paths: [String] = []\n        var element: PBXFileElement = fileElement\n        while true {\n            guard let parent = element.parent else { break }\n\n            if let path = parent.path {\n                paths.insert(path, at: 0)\n            }\n\n            element = parent\n        }\n\n        let completePath = (basePath) + Path(paths.joined(separator: \"/\"))\n        let relativePath = try path.relativePath(from: completePath)\n        let relativePathString = relativePath.string\n\n        if relativePathString != fileElement.path {\n            fileElement.path = relativePathString\n            fileElement.name = relativePath.lastComponent\n        }\n    }\n\n    private func findCurrentCoreDataModelVersionPath(using versionedModels: [Path]) -> Path? {\n        // Find and parse the current version model stored in the .xccurrentversion file\n        guard\n            let versionPath = versionedModels.first(where: { $0.lastComponent == \".xccurrentversion\" }),\n            let data = try? versionPath.read(),\n            let plist = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [String: Any],\n            let versionString = plist[\"_XCCurrentVersionName\"] as? String else {\n            return nil\n        }\n        return versionedModels.first(where: { $0.lastComponent == versionString })\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/StringCatalogDecoding.swift",
    "content": "import Foundation\nimport JSONUtilities\nimport PathKit\n\nstruct StringCatalog {\n    \n/**\n*       Sample string catalog:\n     \n*     {\n*        \"sourceLanguage\" : \"en\",\n*        \"strings\" : {\n*            \"foo\" : {\n*                \"localizations\" : {\n*                    \"en\" : {\n*                        ...\n*                    },\n*                    \"es\" : {\n*                        ...\n*                    },\n*                    \"it\" : {\n*                        ...\n*                    }\n*                }\n*            }\n*        }\n*     }\n*/\n    \n    private struct CatalogItem {\n        private enum JSONKeys: String {\n            case localizations\n        }\n        \n        private let key: String\n        let locales: Set<String>\n        \n        init?(key: String, from jsonDictionary: JSONDictionary) {\n            guard let localizations = jsonDictionary[JSONKeys.localizations.rawValue] as? JSONDictionary else {\n                return nil\n            }\n            \n            self.key = key\n            self.locales = Set(localizations.keys)\n        }\n    }\n    \n    private enum JSONKeys: String {\n        case strings\n    }\n    \n    private let strings: [CatalogItem]\n    \n    init?(from path: Path) {\n        guard let catalogDictionary = try? JSONDictionary.from(url: path.url),\n              let catalog = StringCatalog(from: catalogDictionary) else {\n            return nil\n        }\n        \n        self = catalog\n    }\n    \n    private init?(from jsonDictionary: JSONDictionary) {\n        guard let stringsDictionary = jsonDictionary[JSONKeys.strings.rawValue] as? JSONDictionary else {\n            return nil\n        }\n\n        self.strings = stringsDictionary.compactMap { key, value -> CatalogItem? in\n            guard let stringDictionary = value as? JSONDictionary else {\n                return nil\n            }\n            \n            return CatalogItem(key: key, from: stringDictionary)\n        }\n    }\n    \n    var includedLocales: Set<String> {\n        strings.reduce(Set<String>(), { partialResult, catalogItem in\n            partialResult.union(catalogItem.locales)\n        })\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/Version.swift",
    "content": "import Foundation\nimport ProjectSpec\n\nextension Project {\n\n    public var xcodeVersion: String {\n        XCodeVersion.parse(options.xcodeVersion ?? \"14.3\")\n    }\n\n    public var projectFormat: ProjectFormat {\n        options.projectFormat.flatMap(ProjectFormat.init) ?? .default\n    }\n\n    var schemeVersion: String {\n        \"1.7\"\n    }\n\n    var compatibilityVersion: String? {\n        projectFormat.compatibilityVersion\n    }\n\n    var objectVersion: UInt {\n        projectFormat.objectVersion\n    }\n\n    var preferredProjectObjectVersion: UInt? {\n        projectFormat.preferredProjectObjectVersion\n    }\n\n    var minimizedProjectReferenceProxies: Int {\n        1\n    }\n}\n\npublic struct XCodeVersion {\n\n    public static func parse(_ version: String) -> String {\n        if version.contains(\".\") {\n            let parts = version.split(separator: \".\").map(String.init)\n            var string = \"\"\n            let major = parts[0]\n            if major.count == 1 {\n                string = \"0\\(major)\"\n            } else {\n                string = major\n            }\n\n            let minor = parts[1]\n            string += minor\n\n            if parts.count > 2 {\n                let patch = parts[2]\n                string += patch\n            } else {\n                string += \"0\"\n            }\n            return string\n        } else if version.count == 2 {\n            return \"\\(version)00\"\n        } else if version.count == 1 {\n            return \"0\\(version)00\"\n        } else {\n            return version\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/XcodeGenKit/XCProjExtensions.swift",
    "content": "import Foundation\nimport PathKit\nimport XcodeProj\n\nextension PBXFileElement {\n    public var nameOrPath: String {\n        return name ?? path ?? \"\"\n    }\n\n    static func sortByNamePath(_ lhs: PBXFileElement, _ rhs: PBXFileElement) -> Bool {\n        return lhs.namePathSortString.localizedStandardCompare(rhs.namePathSortString) == .orderedAscending\n    }\n\n    private var namePathSortString: String {\n        // This string needs to be unique for all combinations of name & path or the order won't be stable.\n        return \"\\(name ?? path ?? \"\")\\t\\(name ?? \"\")\\t\\(path ?? \"\")\"\n    }\n}\n\nextension PBXProj {\n\n    public func printGroups() -> String {\n        guard let project = projects.first,\n            let mainGroup = project.mainGroup else {\n            return \"\"\n        }\n        return printGroup(group: mainGroup)\n    }\n\n    public func printGroup(group: PBXGroup) -> String {\n        var string = group.nameOrPath\n        for child in group.children {\n            if let group = child as? PBXGroup {\n                string += \"\\n 📁 \" + printGroup(group: group).replacingOccurrences(of: \"\\n \", with: \"\\n    \")\n            } else if let fileReference = child as? PBXFileReference {\n                string += \"\\n 📄 \" + fileReference.nameOrPath\n            } else if let variantGroup = child as? PBXVariantGroup {\n                string += \"\\n 🌎 \" + variantGroup.nameOrPath\n            } else if let versionGroup = child as? XCVersionGroup {\n                string += \"\\n 🔢 \" + versionGroup.nameOrPath\n            } else if let syncedFolder = child as? PBXFileSystemSynchronizedRootGroup {\n                string += \"\\n 📁 \" + syncedFolder.nameOrPath\n            }\n        }\n        return string\n    }\n}\n\nextension Dictionary {\n\n    public var valueArray: [Value] {\n        Array(values)\n    }\n}\n\nextension Xcode {\n\n    public static func fileType(path: Path, productType: PBXProductType? = nil) -> String? {\n        guard let fileExtension = path.extension else { return nil }\n        switch (fileExtension, productType) {\n        // cases that aren't handled (yet) in XcodeProj.\n        case (\"appex\", .extensionKitExtension):\n            return \"wrapper.extensionkit-extension\"\n        case (\"swiftcrossimport\", _):\n            return \"wrapper.swiftcrossimport\"\n        case (\"xcstrings\", _):\n            return \"text.json.xcstrings\"\n        case (\"icon\", _):\n            return \"wrapper.icon\"\n        default:\n            // fallback to XcodeProj defaults\n            return Xcode.filetype(extension: fileExtension)\n        }\n    }\n\n    public static func isDirectoryFileWrapper(path: Path) -> Bool {\n        guard path.isDirectory else { return false }\n        return fileType(path: path) != nil\n    }\n}\n"
  },
  {
    "path": "Tests/FixtureTests/FixtureTests.swift",
    "content": "import PathKit\nimport ProjectSpec\nimport Spectre\nimport XcodeGenKit\nimport XcodeProj\nimport XCTest\nimport TestSupport\n\nclass FixtureTests: XCTestCase {\n\n    func testProjectFixture() throws {\n        try skipIfNecessary()\n        describe {\n            $0.it(\"generates Test Project\") {\n                try generateXcodeProject(specPath: fixturePath + \"TestProject/AnotherProject/project.yml\")\n                try generateXcodeProject(specPath: fixturePath + \"TestProject/project.yml\")\n            }\n            $0.it(\"generates Carthage Project\") {\n                try generateXcodeProject(specPath: fixturePath + \"CarthageProject/project.yml\")\n            }\n            $0.it(\"generates SPM Project\") {\n                try generateXcodeProject(specPath: fixturePath + \"SPM/project.yml\")\n            }\n        }\n    }\n}\n\nprivate func generateXcodeProject(specPath: Path, file: String = #file, line: Int = #line) throws {\n    let project = try Project(path: specPath)\n    let generator = ProjectGenerator(project: project)\n    let writer = FileWriter(project: project)\n    let xcodeProject = try generator.generateXcodeProject(userName: \"someUser\")\n    try writer.writeXcodeProject(xcodeProject)\n    try writer.writePlists()\n}\n"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/.gitignore",
    "content": "Carthage/Build/iOS\nCarthage/Build/watchOS\nCarthage/Build/tvOS\nCarthage/Build/Mac\nCarthage/Checkouts\n"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Cartfile",
    "content": "github \"antitypical/Result\"\ngithub \"rpassis/CarthageTestFixture\"\ngithub \"ReactiveCocoa/ReactiveSwift\" ~> 4.0\ngithub \"ReactiveCocoa/ReactiveCocoa\" ~> 8.0\n"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Cartfile.resolved",
    "content": "github \"ReactiveCocoa/ReactiveCocoa\" \"8.0.2\"\ngithub \"ReactiveCocoa/ReactiveSwift\" \"4.0.0\"\ngithub \"antitypical/Result\" \"4.1.0\"\ngithub \"rpassis/CarthageTestFixture\" \"1.0\"\n"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Carthage/Build/.Alamofire.version",
    "content": "{\n  \"Mac\" : [\n    {\n      \"name\" : \"Alamofire\",\n      \"hash\" : \"c8ee4910ecef2738eccd34a7abcae7d6561c0d709fbc301f660391018bf654b5\"\n    }\n  ],\n  \"watchOS\" : [\n    {\n      \"name\" : \"Alamofire\",\n      \"hash\" : \"960f25b2b83d186bf62a05e59af8a6f7c99ac20201f6d948106c52917f29b7da\"\n    }\n  ],\n  \"tvOS\" : [\n    {\n      \"name\" : \"Alamofire\",\n      \"hash\" : \"b8994794ee1378f98ceb7d294c84990d60fdabcc5f5a7d8386e71315ff583f1f\"\n    }\n  ],\n  \"commitish\" : \"4.7.2\",\n  \"iOS\" : [\n    {\n      \"name\" : \"Alamofire\",\n      \"hash\" : \"a000ec6f95d6fd12843007ba8c22e69c64e922b45ccfe34e1d38200b54e5e391\"\n    }\n  ]\n}"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Carthage/Build/.CarthageTestFixture.version",
    "content": "{\n  \"Mac\" : [\n    {\n      \"name\" : \"CarthageTestFixture\",\n      \"hash\" : \"071b5d10a76f763129c32223af9f0e34674f2d6766e1b8dd0658c634c750d88f\"\n    },\n    {\n      \"name\" : \"DependencyFixtureB\",\n      \"hash\" : \"65d7482cfefd8952762f57de885e9929aae8e6fe6a1c556e6bad75811f8d096f\"\n    },\n    {\n      \"name\" : \"DependencyFixtureA\",\n      \"hash\" : \"ada254978598a68cce0e7cc919549e4888793ad2e9082fca38a533b9731710d5\"\n    }\n  ],\n  \"watchOS\" : [\n    {\n      \"name\" : \"CarthageTestFixture\",\n      \"hash\" : \"6f5aeb82a53091a5573be1b16b58156a2444f8a568e4a4b4914a5658a11ce91c\"\n    },\n    {\n      \"name\" : \"DependencyFixtureB\",\n      \"hash\" : \"a252cd58636f621f39daa48f89e881665d4d1da1debaf46d7ba926f59720e928\"\n    },\n    {\n      \"name\" : \"DependencyFixtureA\",\n      \"hash\" : \"1f2df2a6f33953eb61d56c195dcf2b102d458dcec4ad93b70d1f802cf1d01081\"\n    }\n  ],\n  \"tvOS\" : [\n    {\n      \"name\" : \"CarthageTestFixture\",\n      \"hash\" : \"4d0c084ea320ef9d2e216f60956bdb50e4975887f19f4817b26657a3796ab411\"\n    },\n    {\n      \"name\" : \"DependencyFixtureA\",\n      \"hash\" : \"f257e4d0348770f210196dedaf16b51d54b255ec3e9e7b1cce50ea74e57d61b3\"\n    },\n    {\n      \"name\" : \"DependencyFixtureB\",\n      \"hash\" : \"47377bbe103c06a25150aece9f48ac4b42065bc0c4543a7249395482676a3c38\"\n    }\n  ],\n  \"commitish\" : \"1.0\",\n  \"iOS\" : [\n    {\n      \"name\" : \"CarthageTestFixture\",\n      \"hash\" : \"7c2a74fc024a50478bec9ca8833302b2850d1971aadc6c9d890266ea29af6966\"\n    },\n    {\n      \"name\" : \"DependencyFixtureA\",\n      \"hash\" : \"d9979f6f61ad275ae8d4fdf575df66fde694f584cc7f58f2dcb86e9fe81b9a3a\"\n    },\n    {\n      \"name\" : \"DependencyFixtureB\",\n      \"hash\" : \"1c418bb70678e1f47cffc0ad8d8e6e014372ad9936fff6302abb86511980ac01\"\n    }\n  ]\n}"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Carthage/Build/.ReactiveCocoa.version",
    "content": "{\n  \"Mac\" : [\n    {\n      \"name\" : \"ReactiveMapKit\",\n      \"hash\" : \"ca2fed26f8381df41034bab95e4751c59a2e6790fb2a6def8f4bc9cdee0c5733\"\n    },\n    {\n      \"name\" : \"ReactiveMapKit\",\n      \"hash\" : \"ca2fed26f8381df41034bab95e4751c59a2e6790fb2a6def8f4bc9cdee0c5733\"\n    },\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"944bf96ea2e3431d7c70daef2c5664586439ca59e92092983acb1f36e3cb7f50\"\n    },\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"944bf96ea2e3431d7c70daef2c5664586439ca59e92092983acb1f36e3cb7f50\"\n    }\n  ],\n  \"watchOS\" : [\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"f7634a0c6323009b856c6cd6b0d76e9727006289b0edc1cb8a97b85f6549e16c\"\n    }\n  ],\n  \"tvOS\" : [\n    {\n      \"name\" : \"ReactiveMapKit\",\n      \"hash\" : \"19c5331921afd44ec907b2dda06a522cf7f106580d689b39c0ffea989efa558a\"\n    },\n    {\n      \"name\" : \"ReactiveMapKit\",\n      \"hash\" : \"19c5331921afd44ec907b2dda06a522cf7f106580d689b39c0ffea989efa558a\"\n    },\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"6fd1ed75f76420c86c66d2900d37f66ea6c9378007bf9c52aa8ee0806ae24477\"\n    },\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"6fd1ed75f76420c86c66d2900d37f66ea6c9378007bf9c52aa8ee0806ae24477\"\n    }\n  ],\n  \"commitish\" : \"8.0.2\",\n  \"iOS\" : [\n    {\n      \"name\" : \"ReactiveMapKit\",\n      \"hash\" : \"8d1f84508d7403d8acdb4c188377777273ceba4eb6237728f97dcc18d41b94c8\"\n    },\n    {\n      \"name\" : \"ReactiveMapKit\",\n      \"hash\" : \"8d1f84508d7403d8acdb4c188377777273ceba4eb6237728f97dcc18d41b94c8\"\n    },\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"3ecd35da18aeade9d027be56daa4a925fbf7fc05fd7d559260ef2fc7945fb840\"\n    },\n    {\n      \"name\" : \"ReactiveCocoa\",\n      \"hash\" : \"3ecd35da18aeade9d027be56daa4a925fbf7fc05fd7d559260ef2fc7945fb840\"\n    }\n  ]\n}"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Carthage/Build/.ReactiveSwift.version",
    "content": "{\n  \"Mac\" : [\n    {\n      \"name\" : \"ReactiveSwift\",\n      \"hash\" : \"ed8de3ce3e03c940ba43f99c5de552b9af89c2d850bb8afb6e5f9f493489f45d\"\n    }\n  ],\n  \"watchOS\" : [\n    {\n      \"name\" : \"ReactiveSwift\",\n      \"hash\" : \"c015d0bc75885b9358870ef16cb9e67b5ef8bcaa3a5ec90d513d623a1091f7eb\"\n    }\n  ],\n  \"tvOS\" : [\n    {\n      \"name\" : \"ReactiveSwift\",\n      \"hash\" : \"4d4c3af69ff5b35bec1b76638989b29cb2d785536b2e124c5cfd6660d3eb2640\"\n    }\n  ],\n  \"commitish\" : \"4.0.0\",\n  \"iOS\" : [\n    {\n      \"name\" : \"ReactiveSwift\",\n      \"hash\" : \"bdf6f01656281b630b9f323625fc5134bb4fe4e061ac1885e3dc6498f9cad7dc\"\n    }\n  ]\n}"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Carthage/Build/.Result.version",
    "content": "{\n  \"Mac\" : [\n    {\n      \"name\" : \"Result\",\n      \"hash\" : \"a608337c467d3ef16f53035c587dab84152fc14b3b4c8b597c5a973d3bfd0d63\"\n    }\n  ],\n  \"watchOS\" : [\n    {\n      \"name\" : \"Result\",\n      \"hash\" : \"24680c05790afb8bd5d1ae8f1960905210546943e13fdea8e2994c2f8efdc0a5\"\n    }\n  ],\n  \"tvOS\" : [\n    {\n      \"name\" : \"Result\",\n      \"hash\" : \"dca6d7e70e25cfa2b3363a0839dd13271b4da374f22d6cd357cf45b39299c17b\"\n    }\n  ],\n  \"commitish\" : \"4.1.0\",\n  \"iOS\" : [\n    {\n      \"name\" : \"Result\",\n      \"hash\" : \"5ad79b86004be535ee374685fbbd95db8d91f8c0458d3534aacf426930c7bbf6\"\n    }\n  ]\n}"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Project.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 77;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t044DBCB804B0066EDF0B69F8 /* DependencyFixtureB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B7FE5849A5B2AAD3E62D3A7 /* DependencyFixtureB.framework */; };\n\t\t10B5DCB476B73C344D90E179 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3F65F497639D85FA73DECA8 /* ReactiveSwift.framework */; };\n\t\t11D327D6D70177DDC0A79581 /* ReactiveMapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8E5AC3513ADA944932071EC /* ReactiveMapKit.framework */; };\n\t\t192B14D32FB49F4BF60C9908 /* DependencyFixtureB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BACF4A03F73DCFC3D95C21A /* DependencyFixtureB.framework */; };\n\t\t199F923C0D8B980562D75B2D /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C206A943C9E4A6803327024F /* ReactiveCocoa.framework */; };\n\t\t21CA04F29CD0DEB0DD27B808 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5AC2545AE4D4F7F44E2E9B /* Result.framework */; };\n\t\t307B5322FC5A220652BA6FE0 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D296BB7355994040E197A1EE /* Result.framework */; };\n\t\t34840A4B524AECE0CB665CCC /* DependencyFixtureB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 685E6928BB8552F257AF32A1 /* DependencyFixtureB.framework */; };\n\t\t3674EA49FAD6B59A4548DD6C /* CarthageTestFixture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50B5CD1B9C7CDDBA1A9B530E /* CarthageTestFixture.framework */; };\n\t\t50774BBEADF9BEC85EEB7789 /* DependencyFixtureA.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9CBE843396A0F73A18F4B11 /* DependencyFixtureA.framework */; };\n\t\t53984F64C12E67CDD10C2238 /* ReactiveMapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E7DD996C029F078EA21CB67 /* ReactiveMapKit.framework */; };\n\t\t55B624A520B0E35A386B6569 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D437562D61F4BB3DE6378823 /* ReactiveCocoa.framework */; };\n\t\t58CB7129BEAF736118826A76 /* DependencyFixtureB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80192E4B3F765386B9E8CCC5 /* DependencyFixtureB.framework */; };\n\t\t5BCC106D55292C73C015FAB1 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2073C309D451D8C3BDD03C1B /* Alamofire.framework */; };\n\t\t5C7583816F6826B7D7DCD018 /* DependencyFixtureA.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D57001AD1EEEB31B0EEEBE2 /* DependencyFixtureA.framework */; };\n\t\t7881D9B16F8FD97E7ACD27E5 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80FF7051B3E5445E5E0E9770 /* ReactiveCocoa.framework */; };\n\t\t82F5012DAD668BFCCBA5CC6D /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9010572AFE5F328D1A4F35E1 /* Alamofire.framework */; };\n\t\t90429469A473C6702082B4B7 /* CarthageTestFixture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2AA735E34BB5D2B7DA7212B /* CarthageTestFixture.framework */; };\n\t\t92E4113033B920B0830492B6 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB9DC024AC7A05E4437051CB /* ReactiveSwift.framework */; };\n\t\t9B4B21707CB152E15BE7ECBD /* DependencyFixtureA.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BFA0DB3F2851A12A91DABFB /* DependencyFixtureA.framework */; };\n\t\t9DF5931DAD58C35B830A0A75 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B76E17CE3574081D5BF45B44 /* Result.framework */; };\n\t\t9EBFD7ADF57175109DE0EA94 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25C6E95FE2D09F3D963EE98A /* Alamofire.framework */; };\n\t\tA1163E2229C5AC64A8DFF967 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD62DEFF074E2C4A35C6F30 /* ReactiveCocoa.framework */; };\n\t\tA1AEAAB53EAEDA1C307871FA /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB178D03E75929F3F5B10C56 /* Result.framework */; };\n\t\tA7732A9A7B252C45427FCE62 /* CarthageTestFixture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8172E4733F98AD213CB42FA9 /* CarthageTestFixture.framework */; };\n\t\tAEA1B2369A0CD094D0F426F4 /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A01E2E08924015A0687C0B6 /* ReactiveSwift.framework */; };\n\t\tB5DE9CE83E10AB067A1D113E /* CarthageTestFixture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4778BFC65091F5B2B07A7F86 /* CarthageTestFixture.framework */; };\n\t\tB9CE5164FCCF4CAC768FB1D3 /* ReactiveMapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2AC45CB275013ADC262D975 /* ReactiveMapKit.framework */; };\n\t\tD9D64CBA06FDE4DEC421D5D7 /* DependencyFixtureA.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9175CD404DD510116BEC0234 /* DependencyFixtureA.framework */; };\n\t\tE471368A1DEC4EF63D70D84C /* ReactiveSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B2B50BF9BD704D4CA45A7A9 /* ReactiveSwift.framework */; };\n\t\tF0E692AFBFDF2CE25EE123BD /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 944523E6CAE426EEEFB898A2 /* Alamofire.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t0C5AC2545AE4D4F7F44E2E9B /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = \"<group>\"; };\n\t\t0D57001AD1EEEB31B0EEEBE2 /* DependencyFixtureA.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureA.framework; sourceTree = \"<group>\"; };\n\t\t1B7FE5849A5B2AAD3E62D3A7 /* DependencyFixtureB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureB.framework; sourceTree = \"<group>\"; };\n\t\t1E7DD996C029F078EA21CB67 /* ReactiveMapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveMapKit.framework; sourceTree = \"<group>\"; };\n\t\t2073C309D451D8C3BDD03C1B /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = \"<group>\"; };\n\t\t25C6E95FE2D09F3D963EE98A /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = \"<group>\"; };\n\t\t3B2B50BF9BD704D4CA45A7A9 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveSwift.framework; sourceTree = \"<group>\"; };\n\t\t3CD62DEFF074E2C4A35C6F30 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = \"<group>\"; };\n\t\t41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4778BFC65091F5B2B07A7F86 /* CarthageTestFixture.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CarthageTestFixture.framework; sourceTree = \"<group>\"; };\n\t\t4A01E2E08924015A0687C0B6 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveSwift.framework; sourceTree = \"<group>\"; };\n\t\t4BACF4A03F73DCFC3D95C21A /* DependencyFixtureB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureB.framework; sourceTree = \"<group>\"; };\n\t\t50B5CD1B9C7CDDBA1A9B530E /* CarthageTestFixture.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CarthageTestFixture.framework; sourceTree = \"<group>\"; };\n\t\t6177CC6263783487E93F7F4D /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t685E6928BB8552F257AF32A1 /* DependencyFixtureB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureB.framework; sourceTree = \"<group>\"; };\n\t\t7D67F1C1BFBACE101DE7DB51 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t80192E4B3F765386B9E8CCC5 /* DependencyFixtureB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureB.framework; sourceTree = \"<group>\"; };\n\t\t80FF7051B3E5445E5E0E9770 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = \"<group>\"; };\n\t\t8172E4733F98AD213CB42FA9 /* CarthageTestFixture.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CarthageTestFixture.framework; sourceTree = \"<group>\"; };\n\t\t8A9274BE42A03DC5DA1FAD04 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9010572AFE5F328D1A4F35E1 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = \"<group>\"; };\n\t\t9175CD404DD510116BEC0234 /* DependencyFixtureA.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureA.framework; sourceTree = \"<group>\"; };\n\t\t944523E6CAE426EEEFB898A2 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = \"<group>\"; };\n\t\t9BFA0DB3F2851A12A91DABFB /* DependencyFixtureA.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureA.framework; sourceTree = \"<group>\"; };\n\t\tA3F65F497639D85FA73DECA8 /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveSwift.framework; sourceTree = \"<group>\"; };\n\t\tB2AA735E34BB5D2B7DA7212B /* CarthageTestFixture.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CarthageTestFixture.framework; sourceTree = \"<group>\"; };\n\t\tB76E17CE3574081D5BF45B44 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = \"<group>\"; };\n\t\tB9CBE843396A0F73A18F4B11 /* DependencyFixtureA.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DependencyFixtureA.framework; sourceTree = \"<group>\"; };\n\t\tBB178D03E75929F3F5B10C56 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = \"<group>\"; };\n\t\tC206A943C9E4A6803327024F /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = \"<group>\"; };\n\t\tC2AC45CB275013ADC262D975 /* ReactiveMapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveMapKit.framework; sourceTree = \"<group>\"; };\n\t\tD296BB7355994040E197A1EE /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = \"<group>\"; };\n\t\tD437562D61F4BB3DE6378823 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = \"<group>\"; };\n\t\tD8E5AC3513ADA944932071EC /* ReactiveMapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveMapKit.framework; sourceTree = \"<group>\"; };\n\t\tDB9DC024AC7A05E4437051CB /* ReactiveSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveSwift.framework; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t2E6FCCFC594BE9FEB74FA2F0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA1AEAAB53EAEDA1C307871FA /* Result.framework in Frameworks */,\n\t\t\t\t9EBFD7ADF57175109DE0EA94 /* Alamofire.framework in Frameworks */,\n\t\t\t\tA7732A9A7B252C45427FCE62 /* CarthageTestFixture.framework in Frameworks */,\n\t\t\t\t9B4B21707CB152E15BE7ECBD /* DependencyFixtureA.framework in Frameworks */,\n\t\t\t\t044DBCB804B0066EDF0B69F8 /* DependencyFixtureB.framework in Frameworks */,\n\t\t\t\tAEA1B2369A0CD094D0F426F4 /* ReactiveSwift.framework in Frameworks */,\n\t\t\t\t55B624A520B0E35A386B6569 /* ReactiveCocoa.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5EFF61D0A49AA8EABD72DF44 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9DF5931DAD58C35B830A0A75 /* Result.framework in Frameworks */,\n\t\t\t\tF0E692AFBFDF2CE25EE123BD /* Alamofire.framework in Frameworks */,\n\t\t\t\tB5DE9CE83E10AB067A1D113E /* CarthageTestFixture.framework in Frameworks */,\n\t\t\t\t5C7583816F6826B7D7DCD018 /* DependencyFixtureA.framework in Frameworks */,\n\t\t\t\t192B14D32FB49F4BF60C9908 /* DependencyFixtureB.framework in Frameworks */,\n\t\t\t\tE471368A1DEC4EF63D70D84C /* ReactiveSwift.framework in Frameworks */,\n\t\t\t\t7881D9B16F8FD97E7ACD27E5 /* ReactiveCocoa.framework in Frameworks */,\n\t\t\t\t53984F64C12E67CDD10C2238 /* ReactiveMapKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B861C58E640BD4AD391900C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t21CA04F29CD0DEB0DD27B808 /* Result.framework in Frameworks */,\n\t\t\t\t5BCC106D55292C73C015FAB1 /* Alamofire.framework in Frameworks */,\n\t\t\t\t3674EA49FAD6B59A4548DD6C /* CarthageTestFixture.framework in Frameworks */,\n\t\t\t\tD9D64CBA06FDE4DEC421D5D7 /* DependencyFixtureA.framework in Frameworks */,\n\t\t\t\t34840A4B524AECE0CB665CCC /* DependencyFixtureB.framework in Frameworks */,\n\t\t\t\t92E4113033B920B0830492B6 /* ReactiveSwift.framework in Frameworks */,\n\t\t\t\t199F923C0D8B980562D75B2D /* ReactiveCocoa.framework in Frameworks */,\n\t\t\t\t11D327D6D70177DDC0A79581 /* ReactiveMapKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC2323597C6777A02E1FF671C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t307B5322FC5A220652BA6FE0 /* Result.framework in Frameworks */,\n\t\t\t\t82F5012DAD668BFCCBA5CC6D /* Alamofire.framework in Frameworks */,\n\t\t\t\t90429469A473C6702082B4B7 /* CarthageTestFixture.framework in Frameworks */,\n\t\t\t\t50774BBEADF9BEC85EEB7789 /* DependencyFixtureA.framework in Frameworks */,\n\t\t\t\t58CB7129BEAF736118826A76 /* DependencyFixtureB.framework in Frameworks */,\n\t\t\t\t10B5DCB476B73C344D90E179 /* ReactiveSwift.framework in Frameworks */,\n\t\t\t\tA1163E2229C5AC64A8DFF967 /* ReactiveCocoa.framework in Frameworks */,\n\t\t\t\tB9CE5164FCCF4CAC768FB1D3 /* ReactiveMapKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t12809A79ACE69F501A5FE815 /* Carthage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDBF93518FC96D95A54552713 /* iOS */,\n\t\t\t\t912A7321F662FE41BAAEED67 /* Mac */,\n\t\t\t\tD557819B1EE5B42A0A3DD4D1 /* tvOS */,\n\t\t\t\t2935454D05445817952E145D /* watchOS */,\n\t\t\t);\n\t\t\tname = Carthage;\n\t\t\tpath = Carthage/Build;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2935454D05445817952E145D /* watchOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t25C6E95FE2D09F3D963EE98A /* Alamofire.framework */,\n\t\t\t\t8172E4733F98AD213CB42FA9 /* CarthageTestFixture.framework */,\n\t\t\t\t9BFA0DB3F2851A12A91DABFB /* DependencyFixtureA.framework */,\n\t\t\t\t1B7FE5849A5B2AAD3E62D3A7 /* DependencyFixtureB.framework */,\n\t\t\t\tD437562D61F4BB3DE6378823 /* ReactiveCocoa.framework */,\n\t\t\t\t4A01E2E08924015A0687C0B6 /* ReactiveSwift.framework */,\n\t\t\t\tBB178D03E75929F3F5B10C56 /* Result.framework */,\n\t\t\t);\n\t\t\tpath = watchOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t293D0FF827366B513839236A = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFC1515684236259C50A7747F /* Frameworks */,\n\t\t\t\tAC523591AC7BE9275003D2DB /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t912A7321F662FE41BAAEED67 /* Mac */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9010572AFE5F328D1A4F35E1 /* Alamofire.framework */,\n\t\t\t\tB2AA735E34BB5D2B7DA7212B /* CarthageTestFixture.framework */,\n\t\t\t\tB9CBE843396A0F73A18F4B11 /* DependencyFixtureA.framework */,\n\t\t\t\t80192E4B3F765386B9E8CCC5 /* DependencyFixtureB.framework */,\n\t\t\t\t3CD62DEFF074E2C4A35C6F30 /* ReactiveCocoa.framework */,\n\t\t\t\tC2AC45CB275013ADC262D975 /* ReactiveMapKit.framework */,\n\t\t\t\tA3F65F497639D85FA73DECA8 /* ReactiveSwift.framework */,\n\t\t\t\tD296BB7355994040E197A1EE /* Result.framework */,\n\t\t\t);\n\t\t\tpath = Mac;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAC523591AC7BE9275003D2DB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8A9274BE42A03DC5DA1FAD04 /* Framework.framework */,\n\t\t\t\t41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */,\n\t\t\t\t7D67F1C1BFBACE101DE7DB51 /* Framework.framework */,\n\t\t\t\t6177CC6263783487E93F7F4D /* Framework.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD557819B1EE5B42A0A3DD4D1 /* tvOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t944523E6CAE426EEEFB898A2 /* Alamofire.framework */,\n\t\t\t\t4778BFC65091F5B2B07A7F86 /* CarthageTestFixture.framework */,\n\t\t\t\t0D57001AD1EEEB31B0EEEBE2 /* DependencyFixtureA.framework */,\n\t\t\t\t4BACF4A03F73DCFC3D95C21A /* DependencyFixtureB.framework */,\n\t\t\t\t80FF7051B3E5445E5E0E9770 /* ReactiveCocoa.framework */,\n\t\t\t\t1E7DD996C029F078EA21CB67 /* ReactiveMapKit.framework */,\n\t\t\t\t3B2B50BF9BD704D4CA45A7A9 /* ReactiveSwift.framework */,\n\t\t\t\tB76E17CE3574081D5BF45B44 /* Result.framework */,\n\t\t\t);\n\t\t\tpath = tvOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDBF93518FC96D95A54552713 /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2073C309D451D8C3BDD03C1B /* Alamofire.framework */,\n\t\t\t\t50B5CD1B9C7CDDBA1A9B530E /* CarthageTestFixture.framework */,\n\t\t\t\t9175CD404DD510116BEC0234 /* DependencyFixtureA.framework */,\n\t\t\t\t685E6928BB8552F257AF32A1 /* DependencyFixtureB.framework */,\n\t\t\t\tC206A943C9E4A6803327024F /* ReactiveCocoa.framework */,\n\t\t\t\tD8E5AC3513ADA944932071EC /* ReactiveMapKit.framework */,\n\t\t\t\tDB9DC024AC7A05E4437051CB /* ReactiveSwift.framework */,\n\t\t\t\t0C5AC2545AE4D4F7F44E2E9B /* Result.framework */,\n\t\t\t);\n\t\t\tpath = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFC1515684236259C50A7747F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t12809A79ACE69F501A5FE815 /* Carthage */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t536ACF18E4603B59207D43CE /* Framework_tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 658628E35283172E17BFC6A3 /* Build configuration list for PBXNativeTarget \"Framework_tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9EC3C2991C5C1EE119E39533 /* Sources */,\n\t\t\t\t5EFF61D0A49AA8EABD72DF44 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework_tvOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_tvOS;\n\t\t\tproductReference = 7D67F1C1BFBACE101DE7DB51 /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t53A3B531E3947D8A8722745E /* Framework_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D60A551D881B4B91F4535B78 /* Build configuration list for PBXNativeTarget \"Framework_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD1F422E9C4DD531AA88418C9 /* Sources */,\n\t\t\t\tC2323597C6777A02E1FF671C /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework_macOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_macOS;\n\t\t\tproductReference = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t71B5187E710718C1A205D4DC /* Framework_watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4A8774E3B4F5C9B98E0D0CF9 /* Build configuration list for PBXNativeTarget \"Framework_watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t077D11E42A8E90CAB8A95DF2 /* Sources */,\n\t\t\t\t2E6FCCFC594BE9FEB74FA2F0 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework_watchOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_watchOS;\n\t\t\tproductReference = 6177CC6263783487E93F7F4D /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tAE3F93DB94E7208F2F1D9A78 /* Framework_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 50DA67E9A951C40D9536609D /* Build configuration list for PBXNativeTarget \"Framework_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t40A4456A24F99A01E340C032 /* Sources */,\n\t\t\t\t9B861C58E640BD4AD391900C /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework_iOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_iOS;\n\t\t\tproductReference = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t0FBAE303E3CFC2ABAC876A77 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = YES;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D91E14E36EC0B415578456F2 /* Build configuration list for PBXProject \"Project\" */;\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 293D0FF827366B513839236A;\n\t\t\tminimizedProjectReferenceProxies = 1;\n\t\t\tpreferredProjectObjectVersion = 77;\n\t\t\tproductRefGroup = AC523591AC7BE9275003D2DB /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tAE3F93DB94E7208F2F1D9A78 /* Framework_iOS */,\n\t\t\t\t53A3B531E3947D8A8722745E /* Framework_macOS */,\n\t\t\t\t536ACF18E4603B59207D43CE /* Framework_tvOS */,\n\t\t\t\t71B5187E710718C1A205D4DC /* Framework_watchOS */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t077D11E42A8E90CAB8A95DF2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t40A4456A24F99A01E340C032 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9EC3C2991C5C1EE119E39533 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD1F422E9C4DD531AA88418C9 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t036FCF7C4B48C154279F289D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t06FEE6A4375FED73FBBB4162 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6081E9515EB8A378BEE3E57A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/watchOS\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t62D4835A6A4EDD4CF8DDCB41 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/tvOS\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6D4575F120C426FEC8956CCB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/watchOS\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t86602EB00607C9B20F3534A4 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t999683C4B5329A72D12AD584 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB7544571511FFC03F6471D80 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/Mac\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC04D53CA1D822DDDB3DF4B3F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/Mac\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEE917255DA1F2644A2985FE7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/tvOS\",\n\t\t\t\t);\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t4A8774E3B4F5C9B98E0D0CF9 /* Build configuration list for PBXNativeTarget \"Framework_watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6081E9515EB8A378BEE3E57A /* Debug */,\n\t\t\t\t6D4575F120C426FEC8956CCB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t50DA67E9A951C40D9536609D /* Build configuration list for PBXNativeTarget \"Framework_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t86602EB00607C9B20F3534A4 /* Debug */,\n\t\t\t\t06FEE6A4375FED73FBBB4162 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t658628E35283172E17BFC6A3 /* Build configuration list for PBXNativeTarget \"Framework_tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEE917255DA1F2644A2985FE7 /* Debug */,\n\t\t\t\t62D4835A6A4EDD4CF8DDCB41 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tD60A551D881B4B91F4535B78 /* Build configuration list for PBXNativeTarget \"Framework_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB7544571511FFC03F6471D80 /* Debug */,\n\t\t\t\tC04D53CA1D822DDDB3DF4B3F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tD91E14E36EC0B415578456F2 /* Build configuration list for PBXProject \"Project\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t999683C4B5329A72D12AD584 /* Debug */,\n\t\t\t\t036FCF7C4B48C154279F289D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n}\n"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/CarthageProject/project.yml",
    "content": "name: Project\noptions:\n  findCarthageFrameworks: true\ntargets:\n  Framework:\n    type: framework\n    platform: [iOS, tvOS, watchOS, macOS]\n    dependencies:\n      - carthage: Result\n      - carthage: Alamofire\n      - carthage: CarthageTestFixture\n      - carthage: ReactiveSwift\n      - carthage: ReactiveCocoa\n"
  },
  {
    "path": "Tests/Fixtures/SPM/FooFeature/Package.swift",
    "content": "// swift-tools-version: 5.8\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"FooFeature\",\n    products: [\n        .library(name: \"FooDomain\", targets: [\n            \"FooDomain\"\n        ]),\n        .library(name: \"FooUI\", targets: [\n            \"FooUI\"\n        ])\n    ],\n    targets: [\n        .target(name: \"FooDomain\"),\n        .target(name: \"FooUI\")\n    ]\n)\n"
  },
  {
    "path": "Tests/Fixtures/SPM/FooFeature/Sources/FooDomain/FooDomain.swift",
    "content": "public struct FooDomain {}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/FooFeature/Sources/FooUI/FooUI.swift",
    "content": "public struct FooUI {}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM/App.xctestplan",
    "content": "{\n  \"configurations\" : [\n    {\n      \"id\" : \"521B6958-2D62-4961-B353-91EF8F252F4B\",\n      \"name\" : \"Configuration 1\",\n      \"options\" : {\n\n      }\n    }\n  ],\n  \"defaultOptions\" : {\n    \"codeCoverage\" : false,\n    \"targetForVariableExpansion\" : {\n      \"containerPath\" : \"container:SPM.xcodeproj\",\n      \"identifier\" : \"C99E3C420D63D5219CE57E33\",\n      \"name\" : \"App\"\n    }\n  },\n  \"testTargets\" : [\n\n  ],\n  \"version\" : 1\n}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  SPM\n//\n//  Created by Yonas Kolb on 13/8/19.\n//  Copyright © 2019 BeemIt. All rights reserved.\n//\n\nimport UIKit\nimport Codability\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        true\n    }\n\n}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIApplicationSceneManifest</key>\n\t<dict>\n\t\t<key>UIApplicationSupportsMultipleScenes</key>\n\t\t<false/>\n\t\t<key>UISceneConfigurations</key>\n\t\t<dict>\n\t\t\t<key>UIWindowSceneSessionRoleApplication</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>UISceneConfigurationName</key>\n\t\t\t\t\t<string>Default Configuration</string>\n\t\t\t\t\t<key>UISceneDelegateClassName</key>\n\t\t\t\t\t<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>\n\t\t\t\t\t<key>UISceneStoryboardFile</key>\n\t\t\t\t\t<string>Main</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</dict>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 77;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\tADD3CE771A0D5E996031A193 /* AggTarget */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = A7ABF1B35D9170092F822790 /* Build configuration list for PBXAggregateTarget \"AggTarget\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD287BAAB664D1A024D9DD57E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AggTarget;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = AggTarget;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t23C6626698DE560017A89F2F /* XcodeGen in Frameworks */ = {isa = PBXBuildFile; productRef = 6F7DEA2D82649EDF903FBDBD /* XcodeGen */; };\n\t\t2DA7998902987953B119E4CE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26F7EFEE613987D1E1258A60 /* AppDelegate.swift */; };\n\t\t36CE2E6187D9709BAD9EF807 /* FooDomain in Frameworks */ = {isa = PBXBuildFile; productRef = 8D2DC638BEF7FDF23907E134 /* FooDomain */; };\n\t\t3986ED6965842721C46C0452 /* SwiftRoaringDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = DC73B269C8B0C0BF6912842C /* SwiftRoaringDynamic */; };\n\t\t4CC663B42B270404EF5FD037 /* libStaticLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CAB5625F6FEA668410ED5482 /* libStaticLibrary.a */; };\n\t\t9AD886A88D3E4A1B5E900687 /* SPMTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7970A2253B14A9B27C307FAC /* SPMTests.swift */; };\n\t\t9C4AD0711D706FD3ED0E436D /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C17B77601A9D1B7895AB42 /* StaticLibrary.swift */; };\n\t\tAF8E362713B9D28EA9A5C9FC /* SwiftLocation in Frameworks */ = {isa = PBXBuildFile; productRef = 04F71F974C4771232AF4FEC2 /* SwiftLocation */; };\n\t\tB89EA0F3859878A1DCF7BAFD /* SwiftRoaringDynamic in Embed Frameworks */ = {isa = PBXBuildFile; productRef = DC73B269C8B0C0BF6912842C /* SwiftRoaringDynamic */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tCE46CBA5671B951B546C8673 /* Codability in Frameworks */ = {isa = PBXBuildFile; productRef = 16E6FE01D5BD99F78D4A17E2 /* Codability */; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\tE368431019ABC696E4FFC0CF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4E22B8BCC18A29EFE1DE3BE4 /* Assets.xcassets */; };\n\t\tECC4F5F3B3D1391712A7AFE3 /* FooUI in Frameworks */ = {isa = PBXBuildFile; productRef = 927CB19D94339CC9960E930C /* FooUI */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t29147E1DDAEB1AAC20CB0CF9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F7B09D77DB7447B17DCDA3C4 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 3F8D94C4EFC431F646AAFB28;\n\t\t\tremoteInfo = StaticLibrary;\n\t\t};\n\t\t4C9144DB97F0499A0D5D508A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F7B09D77DB7447B17DCDA3C4 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C99E3C420D63D5219CE57E33;\n\t\t\tremoteInfo = App;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t528B26CADD32E3F39B813BEE /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tB89EA0F3859878A1DCF7BAFD /* SwiftRoaringDynamic in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t0613661C0D45064E81E80C37 /* Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t097F2DB5622B591E21BC3C73 /* App.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t26F7EFEE613987D1E1258A60 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t464ACF8D8F2D9F219BCFD3E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4E22B8BCC18A29EFE1DE3BE4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t61C17B77601A9D1B7895AB42 /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = \"<group>\"; };\n\t\t7970A2253B14A9B27C307FAC /* SPMTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPMTests.swift; sourceTree = \"<group>\"; };\n\t\t979AE1767E2AF6B3B9D7F13D /* FooFeature */ = {isa = PBXFileReference; lastKnownFileType = folder; name = FooFeature; path = FooFeature; sourceTree = SOURCE_ROOT; };\n\t\tA9601593D0AD02931266A4E5 /* App.xctestplan */ = {isa = PBXFileReference; path = App.xctestplan; sourceTree = \"<group>\"; };\n\t\tCAB5625F6FEA668410ED5482 /* libStaticLibrary.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tED284AB7C13DCC0A95DAA680 /* XcodeGen */ = {isa = PBXFileReference; lastKnownFileType = folder; name = XcodeGen; path = ../../..; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t796E7DE873F16699BD82FFEA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCE46CBA5671B951B546C8673 /* Codability in Frameworks */,\n\t\t\t\t3986ED6965842721C46C0452 /* SwiftRoaringDynamic in Frameworks */,\n\t\t\t\t4CC663B42B270404EF5FD037 /* libStaticLibrary.a in Frameworks */,\n\t\t\t\t23C6626698DE560017A89F2F /* XcodeGen in Frameworks */,\n\t\t\t\tAF8E362713B9D28EA9A5C9FC /* SwiftLocation in Frameworks */,\n\t\t\t\t36CE2E6187D9709BAD9EF807 /* FooDomain in Frameworks */,\n\t\t\t\tECC4F5F3B3D1391712A7AFE3 /* FooUI in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t17DD374CC81D710476AFF41C /* SPM */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA9601593D0AD02931266A4E5 /* App.xctestplan */,\n\t\t\t\t26F7EFEE613987D1E1258A60 /* AppDelegate.swift */,\n\t\t\t\t4E22B8BCC18A29EFE1DE3BE4 /* Assets.xcassets */,\n\t\t\t\t464ACF8D8F2D9F219BCFD3E7 /* Info.plist */,\n\t\t\t\tED284AB7C13DCC0A95DAA680 /* XcodeGen */,\n\t\t\t);\n\t\t\tpath = SPM;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FA59BFD192FB5A68D5F587C /* StaticLibrary */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t61C17B77601A9D1B7895AB42 /* StaticLibrary.swift */,\n\t\t\t);\n\t\t\tpath = StaticLibrary;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t218F6C96DF9E182F526258CF = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAD0F3623091EEA8D1EA3DFF8 /* Packages */,\n\t\t\t\t17DD374CC81D710476AFF41C /* SPM */,\n\t\t\t\tCF3BD77AEAA56553289456BA /* SPMTests */,\n\t\t\t\t1FA59BFD192FB5A68D5F587C /* StaticLibrary */,\n\t\t\t\t5D68FDDE55EE935627A1B376 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5D68FDDE55EE935627A1B376 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t097F2DB5622B591E21BC3C73 /* App.app */,\n\t\t\t\tCAB5625F6FEA668410ED5482 /* libStaticLibrary.a */,\n\t\t\t\t0613661C0D45064E81E80C37 /* Tests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAD0F3623091EEA8D1EA3DFF8 /* Packages */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t979AE1767E2AF6B3B9D7F13D /* FooFeature */,\n\t\t\t);\n\t\t\tname = Packages;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCF3BD77AEAA56553289456BA /* SPMTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7970A2253B14A9B27C307FAC /* SPMTests.swift */,\n\t\t\t);\n\t\t\tpath = SPMTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t339863E54E2D955C00B56802 /* Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6055721F7910D4EA1E12D7A7 /* Build configuration list for PBXNativeTarget \"Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAAE618C99C735F57B19F64DE /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t8693351DA9DBE579AC9DD513 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Tests;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Tests;\n\t\t\tproductReference = 0613661C0D45064E81E80C37 /* Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t3F8D94C4EFC431F646AAFB28 /* StaticLibrary */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 3B861439E878E4B7EE6EE131 /* Build configuration list for PBXNativeTarget \"StaticLibrary\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB070E114B1D62BD5A07B61DF /* Sources */,\n\t\t\t\t723C19B61A1AD980BD7C9DF0 /* Copy Swift Objective-C Interface Header */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD85FFB99444DD260A72DDDA7 /* PBXTargetDependency */,\n\t\t\t\tDDD17C561AD5065DF4FA4072 /* PBXTargetDependency */,\n\t\t\t\tC6360997FFC102F6725099D4 /* PBXTargetDependency */,\n\t\t\t\t00B467060F3DEC027711F9C2 /* PBXTargetDependency */,\n\t\t\t\t7EB17E90A4D8F26FEABEEDF6 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = StaticLibrary;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tAF233B61592982A7F6431FC6 /* Codability */,\n\t\t\t\tC816AEB28ED71C3C47F31B98 /* SwiftRoaringDynamic */,\n\t\t\t\t5A36E2FE69703FCAC0BE8064 /* XcodeGen */,\n\t\t\t\t6B8A6E1EA485E607A1D1DCD1 /* FooDomain */,\n\t\t\t\t15DB49096E2978F6BCA8D604 /* FooUI */,\n\t\t\t);\n\t\t\tproductName = StaticLibrary;\n\t\t\tproductReference = CAB5625F6FEA668410ED5482 /* libStaticLibrary.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tC99E3C420D63D5219CE57E33 /* App */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 091BBC493EA2F0A446682C48 /* Build configuration list for PBXNativeTarget \"App\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t460F52476B5219D2CDA494C2 /* Sources */,\n\t\t\t\tF77D37B94534F63D9B461F30 /* Resources */,\n\t\t\t\t796E7DE873F16699BD82FFEA /* Frameworks */,\n\t\t\t\t528B26CADD32E3F39B813BEE /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t078202CF7B08B66ACF7FEC23 /* PBXTargetDependency */,\n\t\t\t\tE157C6348B8AD6A28C706801 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App;\n\t\t\tpackageProductDependencies = (\n\t\t\t\t16E6FE01D5BD99F78D4A17E2 /* Codability */,\n\t\t\t\tDC73B269C8B0C0BF6912842C /* SwiftRoaringDynamic */,\n\t\t\t\t6F7DEA2D82649EDF903FBDBD /* XcodeGen */,\n\t\t\t\t04F71F974C4771232AF4FEC2 /* SwiftLocation */,\n\t\t\t\t8D2DC638BEF7FDF23907E134 /* FooDomain */,\n\t\t\t\t927CB19D94339CC9960E930C /* FooUI */,\n\t\t\t);\n\t\t\tproductName = App;\n\t\t\tproductReference = 097F2DB5622B591E21BC3C73 /* App.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tF7B09D77DB7447B17DCDA3C4 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = YES;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 425866ADA259DB93FC4AF1E3 /* Build configuration list for PBXProject \"SPM\" */;\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 218F6C96DF9E182F526258CF;\n\t\t\tminimizedProjectReferenceProxies = 1;\n\t\t\tpackageReferences = (\n\t\t\t\t5BA91390AE78D2EE15C60091 /* XCRemoteSwiftPackageReference \"Codability\" */,\n\t\t\t\t348C81C327DB1710B742C370 /* XCRemoteSwiftPackageReference \"Prefire\" */,\n\t\t\t\t63B845B0C9058076DD19CA85 /* XCRemoteSwiftPackageReference \"SwiftLocation\" */,\n\t\t\t\tE3887F3CB2C069E70D98092F /* XCRemoteSwiftPackageReference \"SwiftRoaring\" */,\n\t\t\t\t630A8CE9F2BE39704ED9D461 /* XCLocalSwiftPackageReference \"FooFeature\" */,\n\t\t\t\tC6539B364583AE96C18CE377 /* XCLocalSwiftPackageReference \"../../..\" */,\n\t\t\t);\n\t\t\tpreferredProjectObjectVersion = 77;\n\t\t\tproductRefGroup = 5D68FDDE55EE935627A1B376 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tADD3CE771A0D5E996031A193 /* AggTarget */,\n\t\t\t\tC99E3C420D63D5219CE57E33 /* App */,\n\t\t\t\t3F8D94C4EFC431F646AAFB28 /* StaticLibrary */,\n\t\t\t\t339863E54E2D955C00B56802 /* Tests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tF77D37B94534F63D9B461F30 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE368431019ABC696E4FFC0CF /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t723C19B61A1AD980BD7C9DF0 /* Copy Swift Objective-C Interface Header */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\",\n\t\t\t);\n\t\t\tname = \"Copy Swift Objective-C Interface Header\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"ditto \\\"${SCRIPT_INPUT_FILE_0}\\\" \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t460F52476B5219D2CDA494C2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2DA7998902987953B119E4CE /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAAE618C99C735F57B19F64DE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9AD886A88D3E4A1B5E900687 /* SPMTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB070E114B1D62BD5A07B61DF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9C4AD0711D706FD3ED0E436D /* StaticLibrary.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t00B467060F3DEC027711F9C2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = 6B8A6E1EA485E607A1D1DCD1 /* FooDomain */;\n\t\t};\n\t\t078202CF7B08B66ACF7FEC23 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 3F8D94C4EFC431F646AAFB28 /* StaticLibrary */;\n\t\t\ttargetProxy = 29147E1DDAEB1AAC20CB0CF9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7EB17E90A4D8F26FEABEEDF6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = 15DB49096E2978F6BCA8D604 /* FooUI */;\n\t\t};\n\t\t8693351DA9DBE579AC9DD513 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C99E3C420D63D5219CE57E33 /* App */;\n\t\t\ttargetProxy = 4C9144DB97F0499A0D5D508A /* PBXContainerItemProxy */;\n\t\t};\n\t\tC6360997FFC102F6725099D4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = 5A36E2FE69703FCAC0BE8064 /* XcodeGen */;\n\t\t};\n\t\tD287BAAB664D1A024D9DD57E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = 896D1E2063A93D40F04D7864 /* PrefirePlaybookPlugin */;\n\t\t};\n\t\tD85FFB99444DD260A72DDDA7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = AF233B61592982A7F6431FC6 /* Codability */;\n\t\t};\n\t\tDDD17C561AD5065DF4FA4072 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = C816AEB28ED71C3C47F31B98 /* SwiftRoaringDynamic */;\n\t\t};\n\t\tE157C6348B8AD6A28C706801 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = DC47EF1BFBBD751E3C1C95E3 /* PrefirePlaybookPlugin */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t0C023F1AE037C42683029CE9 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t0CCC06807E5CD8361D899B7F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1640ABF22E84A6AB9FFFB0D9 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t41B31B6C4A1D9194EC6FFF6B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = SPM/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5E087A904FBC0E623E672507 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7A384B9B9CF42FCF9EF02057 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = SPM/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tAC10D9ACB37F0EE5A91CCC03 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App.app/App\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB4F2839AD4756B475B2005F2 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB6C3FE81F43A4D3DA0830740 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App.app/App\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tBC33B43DF18620E6CCC43E96 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t091BBC493EA2F0A446682C48 /* Build configuration list for PBXNativeTarget \"App\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t41B31B6C4A1D9194EC6FFF6B /* Debug */,\n\t\t\t\t7A384B9B9CF42FCF9EF02057 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t3B861439E878E4B7EE6EE131 /* Build configuration list for PBXNativeTarget \"StaticLibrary\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t0CCC06807E5CD8361D899B7F /* Debug */,\n\t\t\t\t1640ABF22E84A6AB9FFFB0D9 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t425866ADA259DB93FC4AF1E3 /* Build configuration list for PBXProject \"SPM\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB4F2839AD4756B475B2005F2 /* Debug */,\n\t\t\t\tBC33B43DF18620E6CCC43E96 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t6055721F7910D4EA1E12D7A7 /* Build configuration list for PBXNativeTarget \"Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB6C3FE81F43A4D3DA0830740 /* Debug */,\n\t\t\t\tAC10D9ACB37F0EE5A91CCC03 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tA7ABF1B35D9170092F822790 /* Build configuration list for PBXAggregateTarget \"AggTarget\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t0C023F1AE037C42683029CE9 /* Debug */,\n\t\t\t\t5E087A904FBC0E623E672507 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCLocalSwiftPackageReference section */\n\t\t630A8CE9F2BE39704ED9D461 /* XCLocalSwiftPackageReference \"FooFeature\" */ = {\n\t\t\tisa = XCLocalSwiftPackageReference;\n\t\t\trelativePath = FooFeature;\n\t\t};\n\t\tC6539B364583AE96C18CE377 /* XCLocalSwiftPackageReference \"../../..\" */ = {\n\t\t\tisa = XCLocalSwiftPackageReference;\n\t\t\trelativePath = ../../..;\n\t\t};\n/* End XCLocalSwiftPackageReference section */\n\n/* Begin XCRemoteSwiftPackageReference section */\n\t\t348C81C327DB1710B742C370 /* XCRemoteSwiftPackageReference \"Prefire\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/BarredEwe/Prefire\";\n\t\t\trequirement = {\n\t\t\t\tkind = upToNextMajorVersion;\n\t\t\t\tminimumVersion = 1.4.1;\n\t\t\t};\n\t\t};\n\t\t5BA91390AE78D2EE15C60091 /* XCRemoteSwiftPackageReference \"Codability\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/yonaskolb/Codability\";\n\t\t\trequirement = {\n\t\t\t\tkind = upToNextMajorVersion;\n\t\t\t\tminimumVersion = 0.2.1;\n\t\t\t};\n\t\t};\n\t\t63B845B0C9058076DD19CA85 /* XCRemoteSwiftPackageReference \"SwiftLocation\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/malcommac/SwiftLocation\";\n\t\t\trequirement = {\n\t\t\t\tkind = exactVersion;\n\t\t\t\tversion = 6.0;\n\t\t\t};\n\t\t};\n\t\tE3887F3CB2C069E70D98092F /* XCRemoteSwiftPackageReference \"SwiftRoaring\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/piotte13/SwiftRoaring\";\n\t\t\trequirement = {\n\t\t\t\tkind = upToNextMajorVersion;\n\t\t\t\tminimumVersion = 1.0.4;\n\t\t\t};\n\t\t};\n/* End XCRemoteSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\t04F71F974C4771232AF4FEC2 /* SwiftLocation */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 63B845B0C9058076DD19CA85 /* XCRemoteSwiftPackageReference \"SwiftLocation\" */;\n\t\t\tproductName = SwiftLocation;\n\t\t};\n\t\t15DB49096E2978F6BCA8D604 /* FooUI */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = FooUI;\n\t\t};\n\t\t16E6FE01D5BD99F78D4A17E2 /* Codability */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 5BA91390AE78D2EE15C60091 /* XCRemoteSwiftPackageReference \"Codability\" */;\n\t\t\tproductName = Codability;\n\t\t};\n\t\t5A36E2FE69703FCAC0BE8064 /* XcodeGen */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = XcodeGen;\n\t\t};\n\t\t6B8A6E1EA485E607A1D1DCD1 /* FooDomain */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = FooDomain;\n\t\t};\n\t\t6F7DEA2D82649EDF903FBDBD /* XcodeGen */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = XcodeGen;\n\t\t};\n\t\t896D1E2063A93D40F04D7864 /* PrefirePlaybookPlugin */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 348C81C327DB1710B742C370 /* XCRemoteSwiftPackageReference \"Prefire\" */;\n\t\t\tproductName = \"plugin:PrefirePlaybookPlugin\";\n\t\t};\n\t\t8D2DC638BEF7FDF23907E134 /* FooDomain */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = FooDomain;\n\t\t};\n\t\t927CB19D94339CC9960E930C /* FooUI */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = FooUI;\n\t\t};\n\t\tAF233B61592982A7F6431FC6 /* Codability */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 5BA91390AE78D2EE15C60091 /* XCRemoteSwiftPackageReference \"Codability\" */;\n\t\t\tproductName = Codability;\n\t\t};\n\t\tC816AEB28ED71C3C47F31B98 /* SwiftRoaringDynamic */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = E3887F3CB2C069E70D98092F /* XCRemoteSwiftPackageReference \"SwiftRoaring\" */;\n\t\t\tproductName = SwiftRoaringDynamic;\n\t\t};\n\t\tDC47EF1BFBBD751E3C1C95E3 /* PrefirePlaybookPlugin */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 348C81C327DB1710B742C370 /* XCRemoteSwiftPackageReference \"Prefire\" */;\n\t\t\tproductName = \"plugin:PrefirePlaybookPlugin\";\n\t\t};\n\t\tDC73B269C8B0C0BF6912842C /* SwiftRoaringDynamic */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = E3887F3CB2C069E70D98092F /* XCRemoteSwiftPackageReference \"SwiftRoaring\" */;\n\t\t\tproductName = SwiftRoaringDynamic;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\t};\n\trootObject = F7B09D77DB7447B17DCDA3C4 /* Project object */;\n}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"aexml\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tadija/AEXML.git\",\n      \"state\" : {\n        \"revision\" : \"38f7d00b23ecd891e1ee656fa6aeebd6ba04ecc3\",\n        \"version\" : \"4.6.1\"\n      }\n    },\n    {\n      \"identity\" : \"codability\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/yonaskolb/Codability\",\n      \"state\" : {\n        \"revision\" : \"eb5bac78e0679f521c3f058c1eb9be0dd657dadd\",\n        \"version\" : \"0.2.1\"\n      }\n    },\n    {\n      \"identity\" : \"graphviz\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/SwiftDocOrg/GraphViz.git\",\n      \"state\" : {\n        \"revision\" : \"70bebcf4597b9ce33e19816d6bbd4ba9b7bdf038\",\n        \"version\" : \"0.2.0\"\n      }\n    },\n    {\n      \"identity\" : \"jsonutilities\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/yonaskolb/JSONUtilities.git\",\n      \"state\" : {\n        \"revision\" : \"128d2ffc22467f69569ef8ff971683e2393191a0\",\n        \"version\" : \"4.2.0\"\n      }\n    },\n    {\n      \"identity\" : \"pathkit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/PathKit.git\",\n      \"state\" : {\n        \"revision\" : \"3bfd2737b700b9a36565a8c94f4ad2b050a5e574\",\n        \"version\" : \"1.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"prefire\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/BarredEwe/Prefire\",\n      \"state\" : {\n        \"revision\" : \"abb8dfa44391b4f47edb4937a4ba124e76270a87\",\n        \"version\" : \"1.4.1\"\n      }\n    },\n    {\n      \"identity\" : \"rainbow\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/onevcat/Rainbow.git\",\n      \"state\" : {\n        \"revision\" : \"626c3d4b6b55354b4af3aa309f998fae9b31a3d9\",\n        \"version\" : \"3.2.0\"\n      }\n    },\n    {\n      \"identity\" : \"spectre\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/Spectre.git\",\n      \"state\" : {\n        \"revision\" : \"26cc5e9ae0947092c7139ef7ba612e34646086c7\",\n        \"version\" : \"0.10.1\"\n      }\n    },\n    {\n      \"identity\" : \"swiftcli\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jakeheis/SwiftCLI.git\",\n      \"state\" : {\n        \"revision\" : \"2e949055d9797c1a6bddcda0e58dada16cc8e970\",\n        \"version\" : \"6.0.3\"\n      }\n    },\n    {\n      \"identity\" : \"swiftroaring\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/piotte13/SwiftRoaring\",\n      \"state\" : {\n        \"revision\" : \"9104cf3f35e7a38c9fb633084c7adb63a9f27f8b\",\n        \"version\" : \"1.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"version\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/mxcl/Version\",\n      \"state\" : {\n        \"revision\" : \"1fe824b80d89201652e7eca7c9252269a1d85e25\",\n        \"version\" : \"2.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"xcodeproj\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tuist/XcodeProj.git\",\n      \"state\" : {\n        \"revision\" : \"6e60fb55271c80f83a186c9b1b4982fd991cfc0a\",\n        \"version\" : \"8.13.0\"\n      }\n    },\n    {\n      \"identity\" : \"yams\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jpsim/Yams.git\",\n      \"state\" : {\n        \"revision\" : \"0d9ee7ea8c4ebd4a489ad7a73d5c6cad55d6fed3\",\n        \"version\" : \"5.0.6\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPM.xcodeproj/xcshareddata/xcschemes/App.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C99E3C420D63D5219CE57E33\"\n               BuildableName = \"App.app\"\n               BlueprintName = \"App\"\n               ReferencedContainer = \"container:SPM.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C99E3C420D63D5219CE57E33\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:SPM.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"XcodeGenKitTests\"\n               BuildableName = \"XcodeGenKitTests\"\n               BlueprintName = \"XcodeGenKitTests\"\n               ReferencedContainer = \"container:../../..\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"339863E54E2D955C00B56802\"\n               BuildableName = \"Tests.xctest\"\n               BlueprintName = \"Tests\"\n               ReferencedContainer = \"container:SPM.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C99E3C420D63D5219CE57E33\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:SPM.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C99E3C420D63D5219CE57E33\"\n            BuildableName = \"App.app\"\n            BlueprintName = \"App\"\n            ReferencedContainer = \"container:SPM.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/SPM/SPMTests/SPMTests.swift",
    "content": "import XCTest\n\nclass SPMTests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/StaticLibrary/StaticLibrary.swift",
    "content": "import Codability\n\nfunc doThing() {\n    _ = AnyCodable.self\n}\n"
  },
  {
    "path": "Tests/Fixtures/SPM/project.yml",
    "content": "name: SPM\npackages:\n  Codability:\n    url: https://github.com/yonaskolb/Codability\n    majorVersion: 0.2.1\n  SwiftRoaring:\n    url: https://github.com/piotte13/SwiftRoaring\n    majorVersion: 1.0.4\n  Prefire:\n    url: https://github.com/BarredEwe/Prefire\n    majorVersion: 1.4.1\n  SwiftLocation:\n    url: https://github.com/malcommac/SwiftLocation\n    exactVersion: 6.0\n  XcodeGen:\n    path: ../../.. #XcodeGen itself\n    group: SPM\n  FooFeature:\n    path: FooFeature\naggregateTargets:\n  AggTarget:\n    buildToolPlugins:\n      - plugin: PrefirePlaybookPlugin\n        package: Prefire\ntargets:\n  App:\n    type: application\n    platform: iOS\n    sources: [SPM]\n    scheme:\n      testTargets:\n        - package: XcodeGen/XcodeGenKitTests\n        - Tests\n    buildToolPlugins:\n      - plugin: PrefirePlaybookPlugin\n        package: Prefire\n    dependencies:\n      - package: Codability\n        weak: true\n      - package: SwiftRoaring\n        product: SwiftRoaringDynamic\n        embed: true\n      - target: StaticLibrary\n      - package: XcodeGen\n      - package: SwiftLocation\n      - package: FooFeature\n        products:\n          - FooDomain\n          - FooUI\n  Tests:\n    type: bundle.unit-test\n    platform: iOS\n    sources: [SPMTests]\n    dependencies:\n      - target: App\n  StaticLibrary:\n    type: library.static\n    platform: iOS\n    sources: StaticLibrary\n    dependencies:\n      - package: Codability\n      - package: SwiftRoaring\n        product: SwiftRoaringDynamic\n      - package: XcodeGen\n      - package: FooFeature\n        products:\n        - FooDomain\n        - FooUI\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/.gitignore",
    "content": "Carthage\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/.lldbinit",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 77;\n\tobjects = {\n\n/* Begin PBXFileReference section */\n\t\t6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t60D6679FB526839EAFEA2EEE /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = \"<group>\"; };\n\t\tD6340FC7DEBC81E0127BAFD6 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF1EFFCA88BFC3A1DD2D89DA7 /* BundleY.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleY.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXGroup section */\n\t\t3B245BCEF731A43880657E0E /* Configs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t60D6679FB526839EAFEA2EEE /* config.xcconfig */,\n\t\t\t);\n\t\t\tname = Configs;\n\t\t\tpath = ../Configs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E8CFA4275C972686621210C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B245BCEF731A43880657E0E /* Configs */,\n\t\t\t\t6BB7980FAF18A93459B051A1 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6BB7980FAF18A93459B051A1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */,\n\t\t\t\tF1EFFCA88BFC3A1DD2D89DA7 /* BundleY.bundle */,\n\t\t\t\tD6340FC7DEBC81E0127BAFD6 /* ExternalTarget.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXLegacyTarget section */\n\t\tA6D9FB94860C005F0B723B5F /* IncludedLegacy */ = {\n\t\t\tisa = PBXLegacyTarget;\n\t\t\tbuildConfigurationList = AC68886F4CEE08D3593D0877 /* Build configuration list for PBXLegacyTarget \"IncludedLegacy\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t69078D1DA3F942D5BC752081 /* Sources */,\n\t\t\t);\n\t\t\tbuildToolPath = /usr/bin/true;\n\t\t\tbuildWorkingDirectory = .;\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = IncludedLegacy;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tpassBuildSettingsInEnvironment = 0;\n\t\t\tproductName = IncludedLegacy;\n\t\t};\n/* End PBXLegacyTarget section */\n\n/* Begin PBXNativeTarget section */\n\t\t201AC870383B8CD218AD0FAB /* BundleY */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EF9E2AA4073D3B2EC8195688 /* Build configuration list for PBXNativeTarget \"BundleY\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BundleY;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = BundleY;\n\t\t\tproductReference = F1EFFCA88BFC3A1DD2D89DA7 /* BundleY.bundle */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\t63A2D4898D974A06E85B07F8 /* BundleX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 32C09717E388BCD9DB9E513C /* Build configuration list for PBXNativeTarget \"BundleX\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BundleX;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = BundleX;\n\t\t\tproductReference = 6023D61BF2C57E6AE09CE7A3 /* BundleX.bundle */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\tE76A5F5E363E470416D3B487 /* ExternalTarget */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B5049D72EC10A5C87F29B6B1 /* Build configuration list for PBXNativeTarget \"ExternalTarget\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF08051CAC5E72EEEB8FB447B /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ExternalTarget;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = ExternalTarget;\n\t\t\tproductReference = D6340FC7DEBC81E0127BAFD6 /* ExternalTarget.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t1B166EB49192B73A9DD8E108 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = YES;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 3DFC1105373EDB6483D4BC5D /* Build configuration list for PBXProject \"AnotherProject\" */;\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 4E8CFA4275C972686621210C;\n\t\t\tminimizedProjectReferenceProxies = 1;\n\t\t\tpreferredProjectObjectVersion = 77;\n\t\t\tproductRefGroup = 6BB7980FAF18A93459B051A1 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t63A2D4898D974A06E85B07F8 /* BundleX */,\n\t\t\t\t201AC870383B8CD218AD0FAB /* BundleY */,\n\t\t\t\tE76A5F5E363E470416D3B487 /* ExternalTarget */,\n\t\t\t\tA6D9FB94860C005F0B723B5F /* IncludedLegacy */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t69078D1DA3F942D5BC752081 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF08051CAC5E72EEEB8FB447B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t011619A463B654F60012FC9E /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .test;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t03418826FAC3BC1FAB207D05 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t039F4FBE2C50C67BCD6BD67B /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .staging;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t1B1B4A623B8E9937627EF22C /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t1CE986A8B593E707AB71BDBA /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t270E1D32776D2D196D435FDA /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .staging;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t2D7C07F1D50007A04EF6C0EE /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t30E2E954A636A240B1CE5C15 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t3B4B85DEBC49A5BEF2196886 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t42D8986753AED7AA1F3DB83D /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t49FA7F235A6CA1F941192151 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t4D621C4C28C8614EA5D6ADC2 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t5280A75613CFD83BA7EE6AD4 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t56ADF89C9058B2C25F6C80CE /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t5790F0FBCBF55A0DF258AD6A /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t58F418B6745A09C6479FDD6E /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t5F14CE04E33ACD729A0EE6B6 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t6081D1A42688EBF6CF4B2579 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t683A510C4120CF5D216E1667 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t6C48009F842BEC2467546ADF /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t7919FDD28F9A535EA26FB151 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t816E80EA88CB645CE988138C /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t9BD6CAD5463121A1C3FED138 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tC3231A91F004B1D0018146DB /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 60D6679FB526839EAFEA2EEE /* config.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .test;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tC7A4FCD4E277AD34B36E5185 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tCB49A0C6C6CF7FC894E453BE /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tE1A76975608AFAA966038B93 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tE7907C46C6282D78E009083B /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tFB66976FF75B2B0B255D5AA4 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tFD9323224BE5A91248B7BEF2 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t32C09717E388BCD9DB9E513C /* Build configuration list for PBXNativeTarget \"BundleX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4D621C4C28C8614EA5D6ADC2 /* Production Debug */,\n\t\t\t\t9BD6CAD5463121A1C3FED138 /* Production Release */,\n\t\t\t\t56ADF89C9058B2C25F6C80CE /* Staging Debug */,\n\t\t\t\t49FA7F235A6CA1F941192151 /* Staging Release */,\n\t\t\t\t5F14CE04E33ACD729A0EE6B6 /* Test Debug */,\n\t\t\t\tC7A4FCD4E277AD34B36E5185 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t3DFC1105373EDB6483D4BC5D /* Build configuration list for PBXProject \"AnotherProject\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5790F0FBCBF55A0DF258AD6A /* Production Debug */,\n\t\t\t\t03418826FAC3BC1FAB207D05 /* Production Release */,\n\t\t\t\t270E1D32776D2D196D435FDA /* Staging Debug */,\n\t\t\t\t039F4FBE2C50C67BCD6BD67B /* Staging Release */,\n\t\t\t\tC3231A91F004B1D0018146DB /* Test Debug */,\n\t\t\t\t011619A463B654F60012FC9E /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tAC68886F4CEE08D3593D0877 /* Build configuration list for PBXLegacyTarget \"IncludedLegacy\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6C48009F842BEC2467546ADF /* Production Debug */,\n\t\t\t\tE1A76975608AFAA966038B93 /* Production Release */,\n\t\t\t\t2D7C07F1D50007A04EF6C0EE /* Staging Debug */,\n\t\t\t\tCB49A0C6C6CF7FC894E453BE /* Staging Release */,\n\t\t\t\t683A510C4120CF5D216E1667 /* Test Debug */,\n\t\t\t\t5280A75613CFD83BA7EE6AD4 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tB5049D72EC10A5C87F29B6B1 /* Build configuration list for PBXNativeTarget \"ExternalTarget\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t42D8986753AED7AA1F3DB83D /* Production Debug */,\n\t\t\t\t6081D1A42688EBF6CF4B2579 /* Production Release */,\n\t\t\t\t3B4B85DEBC49A5BEF2196886 /* Staging Debug */,\n\t\t\t\t30E2E954A636A240B1CE5C15 /* Staging Release */,\n\t\t\t\t1B1B4A623B8E9937627EF22C /* Test Debug */,\n\t\t\t\t7919FDD28F9A535EA26FB151 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tEF9E2AA4073D3B2EC8195688 /* Build configuration list for PBXNativeTarget \"BundleY\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFD9323224BE5A91248B7BEF2 /* Production Debug */,\n\t\t\t\t1CE986A8B593E707AB71BDBA /* Production Release */,\n\t\t\t\t816E80EA88CB645CE988138C /* Staging Debug */,\n\t\t\t\t58F418B6745A09C6479FDD6E /* Staging Release */,\n\t\t\t\tE7907C46C6282D78E009083B /* Test Debug */,\n\t\t\t\tFB66976FF75B2B0B255D5AA4 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1B166EB49192B73A9DD8E108 /* Project object */;\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/AnotherProject/AnotherProject.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/AnotherProject/project.yml",
    "content": "name: AnotherProject\ninclude: [../environments.yml]\noptions:\n  useBaseInternationalization: false\nconfigFiles:\n  Test Debug: ../Configs/config.xcconfig\ntargets:\n  BundleX:\n    type: bundle\n    platform: iOS\n    settings:\n      GENERATE_INFOPLIST_FILE: YES\n  BundleY:\n    type: bundle\n    platform: iOS\n    settings:\n      GENERATE_INFOPLIST_FILE: YES\n  ExternalTarget:\n    type: framework\n    platform: iOS\n    settings:\n      GENERATE_INFOPLIST_FILE: YES\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.external\n  IncludedLegacy:\n    type: \"\"\n    platform: iOS\n    legacy:\n      toolPath: /usr/bin/true\n      workingDirectory: .\n\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/AppDelegate.swift",
    "content": "import Framework\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        _ = FrameworkStruct()\n        return true\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"TestProject\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Hello\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jZH-ZE-Aqo\">\n                                <rect key=\"frame\" x=\"168\" y=\"323\" width=\"39\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"jZH-ZE-Aqo\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"8vQ-a9-YMp\"/>\n                            <constraint firstItem=\"jZH-ZE-Aqo\" firstAttribute=\"centerY\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerY\" id=\"SqD-ax-0e0\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/Clip.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.developer.parent-application-identifiers</key>\n\t<array>\n\t\t<string>$(AppIdentifierPrefix)com.project.appwithclip</string>\n\t</array>\n\t<key>com.apple.security.application-groups</key>\n\t<string>group.com.app</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>42.1</string>\n\t<key>CFBundleVersion</key>\n\t<string>2</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip/ViewController.swift",
    "content": "import Contacts\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        _ = CNContact()\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip_Tests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip_Tests/TestProjectTests.swift",
    "content": "import XCTest\n\nclass TestProjectTests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip_UITests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_Clip_UITests/TestProjectUITests.swift",
    "content": "import XCTest\n\nclass TestProjectUITests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/App.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.application-groups</key>\n\t<string>group.com.app</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/AppDelegate.swift",
    "content": "import Framework\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n        // file from a framework\n        _ = FrameworkStruct()\n\n        // Standalone files added to project by path-to-file.\n        _ = standaloneHello()\n\n        // file in a synced folder\n        _ = SyncedStruct()\n\n        return true\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/App_iOS.xctestplan",
    "content": "{\n  \"configurations\" : [\n    {\n      \"id\" : \"AC4AE1EF-F65C-4037-8994-D607D2E5841E\",\n      \"name\" : \"Configuration 1\",\n      \"options\" : {\n\n      }\n    }\n  ],\n  \"defaultOptions\" : {\n    \"commandLineArgumentEntries\" : [\n      {\n        \"argument\" : \"MyDisabledArgument\",\n        \"enabled\" : false\n      },\n      {\n        \"argument\" : \"MyEnabledArgument\"\n      }\n    ],\n    \"mainThreadCheckerEnabled\" : false,\n    \"targetForVariableExpansion\" : {\n      \"containerPath\" : \"container:Project.xcodeproj\",\n      \"identifier\" : \"0867B0DACEF28C11442DE8F7\",\n      \"name\" : \"App_iOS\"\n    }\n  },\n  \"testTargets\" : [\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Project.xcodeproj\",\n        \"identifier\" : \"DC2F16BAA6E13B44AB62F888\",\n        \"name\" : \"App_iOS_Tests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Project.xcodeproj\",\n        \"identifier\" : \"F674B2CFC4738EEC49BAD0DA\",\n        \"name\" : \"App_iOS_UITests\"\n      }\n    }\n  ],\n  \"version\" : 1\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  Project\n\n  Created by ryohey on 2017/11/03.\n  \n*/\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>StringKey</key>\n\t<dict>\n\t\t<key>NSStringLocalizedFormatKey</key>\n\t\t<string>%#@VARIABLE@</string>\n\t\t<key>Variable</key>\n\t\t<dict>\n\t\t\t<key>NSStringFormatSpecTypeKey</key>\n\t\t\t<string>NSStringPluralRuleType</string>\n\t\t\t<key>NSStringFormatValueTypeKey</key>\n\t\t\t<string></string>\n\t\t\t<key>zero</key>\n\t\t\t<string></string>\n\t\t\t<key>one</key>\n\t\t\t<string></string>\n\t\t\t<key>two</key>\n\t\t\t<string></string>\n\t\t\t<key>few</key>\n\t\t\t<string></string>\n\t\t\t<key>many</key>\n\t\t\t<string></string>\n\t\t\t<key>other</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Base.lproj/LocalizedStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13142\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12042\"/>\n    </dependencies>\n    <scenes/>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"TestProject\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Hello\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jZH-ZE-Aqo\">\n                                <rect key=\"frame\" x=\"168\" y=\"323\" width=\"39\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"jZH-ZE-Aqo\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"8vQ-a9-YMp\"/>\n                            <constraint firstItem=\"jZH-ZE-Aqo\" firstAttribute=\"centerY\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerY\" id=\"SqD-ax-0e0\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Base.lproj/excluded-file",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Configuration.storekit",
    "content": "{\n  \"products\" : [\n    {\n      \"displayPrice\" : \"0.00\",\n      \"familyShareable\" : false,\n      \"internalID\" : \"6D7919A3\",\n      \"localizations\" : [\n        {\n          \"description\" : \"\",\n          \"displayName\" : \"\",\n          \"locale\" : \"en_US\"\n        }\n      ],\n      \"productID\" : \"com.xcodegen.0\",\n      \"referenceName\" : null,\n      \"type\" : \"Consumable\"\n    }\n  ],\n  \"settings\" : {\n\n  },\n  \"subscriptionGroups\" : [\n\n  ],\n  \"version\" : {\n    \"major\" : 1,\n    \"minor\" : 0\n  }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Documentation.docc/Documentation.md",
    "content": "# ``App_Clip``\n\nTest\n\n## Overview\n\nTest\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/FolderWithDot2.0/SwiftFileInDotPath.swift",
    "content": "import Foundation\n\nextension String {\n    func printHelloWorld() {\n        print(\"Hello World!\")\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Model.xcdatamodeld/.xccurrentversion",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>_XCCurrentVersionName</key>\n\t<string>Model 2.xcdatamodel</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Model.xcdatamodeld/Model 2.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"13772\" systemVersion=\"17D47\" minimumToolsVersion=\"Automatic\" sourceLanguage=\"Swift\" userDefinedModelVersionIdentifier=\"\">\n    <entity name=\"Entity\" representedClassName=\"Entity\" syncable=\"YES\" codeGenerationType=\"class\"/>\n    <elements>\n        <element name=\"Entity\" positionX=\"-63\" positionY=\"-18\" width=\"128\" height=\"45\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Model.xcdatamodeld/Model 3.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"13772\" systemVersion=\"17D47\" minimumToolsVersion=\"Automatic\" sourceLanguage=\"Swift\" userDefinedModelVersionIdentifier=\"\">\n    <entity name=\"Entity\" representedClassName=\"Entity\" syncable=\"YES\" codeGenerationType=\"class\"/>\n    <elements>\n        <element name=\"Entity\" positionX=\"-63\" positionY=\"-18\" width=\"128\" height=\"45\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Model.xcdatamodeld/Model.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"13772\" systemVersion=\"17D47\" minimumToolsVersion=\"Automatic\" sourceLanguage=\"Swift\" userDefinedModelVersionIdentifier=\"\">\n    <entity name=\"Entity\" representedClassName=\"Entity\" syncable=\"YES\" codeGenerationType=\"class\"/>\n    <elements>\n        <element name=\"Entity\" positionX=\"-63\" positionY=\"-18\" width=\"128\" height=\"45\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Model.xcmappingmodel/xcmapping.xml",
    "content": "<?xml version=\"1.0\"?>\n<!DOCTYPE database SYSTEM \"file:///System/Library/DTDs/CoreData.dtd\">\n\n<database>\n    <databaseInfo>\n        <version>134481920</version>\n        <UUID>38F33A39-5295-484D-9718-6E727C63501B</UUID>\n        <nextObjectID>103</nextObjectID>\n        <metadata>\n            <plist version=\"1.0\">\n                <dict>\n                    <key>NSPersistenceFrameworkVersion</key>\n                    <integer>977</integer>\n                    <key>NSStoreModelVersionHashes</key>\n                    <dict>\n                        <key>XDDevAttributeMapping</key>\n                        <data>\n\t\t0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc=\n\t\t</data>\n                        <key>XDDevEntityMapping</key>\n                        <data>\n\t\tqeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI=\n\t\t</data>\n                        <key>XDDevMappingModel</key>\n                        <data>\n\t\tEqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ=\n\t\t</data>\n                        <key>XDDevPropertyMapping</key>\n                        <data>\n\t\tXN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA=\n\t\t</data>\n                        <key>XDDevRelationshipMapping</key>\n                        <data>\n\t\takYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs=\n\t\t</data>\n                    </dict>\n                    <key>NSStoreModelVersionHashesDigest</key>\n                    <string>+Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A==</string>\n                    <key>NSStoreModelVersionHashesVersion</key>\n                    <integer>3</integer>\n                    <key>NSStoreModelVersionIdentifiers</key>\n                    <array>\n                        <string></string>\n                    </array>\n                </dict>\n            </plist>\n        </metadata>\n    </databaseInfo>\n    <object type=\"XDDEVMAPPINGMODEL\" id=\"z102\">\n        <attribute name=\"sourcemodelpath\" type=\"string\">App_iOS/Model.xcdatamodeld/Model.xcdatamodel</attribute>\n        <attribute name=\"sourcemodeldata\" type=\"binary\">YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0\ncxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxA2AAsADAAbADcAOAA5AEEAQgBVAFYAVwBdAF4AagCAAIEAggCDAIQAhQCGAIcAiACJAKIApQCsALIAwQDQANMA4gDxAPQAVAEEARMBFwEbASoBMAExATkBSAFRAVUBXgFiAWYBagFyAXUBeQF6VSRudWxs1wANAA4ADwAQABEAEgATABQAFQAWABcAGAAXABpfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKANYAygACAM4AAgDTeABwAHQAeAB8AIAAhACIADgAjACQAJQAmACcAKAApACoAKwAJACkAFwAvADAAMQAyADMAKQApABdfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASAMIAugAGABIAAgC+AMRAAgAWAA4AEgASAAFBTWUVT0wA6ADsADgA8AD4AQFdOUy5rZXlzWk5TLm9iamVjdHOhAD2ABqEAP4AHgCVWRW50aXR53ABDAEQARQBGACEADgBHACMASAAlACgASQBKAEsAKQApABQATwBQADEASgA9AFMAVF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZFtfaXNBYnN0cmFjdIAJgCyABIAEgAKALYAKgAmABoAICBIoNcHJV29yZGVyZWTTADoAOwAOAFgAWgBAoQBZgAuhAFuADIAlXlhEX1BTdGVyZW90eXBl2QAhACUAXwAOACgAYAAjAEkAYQA/AFkASgBlABcAKQAxAFQAaV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYAHgAuACYArgACABAiADdMAOgA7AA4AawB1AECpAGwAbQBuAG8AcABxAHIAcwB0gA6AD4AQgBGAEoATgBSAFYAWqQB2AHcAeAB5AHoAewB8AH0AfoAXgBuAHIAegB+AIYAjgCaAKoAlXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCKAIsAjAAhAI0AjgCPACMAkAAOACUAkQCSACgAkwAXAJUAFwBbAFQAVABUADEAVACcAGwAVABUABcAVFVfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAYgACADAgICAiAGoAOCAiAAAjSADsADgCjAKSggBnSAKYApwCoAKlaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAqACqAKtXTlNBcnJheVhOU09iamVjdNIApgCnAK0Arl8QEFhEVU1MUHJvcGVydHlJbXCkAK8AsACxAKtfEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwAXABcAWwBUAFQAVAAxAFQAnABtAFQAVAAXAFSAAIAAgACADAgICAiAGoAPCAiAAAjfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwDDABcAWwBUAFQAVAAxAFQAnABuAFQAVAAXAFSAAIAdgACADAgICAiAGoAQCAiAAAjSADsADgDRAKSggBnfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwAXABcAWwBUAFQAVAAxAFQAnABvAFQAVAAXAFSAAIAAgACADAgICAiAGoARCAiAAAjfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwDkABcAWwBUAFQAVAAxAFQAnABwAFQAVAAXAFSAAIAggACADAgICAiAGoASCAiAAAjSADsADgDyAKSggBnfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwD2ABcAWwBUAFQAVAAxAFQAnABxAFQAVAAXAFSAAIAigACADAgICAiAGoATCAiAAAgI3xAPAIoAiwCMACEAjQCOAI8AIwCQAA4AJQCRAJIAKACTABcBBgAXAFsAVABUAFQAMQBUAJwAcgBUAFQAFwBUgACAJIAAgAwICAgIgBqAFAgIgAAI0wA6ADsADgEUARUAQKCggCXSAKYApwEYARlfEBNOU011dGFibGVEaWN0aW9uYXJ5owEYARoAq1xOU0RpY3Rpb25hcnnfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwEdABcAWwBUAFQAVAAxAFQAnABzAFQAVAAXAFSAAIAngACADAgICAiAGoAVCAiAAAjWACUADgAoAEkAIQAjASsBLAAXAFQAFwAxgCiAKYAACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSAKYApwEyATNdWERVTUxDbGFzc0ltcKYBNAE1ATYBNwE4AKtdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwA9ABcAWwBUAFQAVAAxAFQAnAB0AFQAVAAXAFSAAIAGgACADAgICAiAGoAWCAiAAAjSAKYApwFJAUpfEBJYRFVNTFN0ZXJlb3R5cGVJbXCnAUsBTAFNAU4BTwFQAKtfEBJYRFVNTFN0ZXJlb3R5cGVJbXBdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDTADoAOwAOAVIBUwBAoKCAJdIApgCnAVYBV1pYRFBNRW50aXR5pwFYAVkBWgFbAVwBXQCrWlhEUE1FbnRpdHldWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDTADoAOwAOAV8BYABAoKCAJdMAOgA7AA4BYwFkAECgoIAl0wA6ADsADgFnAWgAQKCggCXSAKYApwFrAWxeWERNb2RlbFBhY2thZ2WmAW0BbgFvAXABcQCrXlhETW9kZWxQYWNrYWdlXxAPWERVTUxQYWNrYWdlSW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNIAOwAOAXMApKCAGdMAOgA7AA4BdgF3AECgoIAlUNIApgCnAXsBfFlYRFBNTW9kZWyjAXsBfQCrV1hETW9kZWwACAAZACIALAAxADoAPwBRAFYAWwBdAMwA0gDvAQEBCAEVASgBQAFOAWgBagFsAW4BcAFyAXQBdgGvAc4B6wIKAhwCPAJDAmECbQKJAo8CsQLSAuUC5wLpAusC7QLvAvEC8wL1AvcC+QL7Av0C/wMBAwIDBgMTAxsDJgMpAysDLgMwAzIDOQNqA44DsgPVA/wEHAQ8BEgESgRMBE4EUARSBFQEVgRYBFoEXARdBGIEagR3BHoEfAR/BIEEgwSSBLcE2wUCBSYFKAUqBSwFLgUwBTIFMwU1BUIFVQVXBVkFWwVdBV8FYQVjBWUFZwV6BXwFfgWABYIFhAWGBYgFigWMBY4FpAW3BdMF8AYMBiAGMgZIBmEGoAamBq8GvAbIBtIG3AbnBvIG/wcHBwkHCwcNBw8HEAcRBxIHEwcVBxcHGAcZBxsHHAclByYHKAcxBzwHRQdUB1sHYwdsB3UHiAeRB6QHuwfNCAwIDggQCBIIFAgVCBYIFwgYCBoIHAgdCB4IIAghCGAIYghkCGYIaAhpCGoIawhsCG4IcAhxCHIIdAh1CH4IfwiBCMAIwgjECMYIyAjJCMoIywjMCM4I0AjRCNII1AjVCRQJFgkYCRoJHAkdCR4JHwkgCSIJJAklCSYJKAkpCTIJMwk1CXQJdgl4CXoJfAl9CX4JfwmACYIJhAmFCYYJiAmJCYoJyQnLCc0JzwnRCdIJ0wnUCdUJ1wnZCdoJ2wndCd4J6wnsCe0J7wn4Cg4KFQoiCmEKYwplCmcKaQpqCmsKbAptCm8KcQpyCnMKdQp2Co8KkQqTCpUKlgqYCq8KuArGCtMK4Qr2CwoLIQszC3ILdAt2C3gLegt7C3wLfQt+C4ALgguDC4QLhguHC5ALpQu0C8kL1wvsDAAMFwwpDDYMNww4DDoMQwxODF0MaAx2DIsMnwy2DMgM1QzWDNcM2QzmDOcM6AzqDPcM+Az5DPsNBA0TDSANLw1BDVUNbA1+DYcNiA2KDZcNmA2ZDZsNnA2lDa8NtgAAAAAAAAICAAAAAAAAAX4AAAAAAAAAAAAAAAAAAA2+\n</attribute>\n        <attribute name=\"destinationmodelpath\" type=\"string\">App_iOS/Model.xcdatamodeld/Model 2.xcdatamodel</attribute>\n        <attribute name=\"destinationmodeldata\" type=\"binary\">YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0\ncxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxA2AAsADAAbADcAOAA5AEEAQgBVAFYAVwBdAF4AagCAAIEAggCDAIQAhQCGAIcAiACJAKIApQCsALIAwQDQANMA4gDxAPQAVAEEARMBFwEbASoBMAExATkBSAFRAVUBXgFiAWYBagFyAXUBeQF6VSRudWxs1wANAA4ADwAQABEAEgATABQAFQAWABcAGAAXABpfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKANYAygACAM4AAgDTeABwAHQAeAB8AIAAhACIADgAjACQAJQAmACcAKAApACoAKwAJACkAFwAvADAAMQAyADMAKQApABdfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASAMIAugAGABIAAgC+AMRAAgAWAA4AEgASAAFBTWUVT0wA6ADsADgA8AD4AQFdOUy5rZXlzWk5TLm9iamVjdHOhAD2ABqEAP4AHgCVWRW50aXR53ABDAEQARQBGACEADgBHACMASAAlACgASQBKAEsAKQApABQATwBQADEASgA9AFMAVF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZFtfaXNBYnN0cmFjdIAJgCyABIAEgAKALYAKgAmABoAICBL7Tr8NV29yZGVyZWTTADoAOwAOAFgAWgBAoQBZgAuhAFuADIAlXlhEX1BTdGVyZW90eXBl2QAhACUAXwAOACgAYAAjAEkAYQA/AFkASgBlABcAKQAxAFQAaV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYAHgAuACYArgACABAiADdMAOgA7AA4AawB1AECpAGwAbQBuAG8AcABxAHIAcwB0gA6AD4AQgBGAEoATgBSAFYAWqQB2AHcAeAB5AHoAewB8AH0AfoAXgBuAHIAegB+AIYAjgCaAKoAlXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCKAIsAjAAhAI0AjgCPACMAkAAOACUAkQCSACgAkwAXAJUAFwBbAFQAVABUADEAVACcAGwAVABUABcAVFVfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAYgACADAgICAiAGoAOCAiAAAjSADsADgCjAKSggBnSAKYApwCoAKlaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAqACqAKtXTlNBcnJheVhOU09iamVjdNIApgCnAK0Arl8QEFhEVU1MUHJvcGVydHlJbXCkAK8AsACxAKtfEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwAXABcAWwBUAFQAVAAxAFQAnABtAFQAVAAXAFSAAIAAgACADAgICAiAGoAPCAiAAAjfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwDDABcAWwBUAFQAVAAxAFQAnABuAFQAVAAXAFSAAIAdgACADAgICAiAGoAQCAiAAAjSADsADgDRAKSggBnfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwAXABcAWwBUAFQAVAAxAFQAnABvAFQAVAAXAFSAAIAAgACADAgICAiAGoARCAiAAAjfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwDkABcAWwBUAFQAVAAxAFQAnABwAFQAVAAXAFSAAIAggACADAgICAiAGoASCAiAAAjSADsADgDyAKSggBnfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwD2ABcAWwBUAFQAVAAxAFQAnABxAFQAVAAXAFSAAIAigACADAgICAiAGoATCAiAAAgI3xAPAIoAiwCMACEAjQCOAI8AIwCQAA4AJQCRAJIAKACTABcBBgAXAFsAVABUAFQAMQBUAJwAcgBUAFQAFwBUgACAJIAAgAwICAgIgBqAFAgIgAAI0wA6ADsADgEUARUAQKCggCXSAKYApwEYARlfEBNOU011dGFibGVEaWN0aW9uYXJ5owEYARoAq1xOU0RpY3Rpb25hcnnfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwEdABcAWwBUAFQAVAAxAFQAnABzAFQAVAAXAFSAAIAngACADAgICAiAGoAVCAiAAAjWACUADgAoAEkAIQAjASsBLAAXAFQAFwAxgCiAKYAACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSAKYApwEyATNdWERVTUxDbGFzc0ltcKYBNAE1ATYBNwE4AKtdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AigCLAIwAIQCNAI4AjwAjAJAADgAlAJEAkgAoAJMAFwA9ABcAWwBUAFQAVAAxAFQAnAB0AFQAVAAXAFSAAIAGgACADAgICAiAGoAWCAiAAAjSAKYApwFJAUpfEBJYRFVNTFN0ZXJlb3R5cGVJbXCnAUsBTAFNAU4BTwFQAKtfEBJYRFVNTFN0ZXJlb3R5cGVJbXBdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDTADoAOwAOAVIBUwBAoKCAJdIApgCnAVYBV1pYRFBNRW50aXR5pwFYAVkBWgFbAVwBXQCrWlhEUE1FbnRpdHldWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDTADoAOwAOAV8BYABAoKCAJdMAOgA7AA4BYwFkAECgoIAl0wA6ADsADgFnAWgAQKCggCXSAKYApwFrAWxeWERNb2RlbFBhY2thZ2WmAW0BbgFvAXABcQCrXlhETW9kZWxQYWNrYWdlXxAPWERVTUxQYWNrYWdlSW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNIAOwAOAXMApKCAGdMAOgA7AA4BdgF3AECgoIAlUNIApgCnAXsBfFlYRFBNTW9kZWyjAXsBfQCrV1hETW9kZWwACAAZACIALAAxADoAPwBRAFYAWwBdAMwA0gDvAQEBCAEVASgBQAFOAWgBagFsAW4BcAFyAXQBdgGvAc4B6wIKAhwCPAJDAmECbQKJAo8CsQLSAuUC5wLpAusC7QLvAvEC8wL1AvcC+QL7Av0C/wMBAwIDBgMTAxsDJgMpAysDLgMwAzIDOQNqA44DsgPVA/wEHAQ8BEgESgRMBE4EUARSBFQEVgRYBFoEXARdBGIEagR3BHoEfAR/BIEEgwSSBLcE2wUCBSYFKAUqBSwFLgUwBTIFMwU1BUIFVQVXBVkFWwVdBV8FYQVjBWUFZwV6BXwFfgWABYIFhAWGBYgFigWMBY4FpAW3BdMF8AYMBiAGMgZIBmEGoAamBq8GvAbIBtIG3AbnBvIG/wcHBwkHCwcNBw8HEAcRBxIHEwcVBxcHGAcZBxsHHAclByYHKAcxBzwHRQdUB1sHYwdsB3UHiAeRB6QHuwfNCAwIDggQCBIIFAgVCBYIFwgYCBoIHAgdCB4IIAghCGAIYghkCGYIaAhpCGoIawhsCG4IcAhxCHIIdAh1CH4IfwiBCMAIwgjECMYIyAjJCMoIywjMCM4I0AjRCNII1AjVCRQJFgkYCRoJHAkdCR4JHwkgCSIJJAklCSYJKAkpCTIJMwk1CXQJdgl4CXoJfAl9CX4JfwmACYIJhAmFCYYJiAmJCYoJyQnLCc0JzwnRCdIJ0wnUCdUJ1wnZCdoJ2wndCd4J6wnsCe0J7wn4Cg4KFQoiCmEKYwplCmcKaQpqCmsKbAptCm8KcQpyCnMKdQp2Co8KkQqTCpUKlgqYCq8KuArGCtMK4Qr2CwoLIQszC3ILdAt2C3gLegt7C3wLfQt+C4ALgguDC4QLhguHC5ALpQu0C8kL1wvsDAAMFwwpDDYMNww4DDoMQwxODF0MaAx2DIsMnwy2DMgM1QzWDNcM2QzmDOcM6AzqDPcM+Az5DPsNBA0TDSANLw1BDVUNbA1+DYcNiA2KDZcNmA2ZDZsNnA2lDa8NtgAAAAAAAAICAAAAAAAAAX4AAAAAAAAAAAAAAAAAAA2+\n</attribute>\n        <relationship name=\"entitymappings\" type=\"0/0\" destination=\"XDDEVENTITYMAPPING\" idrefs=\"z103\"></relationship>\n    </object>\n    <object type=\"XDDEVENTITYMAPPING\" id=\"z103\">\n        <attribute name=\"sourcename\" type=\"string\">Entity</attribute>\n        <attribute name=\"mappingtypename\" type=\"string\">Undefined</attribute>\n        <attribute name=\"mappingnumber\" type=\"int16\">1</attribute>\n        <attribute name=\"destinationname\" type=\"string\">Entity</attribute>\n        <attribute name=\"autogenerateexpression\" type=\"bool\">1</attribute>\n        <relationship name=\"mappingmodel\" type=\"1/1\" destination=\"XDDEVMAPPINGMODEL\" idrefs=\"z102\"></relationship>\n        <relationship name=\"attributemappings\" type=\"0/0\" destination=\"XDDEVATTRIBUTEMAPPING\"></relationship>\n        <relationship name=\"relationshipmappings\" type=\"0/0\" destination=\"XDDEVRELATIONSHIPMAPPING\"></relationship>\n    </object>\n</database>"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Resource.abc",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Resource.abcd/File.json",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/Settings.bundle/Root.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>StringsTable</key>\n\t<string>Root</string>\n\t<key>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Group</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSTextFieldSpecifier</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Name</string>\n\t\t\t<key>Key</key>\n\t\t\t<string>name_preference</string>\n\t\t\t<key>DefaultValue</key>\n\t\t\t<string></string>\n\t\t\t<key>IsSecure</key>\n\t\t\t<false/>\n\t\t\t<key>KeyboardType</key>\n\t\t\t<string>Alphabet</string>\n\t\t\t<key>AutocapitalizationType</key>\n\t\t\t<string>None</string>\n\t\t\t<key>AutocorrectionType</key>\n\t\t\t<string>No</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSToggleSwitchSpecifier</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Enabled</string>\n\t\t\t<key>Key</key>\n\t\t\t<string>enabled_preference</string>\n\t\t\t<key>DefaultValue</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSSliderSpecifier</string>\n\t\t\t<key>Key</key>\n\t\t\t<string>slider_preference</string>\n\t\t\t<key>DefaultValue</key>\n\t\t\t<real>0.5</real>\n\t\t\t<key>MinimumValue</key>\n\t\t\t<integer>0</integer>\n\t\t\t<key>MaximumValue</key>\n\t\t\t<integer>1</integer>\n\t\t\t<key>MinimumValueImage</key>\n\t\t\t<string></string>\n\t\t\t<key>MaximumValueImage</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/TestIcon.icon/icon.json",
    "content": "{\n  \"groups\" : [\n    {\n      \"layers\" : [\n        {\n          \"image-name\" : \"back.svg\",\n          \"name\" : \"back\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              0,\n              0\n            ]\n          }\n        }\n      ],\n      \"shadow\" : {\n        \"kind\" : \"neutral\",\n        \"opacity\" : 0\n      },\n      \"translucency\" : {\n        \"enabled\" : false,\n        \"value\" : 0.1\n      }\n    }\n  ],\n  \"supported-platforms\" : {\n    \"squares\" : \"shared\"\n  }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/ViewController.swift",
    "content": "import Contacts\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        _ = CNContact()\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/en.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  Project\n\n  Created by ryohey on 2017/11/03.\n  \n*/\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/en.lproj/Localizable.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>StringKey</key>\n\t<dict>\n\t\t<key>NSStringLocalizedFormatKey</key>\n\t\t<string>%#@VARIABLE@</string>\n\t\t<key>Variable</key>\n\t\t<dict>\n\t\t\t<key>NSStringFormatSpecTypeKey</key>\n\t\t\t<string>NSStringPluralRuleType</string>\n\t\t\t<key>NSStringFormatValueTypeKey</key>\n\t\t\t<string></string>\n\t\t\t<key>zero</key>\n\t\t\t<string></string>\n\t\t\t<key>one</key>\n\t\t\t<string></string>\n\t\t\t<key>two</key>\n\t\t\t<string></string>\n\t\t\t<key>few</key>\n\t\t\t<string></string>\n\t\t\t<key>many</key>\n\t\t\t<string></string>\n\t\t\t<key>other</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/en.lproj/LocalizedStoryboard.strings",
    "content": "\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/excluded-file",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/inputList.xcfilelist",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/module.modulemap",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS/outputList.xcfilelist",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS_Tests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS_Tests/TestProjectTests.swift",
    "content": "import XCTest\n\nclass TestProjectTests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS_UITests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_iOS_UITests/TestProjectUITests.swift",
    "content": "import XCTest\n\nclass TestProjectUITests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS/App-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>CustomSetting</key>\n\t<string>$CUSTOM_SETTING</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS/AppDelegate.swift",
    "content": "import Cocoa\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate {\n\n    func applicationDidFinishLaunching(_ aNotification: Notification) {\n        // Insert code here to initialize your application\n    }\n\n    func applicationWillTerminate(_ aNotification: Notification) {\n        // Insert code here to tear down your application\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\" initialViewController=\"B8D-0N-5wS\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"11134\"/>\n    </dependencies>\n    <scenes>\n        <!--Application-->\n        <scene sceneID=\"JPo-4y-FX3\">\n            <objects>\n                <application id=\"hnw-xV-0zn\" sceneMemberID=\"viewController\">\n                    <menu key=\"mainMenu\" title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n                        <items>\n                            <menuItem title=\"dfg\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"dfg\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About dfg\" id=\"5kV-Vb-QxS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontStandardAboutPanel:\" target=\"Ady-hI-5gd\" id=\"Exp-CZ-Vem\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                                        <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                                        <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                                        <menuItem title=\"Hide dfg\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                            <connections>\n                                                <action selector=\"hide:\" target=\"Ady-hI-5gd\" id=\"PnN-Uc-m68\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"hideOtherApplications:\" target=\"Ady-hI-5gd\" id=\"VT4-aY-XCT\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"unhideAllApplications:\" target=\"Ady-hI-5gd\" id=\"Dhg-Le-xox\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                                        <menuItem title=\"Quit dfg\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                            <connections>\n                                                <action selector=\"terminate:\" target=\"Ady-hI-5gd\" id=\"Te7-pn-YzF\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                                    <items>\n                                        <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                            <connections>\n                                                <action selector=\"newDocument:\" target=\"Ady-hI-5gd\" id=\"4Si-XN-c54\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                            <connections>\n                                                <action selector=\"openDocument:\" target=\"Ady-hI-5gd\" id=\"bVn-NM-KNZ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                                <items>\n                                                    <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"clearRecentDocuments:\" target=\"Ady-hI-5gd\" id=\"Daa-9d-B3U\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                                        <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                            <connections>\n                                                <action selector=\"performClose:\" target=\"Ady-hI-5gd\" id=\"HmO-Ls-i7Q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                            <connections>\n                                                <action selector=\"saveDocument:\" target=\"Ady-hI-5gd\" id=\"teZ-XB-qJY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                            <connections>\n                                                <action selector=\"saveDocumentAs:\" target=\"Ady-hI-5gd\" id=\"mDf-zr-I0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                            <connections>\n                                                <action selector=\"revertDocumentToSaved:\" target=\"Ady-hI-5gd\" id=\"iJ3-Pv-kwq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                                        <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"runPageLayout:\" target=\"Ady-hI-5gd\" id=\"Din-rz-gC5\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                            <connections>\n                                                <action selector=\"print:\" target=\"Ady-hI-5gd\" id=\"qaZ-4w-aoO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                                    <items>\n                                        <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                            <connections>\n                                                <action selector=\"undo:\" target=\"Ady-hI-5gd\" id=\"M6e-cu-g7V\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                            <connections>\n                                                <action selector=\"redo:\" target=\"Ady-hI-5gd\" id=\"oIA-Rs-6OD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                                        <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                            <connections>\n                                                <action selector=\"cut:\" target=\"Ady-hI-5gd\" id=\"YJe-68-I9s\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                            <connections>\n                                                <action selector=\"copy:\" target=\"Ady-hI-5gd\" id=\"G1f-GL-Joy\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                            <connections>\n                                                <action selector=\"paste:\" target=\"Ady-hI-5gd\" id=\"UvS-8e-Qdg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteAsPlainText:\" target=\"Ady-hI-5gd\" id=\"cEh-KX-wJQ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"delete:\" target=\"Ady-hI-5gd\" id=\"0Mk-Ml-PaM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                            <connections>\n                                                <action selector=\"selectAll:\" target=\"Ady-hI-5gd\" id=\"VNm-Mi-diN\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                                        <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                                <items>\n                                                    <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"cD7-Qs-BN4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"WD3-Gg-5AJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"NDo-RZ-v9R\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"HOh-sY-3ay\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"U76-nv-p5D\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                                        <connections>\n                                                            <action selector=\"centerSelectionInVisibleArea:\" target=\"Ady-hI-5gd\" id=\"IOG-6D-g5B\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                                <items>\n                                                    <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                                        <connections>\n                                                            <action selector=\"showGuessPanel:\" target=\"Ady-hI-5gd\" id=\"vFj-Ks-hy3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                                        <connections>\n                                                            <action selector=\"checkSpelling:\" target=\"Ady-hI-5gd\" id=\"fz7-VC-reM\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                                    <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleContinuousSpellChecking:\" target=\"Ady-hI-5gd\" id=\"7w6-Qz-0kB\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleGrammarChecking:\" target=\"Ady-hI-5gd\" id=\"muD-Qn-j4w\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"Ady-hI-5gd\" id=\"2lM-Qi-WAP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                                <items>\n                                                    <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"orderFrontSubstitutionsPanel:\" target=\"Ady-hI-5gd\" id=\"oku-mr-iSq\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                                    <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleSmartInsertDelete:\" target=\"Ady-hI-5gd\" id=\"3IJ-Se-DZD\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"Ady-hI-5gd\" id=\"ptq-xd-QOA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDashSubstitution:\" target=\"Ady-hI-5gd\" id=\"oCt-pO-9gS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticLinkDetection:\" target=\"Ady-hI-5gd\" id=\"Gip-E3-Fov\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDataDetection:\" target=\"Ady-hI-5gd\" id=\"R1I-Nq-Kbl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticTextReplacement:\" target=\"Ady-hI-5gd\" id=\"DvP-Fe-Py6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                                <items>\n                                                    <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"uppercaseWord:\" target=\"Ady-hI-5gd\" id=\"sPh-Tk-edu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowercaseWord:\" target=\"Ady-hI-5gd\" id=\"iUZ-b5-hil\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"capitalizeWord:\" target=\"Ady-hI-5gd\" id=\"26H-TL-nsh\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                                <items>\n                                                    <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"startSpeaking:\" target=\"Ady-hI-5gd\" id=\"654-Ng-kyl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"stopSpeaking:\" target=\"Ady-hI-5gd\" id=\"dX8-6p-jy9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                                    <items>\n                                        <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                                <items>\n                                                    <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                                        <connections>\n                                                            <action selector=\"underline:\" target=\"Ady-hI-5gd\" id=\"FYS-2b-JAY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                                    <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                                    <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardKerning:\" target=\"Ady-hI-5gd\" id=\"6dk-9l-Ckg\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffKerning:\" target=\"Ady-hI-5gd\" id=\"U8a-gz-Maa\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"tightenKerning:\" target=\"Ady-hI-5gd\" id=\"hr7-Nz-8ro\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"loosenKerning:\" target=\"Ady-hI-5gd\" id=\"8i4-f9-FKE\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardLigatures:\" target=\"Ady-hI-5gd\" id=\"7uR-wd-Dx6\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffLigatures:\" target=\"Ady-hI-5gd\" id=\"iX2-gA-Ilz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useAllLigatures:\" target=\"Ady-hI-5gd\" id=\"KcB-kA-TuK\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"unscript:\" target=\"Ady-hI-5gd\" id=\"0vZ-95-Ywn\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"superscript:\" target=\"Ady-hI-5gd\" id=\"3qV-fo-wpU\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"subscript:\" target=\"Ady-hI-5gd\" id=\"Q6W-4W-IGz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"raiseBaseline:\" target=\"Ady-hI-5gd\" id=\"4sk-31-7Q9\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"lowerBaseline:\" target=\"Ady-hI-5gd\" id=\"OF1-bc-KW4\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                                    <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontColorPanel:\" target=\"Ady-hI-5gd\" id=\"mSX-Xz-DV3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                                    <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyFont:\" target=\"Ady-hI-5gd\" id=\"GJO-xA-L4q\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteFont:\" target=\"Ady-hI-5gd\" id=\"JfD-CL-leO\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                                <items>\n                                                    <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                                        <connections>\n                                                            <action selector=\"alignLeft:\" target=\"Ady-hI-5gd\" id=\"zUv-R1-uAa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                                        <connections>\n                                                            <action selector=\"alignCenter:\" target=\"Ady-hI-5gd\" id=\"spX-mk-kcS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"alignJustified:\" target=\"Ady-hI-5gd\" id=\"ljL-7U-jND\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                                        <connections>\n                                                            <action selector=\"alignRight:\" target=\"Ady-hI-5gd\" id=\"r48-bG-YeY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                                    <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                            <items>\n                                                                <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"YGs-j5-SAR\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"qtV-5e-UBP\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"Lbh-J2-qVU\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"S0X-9S-QSf\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"jFq-tB-4Kx\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"5fk-qB-AqJ\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                                <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"Nop-cj-93Q\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"lPI-Se-ZHp\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"BgM-ve-c93\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"caW-Bv-w94\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"RB4-Sm-HuC\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"EXD-6r-ZUu\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                                    <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleRuler:\" target=\"Ady-hI-5gd\" id=\"FOx-HJ-KwY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyRuler:\" target=\"Ady-hI-5gd\" id=\"71i-fW-3W2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteRuler:\" target=\"Ady-hI-5gd\" id=\"cSh-wd-qM2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                                    <items>\n                                        <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleToolbarShown:\" target=\"Ady-hI-5gd\" id=\"BXY-wc-z0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"runToolbarCustomizationPalette:\" target=\"Ady-hI-5gd\" id=\"pQI-g3-MTW\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                                        <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleSourceList:\" target=\"Ady-hI-5gd\" id=\"iwa-gc-5KM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleFullScreen:\" target=\"Ady-hI-5gd\" id=\"dU3-MA-1Rq\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                                    <items>\n                                        <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                            <connections>\n                                                <action selector=\"performMiniaturize:\" target=\"Ady-hI-5gd\" id=\"VwT-WD-YPe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"performZoom:\" target=\"Ady-hI-5gd\" id=\"DIl-cC-cCs\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                                        <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"arrangeInFront:\" target=\"Ady-hI-5gd\" id=\"DRN-fu-gQh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                                    <items>\n                                        <menuItem title=\"dfg Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                            <connections>\n                                                <action selector=\"showHelp:\" target=\"Ady-hI-5gd\" id=\"y7X-2Q-9no\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"PrD-fu-P6m\"/>\n                    </connections>\n                </application>\n                <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModuleProvider=\"target\"/>\n                <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n                <customObject id=\"Ady-hI-5gd\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"0.0\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"R2V-B0-nI4\">\n            <objects>\n                <windowController id=\"B8D-0N-5wS\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"Window\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" oneShot=\"NO\" releasedWhenClosed=\"NO\" showsToolbarButton=\"NO\" visibleAtLaunch=\"NO\" animationBehavior=\"default\" id=\"IQv-IB-iLA\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n                        <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"196\" y=\"240\" width=\"480\" height=\"270\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1680\" height=\"1027\"/>\n\t\t\t<connections>\n                            <outlet property=\"delegate\" destination=\"B8D-0N-5wS\" id=\"98r-iN-zZc\"/>\n                        </connections>\n                    </window>\n                    <connections>\n                        <segue destination=\"XfG-lQ-9wD\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"cq2-FE-JQM\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"Oky-zY-oP4\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"250\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"hIz-AP-VOD\">\n            <objects>\n                <viewController id=\"XfG-lQ-9wD\" customClass=\"ViewController\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" wantsLayer=\"YES\" id=\"m2S-Jp-Qdl\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"270\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </view>\n                </viewController>\n                <customObject id=\"rPt-NT-nkU\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"655\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS/ViewController.swift",
    "content": "import Cocoa\n\nclass ViewController: NSViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        // Do any additional setup after loading the view.\n    }\n\n    override var representedObject: Any? {\n        didSet {\n            // Update the view, if already loaded.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS_Tests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_macOS_Tests/TestProjectTests.swift",
    "content": "import XCTest\n\nclass TestProjectTests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/Info.generated.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>TestApp</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/Sources/MyAppApp.swift",
    "content": "import SwiftUI\n\n@main\nstruct MyAppApp: App {\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/Sources/iOS/ContentView.swift",
    "content": "import SwiftUI\n\nstruct ContentView: View {\n    var body: some View {\n        VStack {\n            Image(systemName: \"globe\")\n                .imageScale(.large)\n                .foregroundColor(.accentColor)\n            Text(\"Hello, world! on iOS\")\n        }\n        .padding()\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/Sources/tvOS/ContentView.swift",
    "content": "import SwiftUI\n\nstruct ContentView: View {\n    var body: some View {\n        VStack {\n            Image(systemName: \"house\")\n                .imageScale(.large)\n                .foregroundColor(.accentColor)\n            Text(\"Hello, world! tvOS\")\n        }\n        .padding()\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/Storyboards/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13122.16\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" xcode11CocoaTouchSystemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/File_MACCATALYST.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/File_ios.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/File_macOS.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/File_tvOs.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/TVOS/File_B.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/iOs/File_A.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/macCatalyst/File_D.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_supportedDestinations/TestResources/macos/File_C.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"24x24\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"notificationCenter\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"size\" : \"27.5x27.5\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"notificationCenter\",\n      \"subtype\" : \"42mm\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"companionSettings\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"watch\",\n      \"role\" : \"companionSettings\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"appLauncher\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"size\" : \"86x86\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"quickLook\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"size\" : \"98x98\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"quickLook\",\n      \"subtype\" : \"42mm\"\n    },\n    {\n      \"idiom\" : \"watch-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS/Base.lproj/Interface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder.WatchKit.Storyboard\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"watchKit\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"AgC-eL-Hgc\">\n    <device id=\"watch38\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"watchOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBWatchKitPlugin\" version=\"13756\"/>\n    </dependencies>\n    <scenes>\n        <!--Interface Controller-->\n        <scene sceneID=\"aou-V4-d1y\">\n            <objects>\n                <controller id=\"AgC-eL-Hgc\" customClass=\"InterfaceController\" customModule=\"App_watchOS_Extension\">\n                    <items>\n                        <button width=\"1\" alignment=\"left\" title=\"Hello\" id=\"cle-qM-Oq5\"/>\n                    </items>\n                </controller>\n            </objects>\n            <point key=\"canvasLocation\" x=\"220\" y=\"345\"/>\n        </scene>\n        <!--Static Notification Interface Controller-->\n        <scene sceneID=\"AEw-b0-oYE\">\n            <objects>\n                <notificationController id=\"YCC-NB-fut\">\n                    <items>\n                        <label alignment=\"left\" text=\"Alert Label\" id=\"IdU-wH-bcW\"/>\n                    </items>\n                    <notificationCategory key=\"notificationCategory\" identifier=\"myCategory\" id=\"JfB-70-Muf\"/>\n                    <connections>\n                        <outlet property=\"notificationAlertLabel\" destination=\"IdU-wH-bcW\" id=\"JKC-fr-R95\"/>\n                        <segue destination=\"4sK-HA-Art\" kind=\"relationship\" relationship=\"dynamicNotificationInterface\" id=\"kXh-Jw-8B1\"/>\n                    </connections>\n                </notificationController>\n            </objects>\n            <point key=\"canvasLocation\" x=\"220\" y=\"643\"/>\n        </scene>\n        <!--Notification Controller-->\n        <scene sceneID=\"ZPc-GJ-vnh\">\n            <objects>\n                <controller id=\"4sK-HA-Art\" customClass=\"NotificationController\" customModule=\"App_watchOS_Extension\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"468\" y=\"643\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>App_iOS</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n\t<key>WKCompanionAppBundleIdentifier</key>\n\t<string>com.project.app</string>\n\t<key>WKWatchKitApp</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{130,145}\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{146,165}\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/Assets.xcassets/Complication.complicationset/Contents.json",
    "content": "{\n  \"assets\" : [\n    {\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Circular.imageset\",\n      \"role\" : \"circular\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Extra Large.imageset\",\n      \"role\" : \"extra-large\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Modular.imageset\",\n      \"role\" : \"modular\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Utilitarian.imageset\",\n      \"role\" : \"utilitarian\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{130,145}\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{146,165}\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{130,145}\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{146,165}\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{130,145}\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"watch\",\n      \"screenWidth\" : \"{146,165}\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/ExtensionDelegate.swift",
    "content": "import WatchKit\n\nclass ExtensionDelegate: NSObject, WKExtensionDelegate {\n\n    func applicationDidFinishLaunching() {\n        // Perform any final initialization of your application.\n    }\n\n    func applicationDidBecomeActive() {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillResignActive() {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, etc.\n    }\n\n    func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {\n        // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.\n        for task in backgroundTasks {\n            // Use a switch statement to check the task type\n            switch task {\n            case let backgroundTask as WKApplicationRefreshBackgroundTask:\n                // Be sure to complete the background task once you’re done.\n                backgroundTask.setTaskCompletedWithSnapshot(false)\n            case let snapshotTask as WKSnapshotRefreshBackgroundTask:\n                // Snapshot tasks have a unique completion call, make sure to set your expiration date\n                snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil)\n            case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:\n                // Be sure to complete the connectivity task once you’re done.\n                connectivityTask.setTaskCompletedWithSnapshot(false)\n            case let urlSessionTask as WKURLSessionRefreshBackgroundTask:\n                // Be sure to complete the URL session task once you’re done.\n                urlSessionTask.setTaskCompletedWithSnapshot(false)\n            default:\n                // make sure to complete unhandled task types\n                task.setTaskCompletedWithSnapshot(false)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>App_watchOS Extension</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>WKAppBundleIdentifier</key>\n\t\t\t<string>com.project.app.watch</string>\n\t\t</dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.watchkit</string>\n\t</dict>\n\t<key>WKExtensionDelegateClassName</key>\n\t<string>$(PRODUCT_MODULE_NAME).ExtensionDelegate</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/InterfaceController.swift",
    "content": "import Foundation\nimport WatchKit\n\nclass InterfaceController: WKInterfaceController {\n\n    override func awake(withContext context: Any?) {\n        super.awake(withContext: context)\n        // Configure interface objects here.\n    }\n\n    override func willActivate() {\n        // This method is called when watch view controller is about to be visible to user\n        super.willActivate()\n    }\n\n    override func didDeactivate() {\n        // This method is called when watch view controller is no longer visible\n        super.didDeactivate()\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/NotificationController.swift",
    "content": "import Foundation\nimport UserNotifications\nimport WatchKit\n\nclass NotificationController: WKUserNotificationInterfaceController {\n\n    override init() {\n        // Initialize variables here.\n        super.init()\n\n        // Configure interface objects here.\n    }\n\n    override func willActivate() {\n        // This method is called when watch view controller is about to be visible to user\n        super.willActivate()\n    }\n\n    override func didDeactivate() {\n        // This method is called when watch view controller is no longer visible\n        super.didDeactivate()\n    }\n\n    /*\n     override func didReceive(_ notification: UNNotification, withCompletion completionHandler: @escaping (WKUserNotificationInterfaceType) -> Swift.Void) {\n     // This method is called when a notification needs to be presented.\n     // Implement it if you use a dynamic notification interface.\n     // Populate your dynamic notification interface as quickly as possible.\n     //\n     // After populating your dynamic notification interface call the completion block.\n     completionHandler(.custom)\n     }\n     */\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/App_watchOS Extension/PushNotificationPayload.apns",
    "content": "{\n    \"aps\": {\n        \"alert\": {\n            \"body\": \"Test message\",\n            \"title\": \"Optional title\"\n        },\n        \"category\": \"myCategory\",\n        \"thread-id\":\"5280\"\n    },\n    \n    \"WatchKit Simulator Actions\": [\n        {\n            \"title\": \"First Button\",\n            \"identifier\": \"firstButtonAction\"\n        }\n    ],\n    \n    \"customKey\": \"Use this file to define a testing payload for your notifications. The aps dictionary specifies the category, alert text and title. The WatchKit Simulator Actions array can provide info for one or more action buttons in addition to the standard Dismiss button. Any other top level keys are custom payload. If you have multiple such JSON files in your project, you'll be able to select them when choosing to debug the notification interface of your Watch App.\"\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Cartfile",
    "content": "github \"antitypical/Result\"\ngithub \"SwiftyJSON/SwiftyJSON\"\ngithub \"pointfreeco/swift-nonempty\"\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Cartfile.resolved",
    "content": "github \"SwiftyJSON/SwiftyJSON\" \"5.0.0\"\ngithub \"antitypical/Result\" \"5.0.0\"\ngithub \"pointfreeco/swift-nonempty\" \"0.2.2\"\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Configs/base.xcconfig",
    "content": "BASE_SETTING = baseSetting\nOVERWRITTEN_SETTING = base\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Configs/config.xcconfig",
    "content": "#include \"base.xcconfig\"\n\nCONFIG_SETTING = configSetting\nOVERWRITTEN_SETTING = new\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/CopyFiles/Empty.h",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/CrossOverlayFramework/CrossOverlayFramework.swiftcrossimport/Framework.swiftoverlay",
    "content": "%YAML 1.2\n---\nversion: 1\nmodules:\n  - name: _CrossOverlayFramework_Framework\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/CrossOverlayFramework/FrameworkFile.swift",
    "content": "import Foundation\n\npublic struct FrameworkStruct {\n\n    public init() {}\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/CrossOverlayFramework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/CrossOverlayFramework/MyFramework.h",
    "content": "//\n//  MyFramework.h\n//  MyFramework\n//\n//  Created by Yonas Kolb on 21/7/17.\n//  Copyright © 2017 Yonas Kolb. All rights reserved.\n//\n\n\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/CrossOverlayFramework/Project.xcodeproj/project.pbxproj",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/DriverKit Driver/Driver.cpp",
    "content": "//\n//  Driver.cpp\n//  Driver\n//\n//  Created by Vlad Gorlov on 18.06.21.\n//\n\n#include <os/log.h>\n\n#include <DriverKit/IOUserServer.h>\n#include <DriverKit/IOLib.h>\n\n#include \"Driver.h\"\n\nkern_return_t\nIMPL(Driver, Start)\n{\n    kern_return_t ret;\n    ret = Start(provider, SUPERDISPATCH);\n    os_log(OS_LOG_DEFAULT, \"Hello World\");\n    return ret;\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/DriverKit Driver/Driver.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/DriverKit Driver/Driver.iig",
    "content": "//\n//  Driver.iig\n//  Driver\n//\n//  Created by Vlad Gorlov on 18.06.21.\n//\n\n#ifndef Driver_h\n#define Driver_h\n\n#include <Availability.h>\n#include <DriverKit/IOService.iig>\n\nclass Driver: public IOService\n{\npublic:\n    virtual kern_return_t\n    Start(IOService * provider) override;\n};\n\n#endif /* Driver_h */\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/DriverKit Driver/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>IOKitPersonalities</key>\n\t<dict>\n\t\t<key>Driver</key>\n\t\t<dict>\n\t\t\t<key>CFBundleIdentifier</key>\n\t\t\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t\t\t<key>CFBundleIdentifierKernel</key>\n\t\t\t<string>com.apple.kpi.iokit</string>\n\t\t\t<key>IOClass</key>\n\t\t\t<string>IOUserService</string>\n\t\t\t<key>IOMatchCategory</key>\n\t\t\t<string>com.apple.null.driver</string>\n\t\t\t<key>IOProviderClass</key>\n\t\t\t<string>IOUserResources</string>\n\t\t\t<key>IOResourceMatch</key>\n\t\t\t<string>IOKit</string>\n\t\t\t<key>IOUserClass</key>\n\t\t\t<string>Driver</string>\n\t\t\t<key>IOUserServerName</key>\n\t\t\t<string>com.apple.null.driver</string>\n\t\t</dict>\n\t</dict>\n\t<key>OSBundleUsageDescription</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/EndpointSecurity Extension/EndpointSecurity.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.developer.endpoint-security.client</key>\n\t<true/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>$(TeamIdentifierPrefix)com.example.app-group</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/EndpointSecurity Extension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>EndpointSecurity</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSSystemExtensionUsageDescription</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/EndpointSecurity Extension/main.swift",
    "content": "//\n//  main.swift\n//  EndpointSecurity\n//\n//  Created by Vlad Gorlov on 18.06.21.\n//\n\nimport Foundation\nimport EndpointSecurity\n\nvar client: OpaquePointer?\n\n// Create the client\nlet res = es_new_client(&client) { (client, message) in\n    // Do processing on the message received\n}\n\nif res != ES_NEW_CLIENT_RESULT_SUCCESS {\n    exit(EXIT_FAILURE)\n}\n\ndispatchMain()\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/ExtensionKit Extension/EntryPoint.swift",
    "content": "import AppIntents\n\n@main\nstruct EntryPoint: AppIntentsExtension {\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/ExtensionKit Extension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>EXAppExtensionAttributes</key>\n\t<dict>\n\t\t<key>EXExtensionPointIdentifier</key>\n\t\t<string>com.apple.appintents-extension</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/ExtensionKit Extension/Intent.swift",
    "content": "import AppIntents\n\nstruct Intent: AppIntent {\n    static var title: LocalizedStringResource = \"Intent\"\n    \n    func perform() async throws -> some IntentResult {\n        return .result()\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/FileGroup/UnderFileGroup/MoreUnder.swift",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Folder/Folder1/file.file",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Folder/Folder2/file.file",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Framework/FrameworkFile.swift",
    "content": "import Foundation\n\npublic struct FrameworkStruct {\n\n    public init() {}\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Framework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Framework/MyFramework.h",
    "content": "//\n//  MyFramework.h\n//  MyFramework\n//\n//  Created by Yonas Kolb on 21/7/17.\n//  Copyright © 2017 Yonas Kolb. All rights reserved.\n//\n\n\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Framework/Project.xcodeproj/project.pbxproj",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Group/File1.swift",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Group2/File2.swift",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Headers/Folder1/Header2.h",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Headers/Header1.h",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Mintfile",
    "content": "\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/NestedFiles/Foo/Nested.swift",
    "content": "func nested() -> String {\n    \"Nested\"\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Network Extension/FilterDataProvider.swift",
    "content": "//\n//  FilterDataProvider.swift\n//  NetworkExtension\n//\n//  Created by Vlad Gorlov on 18.06.21.\n//\n\nimport NetworkExtension\n\nclass FilterDataProvider: NEFilterDataProvider {\n\n    override func startFilter(completionHandler: @escaping (Error?) -> Void) {\n        // Add code to initialize the filter.\n        completionHandler(nil)\n    }\n    \n    override func stopFilter(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {\n        // Add code to clean up filter resources.\n        completionHandler()\n    }\n    \n    override func handleNewFlow(_ flow: NEFilterFlow) -> NEFilterNewFlowVerdict {\n        // Add code to determine if the flow should be dropped or not, downloading new rules if required.\n        return .allow()\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Network Extension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>NetworkExtension</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSSystemExtensionUsageDescription</key>\n\t<string></string>\n\t<key>NetworkExtension</key>\n\t<dict>\n\t\t<key>NEMachServiceName</key>\n\t\t<string>$(TeamIdentifierPrefix)com.example.app-group.MySystemExtension</string>\n\t\t<key>NEProviderClasses</key>\n\t\t<dict>\n\t\t\t<key>com.apple.networkextension.filter-data</key>\n\t\t\t<string>$(PRODUCT_MODULE_NAME).FilterDataProvider</string>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Network Extension/NetworkExtension.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>$(TeamIdentifierPrefix)com.example.app-group</string>\n\t</array>\n\t<key>com.apple.developer.networking.networkextension</key>\n\t<array>\n\t\t<string>packet-tunnel-provider</string>\n\t\t<string>app-proxy-provider</string>\n\t\t<string>content-filter-provider</string>\n\t\t<string>dns-proxy</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Network Extension/main.swift",
    "content": "//\n//  main.swift\n//  NetworkExtension\n//\n//  Created by Vlad Gorlov on 18.06.21.\n//\n\nimport Foundation\nimport NetworkExtension\n\nautoreleasepool {\n    NEProvider.startSystemExtensionMode()\n}\n\ndispatchMain()\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 77;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\tBF3693DCA6182D7AEC410AFC /* SuperTarget */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 7CBF487CACC0BBFB530D7963 /* Build configuration list for PBXAggregateTarget \"SuperTarget\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tCF3AABFD4A48983B322677DA /* MyScript */,\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD19F2660FAD44CCC4390265C /* PBXTargetDependency */,\n\t\t\t\t106CDB4BCFD183241A565E6C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SuperTarget;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = SuperTarget;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t01BFA2C4D9C5BBC72C015AA8 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t02F9D686CBA6068A8EE58026 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };\n\t\t03D1147528CED90EC1D844CE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7F9636B706AC92629D0B48 /* XCTest.framework */; };\n\t\t03FFCE664129864A8F167C2F /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4CCE342955E0E934BE533 /* FrameworkFile.swift */; };\n\t\t052D6B4572FBF002286865D7 /* CrossOverlayFramework.swiftcrossimport in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8DD7A61B07AD2F91BDECC255 /* CrossOverlayFramework.swiftcrossimport */; };\n\t\t06F1750F0E45E4822F806523 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 576675973B56A96047CB4944 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0786F9C725AD215C4F915BB5 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t079B6E02AF21664AB08E621C /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587B9E9A3533E965CA602B76 /* TestProjectUITests.swift */; };\n\t\t0927149520F12314CE8B4079 /* TestFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t0932FB6FB887D7D6F7727CB7 /* Driver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 432E2C071A4B6B3757BEA13E /* Driver.cpp */; };\n\t\t09617AB755651FFEB2564CBC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = \"-Werror\"; }; };\n\t\t0AB541AE3163B063E7012877 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };\n\t\t0BDA156BEBFCB9E65910F838 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0D0E2466833FC2636B92C43D /* Swinject in Frameworks */ = {isa = PBXBuildFile; platformFilter = ios; productRef = D7917D10F77DA9D69937D493 /* Swinject */; };\n\t\t0F99AECCB4691803C791CDCE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2FC2A8A829CE71B1CF415FF7 /* Main.storyboard */; };\n\t\t15129B8D9ED000BDA1FEEC27 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23A2F16890ECF2EE3FED72AE /* AppDelegate.swift */; };\n\t\t1B485D6584C3B47AC58831C6 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18722C61B05FFF4CC63D5755 /* ContentView.swift */; platformFilters = (tvos, ); };\n\t\t1BC891D89980D82738D963F3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 74FBDFA5CB063F6001AD8ACD /* Main.storyboard */; };\n\t\t1E03FC7312293997599C6435 /* Empty.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 068EDF47F0B087F6A4052AC0 /* Empty.h */; };\n\t\t1E2A4D61E96521FF7123D7B0 /* XPC Service.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t1EFFFE113C5E54A91148D3EB /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4CCE342955E0E934BE533 /* FrameworkFile.swift */; };\n\t\t1F9168A43FD8E2FCC2699E14 /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = B5C943D39DD7812CAB94B614 /* Documentation.docc */; settings = {COMPILER_FLAGS = \"-Werror\"; }; };\n\t\t204958B9AD868004CCE6B779 /* App_watchOS Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t210B49C23B9717C668B40C8C /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t2116F89CF5A04EA0EFA30A89 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D88C6BF7355702B74396791 /* TestProjectUITests.swift */; };\n\t\t212BCB51DAF3212993DDD49E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D51CC8BCCBD68A90E90A3207 /* Assets.xcassets */; };\n\t\t21425F6DE3D493B6F1E33D21 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; };\n\t\t216B220EC7961DF7CA9188B7 /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };\n\t\t262891CCD5F74316610437FA /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */; platformFilter = ios; settings = {ATTRIBUTES = (Weak, ); }; };\n\t\t265B6A05C0198FD2EB485173 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93C033648A37D95027845BD3 /* main.swift */; };\n\t\t2698ED273D0A5820B28CAD20 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D52EC9AA9FFD3B690C355068 /* LaunchScreen.storyboard */; platformFilters = (ios, ); };\n\t\t2730C6D0A35AED4ADD6EDF17 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0704B6CAFBB53E0EBB08F6B3 /* ViewController.swift */; settings = {COMPILER_FLAGS = \"-Werror\"; }; };\n\t\t28A96EBC76D53817AABDA91C /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8AF20308873AEEEC4D8C45D1 /* Settings.bundle */; };\n\t\t2A5356FCC03EE312F1738C61 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B82F603D981398F38D762E /* AppDelegate.swift */; };\n\t\t2A7EB1A9A365A7EC5D49AFCF /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0C6BA0D12467A13EC012C728 /* LocalizedStoryboard.storyboard */; };\n\t\t2B940E57041A72E6A39B6BF0 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C872631362DDBAFCE71E5C66 /* Interface.storyboard */; };\n\t\t2C7C03B45571A13D472D6B23 /* iMessageApp.app in Resources */ = {isa = PBXBuildFile; fileRef = 9A87A926D563773658FB87FE /* iMessageApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t2FAE950E8FF2E7C0F7FF1FE9 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */; };\n\t\t3133B36F3898A27A2B1C56FC /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t3318F40C855184C18197ED30 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };\n\t\t339578307B9266AB3D7722D9 /* File2.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC56891DA7446EAC8C2F27EB /* File2.swift */; };\n\t\t3535891EC86283BB5064E7E1 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t3788E1382B38DF4ACE3D2BB1 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t3A3BA9F91994D8B472C71F04 /* Swinject in Frameworks */ = {isa = PBXBuildFile; platformFilters = (tvos, ); productRef = C7F9B7EDE85527EFEA85D46D /* Swinject */; };\n\t\t3BBCA6F76E5F212E9C55FB78 /* BundleX.bundle in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = 45C12576F5AA694DD0CE2132 /* BundleX.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t3C5134EE524310ACF7B7CD6E /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CAF6C55B555E3E1352645B6 /* ExtensionDelegate.swift */; };\n\t\t3DF22C477446669094AC7C8C /* ExternalTarget.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t447D59BE2E0993D7245EA247 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3797E591F302ECC0AA2FC607 /* Assets.xcassets */; };\n\t\t45E6702CD9C088FF1FC25F34 /* App_watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = A680BE9F68A255B0FB291AE6 /* App_watchOS.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t470D3493CDBFE56E2083A5FD /* BundleY.bundle in Copy Bundle Resources */ = {isa = PBXBuildFile; fileRef = E3958AB20082EA12D4D5E60C /* BundleY.bundle */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t47D1F439B8E6D287B3F3E8D1 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t47FC57B04A3AD83359F433EA /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };\n\t\t49A4B8937BB5520B36EA33F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 814D72C2B921F60B759C2D4B /* Main.storyboard */; };\n\t\t4B862F11762F6BB54E97E401 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 576675973B56A96047CB4944 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t4C1504A05321046B3ED7A839 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB055761199DF36DB0C629A6 /* Framework2.framework */; };\n\t\t4CB673A7C0C11E04F8544BDB /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB2B6A77D39CD5602F2125F /* Contacts.framework */; };\n\t\t4DA7140FF84DBF39961F3409 /* NetworkSystemExtension.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t4F6481557E2BEF8D749C37E3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 187E665975BB5611AF0F27E1 /* main.m */; };\n\t\t5126CD91C2CB41C9B14B6232 /* DriverKitDriver.dext in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t52AD3276E068EB3396A292BB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D8A016580A3B8F72B820BFBF /* Assets.xcassets */; };\n\t\t535A98A3E3B74E09891D977F /* TestFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t5447AD526B2A1FD4262E2B61 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t5748F702ADFB9D85D0F97862 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t57DC116CE5C9F93FBA529C2F /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 576675973B56A96047CB4944 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t58C18019E71E372F635A3FB4 /* MoreUnder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8718C7CD3BE86D9B1F5120 /* MoreUnder.swift */; };\n\t\t5D10822B0E7C33DD6979F656 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BD97AF0F94A15A5B7DDB7 /* Standalone.swift */; };\n\t\t5E0369B907E239D1E6884ECF /* TestFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; };\n\t\t61401517ECCEB2362582B5DA /* libEndpointSecurity.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */; };\n\t\t61516CAC12B2843FBC4572E6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 59DA55A04FA2366B5D0BEEFF /* Assets.xcassets */; };\n\t\t61601545B6BE00CA74A4E38F /* SceneKitCatalog.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = C9E358FBE2B54D2B5C7FD609 /* SceneKitCatalog.scnassets */; };\n\t\t6241507B4947B0B65429587C /* ExternalTarget.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t632774E7F21CCB386A76B2A8 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B198242976C3395E31FE000A /* MessagesViewController.swift */; };\n\t\t63D8E7F00276736EDA62D227 /* Framework2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */; platformFilter = ios; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t65B3BAC02D5FAE632719C984 /* Model.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */; };\n\t\t666AA5F3F63C8FD7C68A6CC5 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t666DEC173BC78C7641AB22EC /* File1.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1343F2238429D4DA9D830B /* File1.swift */; };\n\t\t66C3C5E3C13325F351A3008F /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };\n\t\t6B0BCD3573931F7BE133B301 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D132EA69984F32DA9DC727B6 /* TestProjectTests.swift */; };\n\t\t6C02002A4EE169CEBEC7BA7F /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4CCE342955E0E934BE533 /* FrameworkFile.swift */; };\n\t\t6E8F8303759824631C8D9DA3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9E17D598D98065767A04740F /* Localizable.strings */; };\n\t\t6F3848C1EF3E43A5AC2A4D40 /* TestIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = FD5AEA58D3C0A1C8EEDF00F7 /* TestIcon.icon */; };\n\t\t713F57A10C62F70058D7FB0A /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E4CCE342955E0E934BE533 /* FrameworkFile.swift */; };\n\t\t7148A4172BFA1CC22E6ED5DB /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 753001CDCEAA4C4E1AFF8E87 /* MainInterface.storyboard */; };\n\t\t71A2AAC5934BDC9EDB6F0D9E /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */; };\n\t\t747CAE14D196F5652E93353C /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t75F2774F183838AF34CA9B8A /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };\n\t\t76156B580B30704346296641 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7F9636B706AC92629D0B48 /* XCTest.framework */; };\n\t\t768648ED7E93B6D888574144 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };\n\t\t76DC6A4B18F434BAC239CC4A /* DriverKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0A428E67153BB40184F37BE /* DriverKit.framework */; };\n\t\t76F3F9A5E2A4623430374F31 /* LocalizableStrings.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = E66ABD3EB14C9D63DEF5C532 /* LocalizableStrings.xcstrings */; };\n\t\t77C3CB285572EA4BB7E201A7 /* App_Clip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 38DB679FF1CF4E379D1AB103 /* App_Clip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t7A0DABBEA55B06E148C665A8 /* StaticLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC91042453E18DF74BA1C0F /* StaticLibrary.swift */; };\n\t\t7A8C78212CEAC6452DFAB00E /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t7F658343A505B824321E086B /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t803B7CE086CFBA409F9D1ED7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 108BB29172D27BE3BD1E7F35 /* Assets.xcassets */; };\n\t\t818D448D4DDD6649B5B26098 /* example.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 28360ECA4D727FAA58557A81 /* example.mp4 */; settings = {ASSET_TAGS = (tag1, tag2, ); }; };\n\t\t81DFAB3A7633CE97929B9B2A /* Framework.framework in Embed Dependencies */ = {isa = PBXBuildFile; fileRef = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t8267B75289E9D6C7B38FC426 /* DriverKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0A428E67153BB40184F37BE /* DriverKit.framework */; };\n\t\t87927928A8A3460166ACB819 /* SwiftFileInDotPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */; settings = {COMPILER_FLAGS = \"-Werror\"; }; };\n\t\t900CFAD929CAEE3861127627 /* MyBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7B5068D64404C61A67A18458 /* MyBundle.bundle */; };\n\t\t94FD20C3EA5EBCEC8783740C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */; };\n\t\t95DD9941E1529FD2AE1A191D /* StaticLibrary_ObjC.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */; };\n\t\t96B55C0F660235FE6BDD8869 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t998CCB995347CBB8EDC95FB5 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t9AB50B81C29243936BB419E4 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\t9C92B7C89E5F0A10A34F5AA4 /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9D80BD5FAE6BE61CFD74CF1B /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\tA1588BF3BFFE1DF7409CBA10 /* Framework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */; };\n\t\tA496E1DB82E16DA4099D1411 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7F9636B706AC92629D0B48 /* XCTest.framework */; };\n\t\tA59B3F08914812573AFF6C2D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FD4A16C7B8FEB7F97F3CBE3F /* libz.dylib */; };\n\t\tA7438C77A05D83E7016CF044 /* Framework2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0DC40025AB59B688E758829 /* Framework2.framework */; };\n\t\tA90C4C147AD175DB9F7B5114 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03CD22B8CD2E91BB97CC534E /* main.swift */; };\n\t\tA949422315536EACDF8DD78A /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */; };\n\t\tA9548E5DCFE92236494164DF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */; };\n\t\tAFF19412E9B35635D3AF48CB /* XPC_Service.m in Sources */ = {isa = PBXBuildFile; fileRef = 148B7C933698BCC4F1DBA979 /* XPC_Service.m */; };\n\t\tB18C121B0A4D43ED8149D8E2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79325B44B19B83EC6CEDBCC5 /* LaunchScreen.storyboard */; };\n\t\tB20617116B230DED1F7AF5E5 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */; };\n\t\tB2D43A31C184E34EF9CB743C /* Framework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tB358AB913543E62237FCC4E3 /* MyAppApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A4363D659A58DA835DE8BA /* MyAppApp.swift */; };\n\t\tB47F2629BFE5853767C8BB5E /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB2B6A77D39CD5602F2125F /* Contacts.framework */; };\n\t\tB49D3A51787E362DE4D0E78A /* SomeXPCService.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70A8E15C81E454DC950C59F0 /* SomeXPCService.xpc */; };\n\t\tB502EF8F7605CBD038298F23 /* CrossOverlayFramework.swiftcrossimport in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8DD7A61B07AD2F91BDECC255 /* CrossOverlayFramework.swiftcrossimport */; };\n\t\tB9F3C9E77019EC3423A7F5D8 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */; };\n\t\tBAA1C1E3828F5D43546AF997 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB1B49A91B892152D68ED76 /* libc++.tbd */; };\n\t\tBFCCC56337A5D9D513C1C791 /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };\n\t\tC093BF20B99FE892D0F06B2D /* libEndpointSecurity.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */; };\n\t\tC3672B561F456794151C047C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C3FE6B986506724DAB5D0F /* ViewController.swift */; };\n\t\tC400EBD25886ACB5CD9035EB /* module.modulemap in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2950763C4C568CC85021D18 /* module.modulemap */; };\n\t\tC4378E3DAF5E0B2F7AB60E03 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE6A6FAAFF701FE729293DE /* ViewController.swift */; };\n\t\tC836F09B677937EFF69B1FCE /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C934C1F7A68CCD0AB6B38478 /* NotificationController.swift */; };\n\t\tC88598A49087A212990F4E8B /* ResourceFolder in Resources */ = {isa = PBXBuildFile; fileRef = 6B1603BA83AA0C7B94E45168 /* ResourceFolder */; };\n\t\tCAE18A2194B57C830A297F83 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6680EFE4E908CDBDCE405C8 /* main.swift */; };\n\t\tCAF8470C7F1BF207DBE6AEE3 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEEFDE76B5FEC833403C0869 /* ContentView.swift */; platformFilters = (ios, ); };\n\t\tCCA17097382757012B58C17C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1BC32A813B80A53962A1F365 /* Assets.xcassets */; };\n\t\tD058D241BDF5FB0C919BBECA /* CrossOverlayFramework.swiftcrossimport in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8DD7A61B07AD2F91BDECC255 /* CrossOverlayFramework.swiftcrossimport */; };\n\t\tD5458D67C3596943114C3205 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BD97AF0F94A15A5B7DDB7 /* Standalone.swift */; };\n\t\tD5D493E4A7AD63860E1399DD /* ExternalTarget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */; };\n\t\tD61BEABD5B26B2DE67D0C2EC /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F527F2590C14956518174 /* FrameworkFile.swift */; };\n\t\tD62AB3A85B32F353ABBD57BC /* iMessageExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D629E142AB87C681D4EC90F7 /* iMessageExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tD8ED40ED61AD912385CFF5F0 /* StaticLibrary_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */; };\n\t\tDBCA8149E5C4183AB52B8D99 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 576675973B56A96047CB4944 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDD5FBFC3C1B2DB3D0D1CF210 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */; };\n\t\tE0B27599D701E6BB0223D0A8 /* FilterDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AA52945B70B1BF9E246350 /* FilterDataProvider.swift */; };\n\t\tE1836941C13CC7F13650C317 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3ED831531AA349CCC19B258B /* Assets.xcassets */; };\n\t\tE34351AC0049221C167A60AC /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE4B41CB5C796DD2C3C2E564C /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A58A16491CDDF968B0D56DE /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE4D0F435405DABCB51C5B684 /* TestFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */; };\n\t\tE5DD0AD6F7AE1DD4AF98B83E /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 65C8D6D1DDC1512D396C07B7 /* Localizable.stringsdict */; };\n\t\tE7B40B34D8807F43A3805381 /* ExternalTarget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */; };\n\t\tE8A135F768448632F8D77C8F /* StandaloneAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */; };\n\t\tEDB55692D392FD09C3FCFBF6 /* libStaticLibrary_ObjC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */; };\n\t\tF4D77E81B0539EA5F4F141A6 /* EndpointSecuritySystemExtension.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = E5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tF5D71267BB5A326BDD69D532 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E55F45EACB0F382722D61C8D /* Assets.xcassets */; };\n\t\tF6537CE373C94809E6653758 /* Headers in Headers */ = {isa = PBXBuildFile; fileRef = 2E1E747C7BC434ADB80CC269 /* Headers */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tF6734680031310575CDE9F23 /* CrossOverlayFramework.swiftcrossimport in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8DD7A61B07AD2F91BDECC255 /* CrossOverlayFramework.swiftcrossimport */; };\n\t\tF7423E8738EECF04795C7601 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3F6BCB5FEFB16F1BA368059 /* InterfaceController.swift */; };\n\t\tF788A3FA1CE6489BC257C1C3 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 306796628DD52FA55E833B65 /* Model.xcdatamodeld */; settings = {COMPILER_FLAGS = \"-Werror\"; }; };\n\t\tFB6DA0DB62C425066D51767E /* Driver.iig in Sources */ = {isa = PBXBuildFile; fileRef = 5A3A73F307648F58213E4EA1 /* Driver.iig */; };\n\t\tFF030751A47C85F082C7EDB9 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D132EA69984F32DA9DC727B6 /* TestProjectTests.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t01630C98B755921A79418B08 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13E8C5AB873CEE21E18E552F;\n\t\t\tremoteInfo = StaticLibrary_ObjC_iOS;\n\t\t};\n\t\t02FC8A8CFD5676EA402CCCBC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13E8C5AB873CEE21E18E552F;\n\t\t\tremoteInfo = StaticLibrary_ObjC_iOS;\n\t\t};\n\t\t0B37F7A37D610FCFE187A6B7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D137C04B64B7052419A2DF4E;\n\t\t\tremoteInfo = App_Clip;\n\t\t};\n\t\t25714659454527D9511C6093 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D137C04B64B7052419A2DF4E;\n\t\t\tremoteInfo = App_Clip;\n\t\t};\n\t\t2CA19347816754250A29DA32 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 578C80E461E675508CED5DC3;\n\t\t\tremoteInfo = StaticLibrary_ObjC_macOS;\n\t\t};\n\t\t2FA0A954833DB0981CDE58E1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = AE3F93DB94E7208F2F1D9A78;\n\t\t\tremoteInfo = Framework_iOS;\n\t\t};\n\t\t3A81C6D6875469889D53A2C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0867B0DACEF28C11442DE8F7;\n\t\t\tremoteInfo = App_iOS;\n\t\t};\n\t\t45907115465077029040BF29 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8B9A14DC280CCE013CC86440;\n\t\t\tremoteInfo = Framework2_tvOS;\n\t\t};\n\t\t469D922BE967C6D52ED84552 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0867B0DACEF28C11442DE8F7;\n\t\t\tremoteInfo = App_iOS;\n\t\t};\n\t\t57F1BE74D4C4252529F97984 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 834F55973F05AC8A18144DB0;\n\t\t\tremoteInfo = iMessageApp;\n\t\t};\n\t\t57FA84916D499216199F8C95 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13E8C5AB873CEE21E18E552F;\n\t\t\tremoteInfo = StaticLibrary_ObjC_iOS;\n\t\t};\n\t\t59BFAC272F73B46E97B74426 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6ED01BC471A8C3642258E178;\n\t\t\tremoteInfo = Framework2_watchOS;\n\t\t};\n\t\t610412261F48A0A36C32FC5C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 020A320BB3736FCDE6CC4E70;\n\t\t\tremoteInfo = App_macOS;\n\t\t};\n\t\t69E205A3F578A8FFE3ECF3F9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0636AAF06498C336E1CEEDE4;\n\t\t\tremoteInfo = TestFramework;\n\t\t};\n\t\t6ED42BD51E8832232E58D9C1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 428715FBC1D86458DA70CBDE;\n\t\t\tremoteInfo = DriverKitDriver;\n\t\t};\n\t\t747773057270E6F58470B5FA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D137C04B64B7052419A2DF4E;\n\t\t\tremoteInfo = App_Clip;\n\t\t};\n\t\t7E37A3C0A67C3B6363029A18 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = AE3F93DB94E7208F2F1D9A78;\n\t\t\tremoteInfo = Framework_iOS;\n\t\t};\n\t\t7F4EAACE4AD6CF285B7D3308 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 53A3B531E3947D8A8722745E;\n\t\t\tremoteInfo = Framework_macOS;\n\t\t};\n\t\t8BAA7F3717FCBE0B8D6669B3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7815F2F0D9CDECF9185AAF3;\n\t\t\tremoteInfo = \"XPC Service\";\n\t\t};\n\t\t9636E133F9CACD17C56B7915 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 208179651927D1138D19B5AD;\n\t\t\tremoteInfo = App_watchOS;\n\t\t};\n\t\tA7E63E75AAC31076E5090CAA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7D3D92034F4F203C140574F0;\n\t\t\tremoteInfo = StaticLibrary_ObjC_watchOS;\n\t\t};\n\t\tAC20E10997F6C1DBBA16C7A0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 307AE3FA155FFD09B74AE351;\n\t\t\tremoteInfo = \"App_watchOS Extension\";\n\t\t};\n\t\tC42BA4EA0239AF536F0F0993 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0636AAF06498C336E1CEEDE4;\n\t\t\tremoteInfo = TestFramework;\n\t\t};\n\t\tC8FD369800D87311EC532712 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1C26A6A0BC446191F311D470;\n\t\t\tremoteInfo = iMessageExtension;\n\t\t};\n\t\tC9947CF0A436FC6113FC0837 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0867B0DACEF28C11442DE8F7;\n\t\t\tremoteInfo = App_iOS;\n\t\t};\n\t\tCA16090DFCA7842CB4E20265 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F192E783CCA898FBAA5C34EA /* AnotherProject */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E76A5F5E363E470416D3B487;\n\t\t\tremoteInfo = ExternalTarget;\n\t\t};\n\t\tCB8F4B3FDD84A2A6F3CA7F4C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 93542A75A613F00FDB5C9C63;\n\t\t\tremoteInfo = StaticLibrary_ObjC_tvOS;\n\t\t};\n\t\tD3E1EE9F1E22A388123A116D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = CE7D183D3752B5B35D2D8E6D;\n\t\t\tremoteInfo = Framework2_iOS;\n\t\t};\n\t\tD4A7C57F6272F44F2E69A5DB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = AD28397BCC984F769EE8A937;\n\t\t\tremoteInfo = NetworkSystemExtension;\n\t\t};\n\t\tDD32A97CFD2016BF1477CF6C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F551F66949B55E8328EB995;\n\t\t\tremoteInfo = EndpointSecuritySystemExtension;\n\t\t};\n\t\tDECF0B88B325A158E4E1D9AE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 578C80E461E675508CED5DC3;\n\t\t\tremoteInfo = StaticLibrary_ObjC_macOS;\n\t\t};\n\t\tE231CFA00B56E5D8C57331C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F192E783CCA898FBAA5C34EA /* AnotherProject */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D6340FC7DEBC81E0127BAFD6;\n\t\t\tremoteInfo = ExternalTarget;\n\t\t};\n\t\tFAFAEB2DDD9CCD218336D267 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = AE3F93DB94E7208F2F1D9A78;\n\t\t\tremoteInfo = Framework_iOS;\n\t\t};\n\t\tFF75DC967D1097BC31DCF5E6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F192E783CCA898FBAA5C34EA /* AnotherProject */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E76A5F5E363E470416D3B487;\n\t\t\tremoteInfo = ExternalTarget;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t04D94C495E299B50EB0DC7C4 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(PRODUCT_NAME).framework/Modules\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tB502EF8F7605CBD038298F23 /* CrossOverlayFramework.swiftcrossimport in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t06FAE8D6834F982AA934B3E8 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/$(PRODUCT_NAME)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t216B220EC7961DF7CA9188B7 /* StaticLibrary_ObjC.h in CopyFiles */,\n\t\t\t\tBFCCC56337A5D9D513C1C791 /* module.modulemap in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t096753D5DAA26D110F699A7F /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(PRODUCT_NAME).framework/Modules\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tF6734680031310575CDE9F23 /* CrossOverlayFramework.swiftcrossimport in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t30A8F3568B05F3DB13D8B466 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t0927149520F12314CE8B4079 /* TestFramework.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3217EBDE07BBCBDE3C16CEDC /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/$(PRODUCT_NAME)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t95DD9941E1529FD2AE1A191D /* StaticLibrary_ObjC.h in CopyFiles */,\n\t\t\t\t768648ED7E93B6D888574144 /* module.modulemap in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t661E0CEEEC2395C39375961F /* Embed Foundation Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t204958B9AD868004CCE6B779 /* App_watchOS Extension.appex in Embed Foundation Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed Foundation Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FAF0BBB3DE701EBE5DBE810 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/$(PRODUCT_NAME)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t47FC57B04A3AD83359F433EA /* StaticLibrary_ObjC.h in CopyFiles */,\n\t\t\t\t66C3C5E3C13325F351A3008F /* module.modulemap in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t807155B9081529D99AAB4743 /* Embed Watch Content */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(CONTENTS_FOLDER_PATH)/Watch\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t45E6702CD9C088FF1FC25F34 /* App_watchOS.app in Embed Watch Content */,\n\t\t\t);\n\t\t\tname = \"Embed Watch Content\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t848740AD60C4329197FF876B /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t3DF22C477446669094AC7C8C /* ExternalTarget.framework in Embed Frameworks */,\n\t\t\t\t9C92B7C89E5F0A10A34F5AA4 /* Framework.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t865AAD9909027AC34D1374EA /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/$(PRODUCT_NAME)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t1E03FC7312293997599C6435 /* Empty.h in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t924D7F0A22013EE6F06E7400 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/$(PRODUCT_NAME)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t0AB541AE3163B063E7012877 /* StaticLibrary_ObjC.h in CopyFiles */,\n\t\t\t\tC400EBD25886ACB5CD9035EB /* module.modulemap in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t94FF9CA021C43301BA069930 /* Embed App Clips */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(CONTENTS_FOLDER_PATH)/AppClips\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t77C3CB285572EA4BB7E201A7 /* App_Clip.app in Embed App Clips */,\n\t\t\t);\n\t\t\tname = \"Embed App Clips\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA8688B5E0D1C2F35AD20BB85 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t535A98A3E3B74E09891D977F /* TestFramework.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tADD98000970B8907F73BFD92 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(PRODUCT_NAME).framework/Modules\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t052D6B4572FBF002286865D7 /* CrossOverlayFramework.swiftcrossimport in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tCF6B94E7B2D2312582A526F5 /* Embed Dependencies */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = test;\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t81DFAB3A7633CE97929B9B2A /* Framework.framework in Embed Dependencies */,\n\t\t\t);\n\t\t\tname = \"Embed Dependencies\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDE875E9A37F7CB9C347AEFA0 /* Embed System Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(SYSTEM_EXTENSIONS_FOLDER_PATH)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t5126CD91C2CB41C9B14B6232 /* DriverKitDriver.dext in Embed System Extensions */,\n\t\t\t\tF4D77E81B0539EA5F4F141A6 /* EndpointSecuritySystemExtension.systemextension in Embed System Extensions */,\n\t\t\t\t4DA7140FF84DBF39961F3409 /* NetworkSystemExtension.systemextension in Embed System Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed System Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE1C04BDC65F3DC88D6D0473F /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(PRODUCT_NAME).framework/Modules\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tD058D241BDF5FB0C919BBECA /* CrossOverlayFramework.swiftcrossimport in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8BC0F358D693454E5027ECC /* Copy Bundle Resources */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstSubfolderSpec = 7;\n\t\t\tfiles = (\n\t\t\t\t3BBCA6F76E5F212E9C55FB78 /* BundleX.bundle in Copy Bundle Resources */,\n\t\t\t\t470D3493CDBFE56E2083A5FD /* BundleY.bundle in Copy Bundle Resources */,\n\t\t\t);\n\t\t\tname = \"Copy Bundle Resources\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEB212BCB1E2E1D2667233F98 /* Embed Foundation Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\tD62AB3A85B32F353ABBD57BC /* iMessageExtension.appex in Embed Foundation Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed Foundation Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tFB79B30FEA6073A29B4D9FCC /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(CONTENTS_FOLDER_PATH)/XPCServices\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t1E2A4D61E96521FF7123D7B0 /* XPC Service.xpc in CopyFiles */,\n\t\t\t\tB49D3A51787E362DE4D0E78A /* SomeXPCService.xpc in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tFE78CC3322C9C2DB1D64EAAA /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 8;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t6241507B4947B0B65429587C /* ExternalTarget.framework in Embed Frameworks */,\n\t\t\t\t63D8E7F00276736EDA62D227 /* Framework2.framework in Embed Frameworks */,\n\t\t\t\tB2D43A31C184E34EF9CB743C /* Framework.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t0095836FE59395511E0CB4F0 /* CrossOverlayFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CrossOverlayFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t01E6934B571B91EAAFF0EDCB /* Resource.abc */ = {isa = PBXFileReference; path = Resource.abc; sourceTree = \"<group>\"; };\n\t\t020E4DA91C9132845CAFDC5D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = \"<group>\"; };\n\t\t039F208D1138598CE060F140 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t03CD22B8CD2E91BB97CC534E /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\t03D6D1E34022DA9524E5B38D /* Mintfile */ = {isa = PBXFileReference; path = Mintfile; sourceTree = \"<group>\"; };\n\t\t0510CEA09E3BFD387E3EDE28 /* MyPlayground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = MyPlayground.playground; sourceTree = \"<group>\"; };\n\t\t068EDF47F0B087F6A4052AC0 /* Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Empty.h; sourceTree = \"<group>\"; };\n\t\t0704B6CAFBB53E0EBB08F6B3 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t09B82F603D981398F38D762E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t0B193CC6D2B3003418A550B6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = \"<group>\"; };\n\t\t0B9D98D935F2C69A1F5BA539 /* App_macOS_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = App_macOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t0BB1B49A91B892152D68ED76 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; name = \"libc++.tbd\"; path = \"usr/lib/libc++.tbd\"; sourceTree = SDKROOT; };\n\t\t0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; name = libEndpointSecurity.tbd; path = usr/lib/libEndpointSecurity.tbd; sourceTree = SDKROOT; };\n\t\t0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = \"App_watchOS Extension.appex\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t0F5BD97AF0F94A15A5B7DDB7 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = \"<group>\"; };\n\t\t102A08142A31E44F4ED52649 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = \"<group>\"; };\n\t\t108BB29172D27BE3BD1E7F35 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t13EEAB58665D79C15184D9D0 /* App_iOS_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t148B7C933698BCC4F1DBA979 /* XPC_Service.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPC_Service.m; sourceTree = \"<group>\"; };\n\t\t15A4363D659A58DA835DE8BA /* MyAppApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyAppApp.swift; sourceTree = \"<group>\"; };\n\t\t16AA52945B70B1BF9E246350 /* FilterDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterDataProvider.swift; sourceTree = \"<group>\"; };\n\t\t16D662EE577E4CD6AFF39D66 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = \"<group>\"; };\n\t\t18722C61B05FFF4CC63D5755 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = \"<group>\"; };\n\t\t187E665975BB5611AF0F27E1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t1BC32A813B80A53962A1F365 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StaticLibrary_ObjC.m; sourceTree = \"<group>\"; };\n\t\t1FA5E208EC184E3030D2A21D /* Clip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Clip.entitlements; sourceTree = \"<group>\"; };\n\t\t2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */ = {isa = PBXFileReference; explicitFileType = \"wrapper.system-extension\"; includeInIndex = 0; path = NetworkSystemExtension.systemextension; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */ = {isa = PBXFileReference; explicitFileType = \"wrapper.xpc-service\"; includeInIndex = 0; path = \"XPC Service.xpc\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2233774B86539B1574D206B0 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t23A2F16890ECF2EE3FED72AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t28360ECA4D727FAA58557A81 /* example.mp4 */ = {isa = PBXFileReference; path = example.mp4; sourceTree = \"<group>\"; };\n\t\t2A5F527F2590C14956518174 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = \"<group>\"; };\n\t\t2E1E747C7BC434ADB80CC269 /* Headers */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Headers; sourceTree = SOURCE_ROOT; };\n\t\t2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftFileInDotPath.swift; sourceTree = \"<group>\"; };\n\t\t3096A0760969873D46F80A92 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t325F18855099386B08DD309B /* Resource.abcd */ = {isa = PBXFileReference; path = Resource.abcd; sourceTree = \"<group>\"; };\n\t\t33F6DCDC37D2E66543D4965D /* App_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t34F13B632328979093CE6056 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = StandaloneAssets.xcassets; sourceTree = \"<group>\"; };\n\t\t3797E591F302ECC0AA2FC607 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t382E11E88B12BCB30F575686 /* Driver.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Driver.entitlements; sourceTree = \"<group>\"; };\n\t\t38DB679FF1CF4E379D1AB103 /* App_Clip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_Clip.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3A7BEFAB4710735CF169B1E8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3D8A2D4363866877B9140156 /* XPC_ServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_ServiceProtocol.h; sourceTree = \"<group>\"; };\n\t\t3ED831531AA349CCC19B258B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t3EF21DF245F66BEF5446AAEF /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3FC04772130400920D68A167 /* App_Clip_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t407C3F0009FDCE5B1B7DC2A8 /* App_supportedDestinations.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_supportedDestinations.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t40863AE6202CFCD0529D8438 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t432E2C071A4B6B3757BEA13E /* Driver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Driver.cpp; sourceTree = \"<group>\"; };\n\t\t45BBB9A7599490883491C808 /* NetworkExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetworkExtension.entitlements; sourceTree = \"<group>\"; };\n\t\t45C12576F5AA694DD0CE2132 /* BundleX.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t46DD8F9AAC104BDB63793625 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4BF4D16042A80576D259160C /* Model 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = \"Model 3.xcdatamodel\"; sourceTree = \"<group>\"; };\n\t\t4C7F9636B706AC92629D0B48 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\t5116B3B58070BCD09F1487BA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t553D289724905857912C7A1D /* outputList.xcfilelist */ = {isa = PBXFileReference; lastKnownFileType = text.xcfilelist; path = outputList.xcfilelist; sourceTree = \"<group>\"; };\n\t\t576675973B56A96047CB4944 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = \"<group>\"; };\n\t\t57FF8864B8EBAB5777DC12E6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t587B9E9A3533E965CA602B76 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = \"<group>\"; };\n\t\t59DA55A04FA2366B5D0BEEFF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StaticLibrary_ObjC.h; sourceTree = \"<group>\"; };\n\t\t5A3A73F307648F58213E4EA1 /* Driver.iig */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.iig; path = Driver.iig; sourceTree = \"<group>\"; };\n\t\t5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };\n\t\t5D13DDAB46F80D94D7345063 /* EndpointSecurity.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = EndpointSecurity.entitlements; sourceTree = \"<group>\"; };\n\t\t6177CC6263783487E93F7F4D /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6A58A16491CDDF968B0D56DE /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = \"<group>\"; };\n\t\t6AC91042453E18DF74BA1C0F /* StaticLibrary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticLibrary.swift; sourceTree = \"<group>\"; };\n\t\t6B1603BA83AA0C7B94E45168 /* ResourceFolder */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ResourceFolder; path = Resources/ResourceFolder; sourceTree = SOURCE_ROOT; };\n\t\t6BBE762F36D94AB6FFBFE834 /* SomeFile */ = {isa = PBXFileReference; path = SomeFile; sourceTree = \"<group>\"; };\n\t\t6F165CDD5BCC13AFF50B65E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t70A8E15C81E454DC950C59F0 /* SomeXPCService.xpc */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.xpc-service\"; path = SomeXPCService.xpc; sourceTree = \"<group>\"; };\n\t\t72A14C887EF7E9C8CBE914AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t77C0C341F1865224E0596086 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t7B5068D64404C61A67A18458 /* MyBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = MyBundle.bundle; sourceTree = \"<group>\"; };\n\t\t7C176A8297AC2F5207352BA8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\t7C7EC00B53FF878007F6ECAB /* App_Clip_UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_Clip_UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7D67F1C1BFBACE101DE7DB51 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7D700FA699849D2F95216883 /* EntitledApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = EntitledApp.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7DE38C10AB71A47B786D5BF2 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = \"<group>\"; };\n\t\t7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7FDC16E1938AA114B67D87A9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = \"<group>\"; };\n\t\t814822136AF3C64428D69DD6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t81E4CCE342955E0E934BE533 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = \"<group>\"; };\n\t\t83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */ = {isa = PBXFileReference; explicitFileType = \"wrapper.driver-extension\"; includeInIndex = 0; path = DriverKitDriver.dext; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t84317819C92F78425870E483 /* BundleX.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleX.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = \"<group>\"; };\n\t\t89EB41A001D8BF26431C5798 /* CrossOverlayFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CrossOverlayFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8A9274BE42A03DC5DA1FAD04 /* Framework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8AF20308873AEEEC4D8C45D1 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = Settings.bundle; sourceTree = \"<group>\"; };\n\t\t8C62E8644AC5070AFC737BCC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t8CAF6C55B555E3E1352645B6 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = \"<group>\"; };\n\t\t8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_Swift.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8D88C6BF7355702B74396791 /* TestProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectUITests.swift; sourceTree = \"<group>\"; };\n\t\t8DD7A61B07AD2F91BDECC255 /* CrossOverlayFramework.swiftcrossimport */ = {isa = PBXFileReference; lastKnownFileType = wrapper.swiftcrossimport; path = CrossOverlayFramework.swiftcrossimport; sourceTree = \"<group>\"; };\n\t\t8FE05BF7897ECFD58B7AC8B1 /* CrossOverlayFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CrossOverlayFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t93C033648A37D95027845BD3 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\t9528528C989D24FE3E6C533E /* App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = \"App-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t9A87A926D563773658FB87FE /* iMessageApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = iMessageApp.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9D4AB3FCF725428EFB56F542 /* Configuration.storekit */ = {isa = PBXFileReference; path = Configuration.storekit; sourceTree = \"<group>\"; };\n\t\t9F27382DD66E26C059E26EFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA0DC40025AB59B688E758829 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA220DE4EB3CB2E598D034D9D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA3F6BCB5FEFB16F1BA368059 /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = \"<group>\"; };\n\t\tA4C3FE6B986506724DAB5D0F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\tA6680EFE4E908CDBDCE405C8 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\tA680BE9F68A255B0FB291AE6 /* App_watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App_watchOS.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAAA49985DFFE797EE8416887 /* inputList.xcfilelist */ = {isa = PBXFileReference; lastKnownFileType = text.xcfilelist; path = inputList.xcfilelist; sourceTree = \"<group>\"; };\n\t\tAB055761199DF36DB0C629A6 /* Framework2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Framework2.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAEBCA8CFF769189C0D52031E /* App_iOS.xctestplan */ = {isa = PBXFileReference; path = App_iOS.xctestplan; sourceTree = \"<group>\"; };\n\t\tAEEFDE76B5FEC833403C0869 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = \"<group>\"; };\n\t\tB17B8D9C9B391332CD176A35 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\tB198242976C3395E31FE000A /* MessagesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesViewController.swift; sourceTree = \"<group>\"; };\n\t\tB1C33BB070583BE3B0EC0E68 /* App_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = archive.ar; path = libStaticLibrary_ObjC.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB5C943D39DD7812CAB94B614 /* Documentation.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Documentation.docc; sourceTree = \"<group>\"; };\n\t\tBA040F1F7D6CA08878323A55 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tBB677D970923F663D846D7E0 /* BundleY.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = BundleY.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tBC56891DA7446EAC8C2F27EB /* File2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File2.swift; path = Group2/File2.swift; sourceTree = \"<group>\"; };\n\t\tBDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = \"GoogleService-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tBECEA4A483ADEB8158F640B3 /* Tool */ = {isa = PBXFileReference; includeInIndex = 0; path = Tool; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tBF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Model.xcmappingmodel; sourceTree = \"<group>\"; };\n\t\tC0A428E67153BB40184F37BE /* DriverKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DriverKit.framework; path = System/Library/Frameworks/DriverKit.framework; sourceTree = SDKROOT; };\n\t\tC53ACB2962FED621389C36A2 /* iMessageStickersExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = \"wrapper.app-extension\"; path = iMessageStickersExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC7809CE9FE9852C2AA87ACE5 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.module-map\"; path = module.modulemap; sourceTree = \"<group>\"; };\n\t\tC934C1F7A68CCD0AB6B38478 /* NotificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationController.swift; sourceTree = \"<group>\"; };\n\t\tC9DDE1B06BCC1CDE0ECF1589 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC9E358FBE2B54D2B5C7FD609 /* SceneKitCatalog.scnassets */ = {isa = PBXFileReference; lastKnownFileType = wrapper.scnassets; path = SceneKitCatalog.scnassets; sourceTree = \"<group>\"; };\n\t\tCA8718C7CD3BE86D9B1F5120 /* MoreUnder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreUnder.swift; sourceTree = \"<group>\"; };\n\t\tCB77A637470A3CDA2BDDBE99 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD132EA69984F32DA9DC727B6 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = \"<group>\"; };\n\t\tD21BB1B6FA5A025305B223BA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD51CC8BCCBD68A90E90A3207 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tD52EC9AA9FFD3B690C355068 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tD629E142AB87C681D4EC90F7 /* iMessageExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = \"wrapper.app-extension\"; path = iMessageExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD6C89D80B5458D8929F5C127 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\tD70BE0C05E5779A077793BE6 /* Model 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = \"Model 2.xcdatamodel\"; sourceTree = \"<group>\"; };\n\t\tD7E73F4E11A4B74449E7FDFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD8A016580A3B8F72B820BFBF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tDAA7880242A9DE61E68026CC /* Folder */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Folder; sourceTree = SOURCE_ROOT; };\n\t\tDFE6A6FAAFF701FE729293DE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\tE0F31A9DE15B210D101AFC81 /* CrossOverlayFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CrossOverlayFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE3958AB20082EA12D4D5E60C /* BundleY.bundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper.cfbundle; path = BundleY.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE42335D1200CB7B8B91E962F /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = \"<group>\"; };\n\t\tE43116070AFEF5D8C3A5A957 /* TestFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TestFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE55F45EACB0F382722D61C8D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tE5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */ = {isa = PBXFileReference; explicitFileType = \"wrapper.system-extension\"; includeInIndex = 0; path = EndpointSecuritySystemExtension.systemextension; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE66ABD3EB14C9D63DEF5C532 /* LocalizableStrings.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = LocalizableStrings.xcstrings; sourceTree = \"<group>\"; };\n\t\tE9672EF8FE1DDC8DE0705129 /* PushNotificationPayload.apns */ = {isa = PBXFileReference; lastKnownFileType = text; path = PushNotificationPayload.apns; sourceTree = \"<group>\"; };\n\t\tEDCC70978B8AD49373DA0DE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEE1343F2238429D4DA9D830B /* File1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File1.swift; path = Group/File1.swift; sourceTree = \"<group>\"; };\n\t\tF0D48A913C087D049C8EDDD7 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = \"<group>\"; };\n\t\tF15E5C60B7E05D06B1B8E18E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tF192E783CCA898FBAA5C34EA /* AnotherProject */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = AnotherProject; path = AnotherProject/AnotherProject.xcodeproj; sourceTree = \"<group>\"; };\n\t\tF2950763C4C568CC85021D18 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.module-map\"; path = module.modulemap; sourceTree = \"<group>\"; };\n\t\tF2FA55A558627ED576A4AFD6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tFA86D418796C1A6864414460 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\tFD05F36F95D6F098A76F220B /* XPC_Service.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPC_Service.h; sourceTree = \"<group>\"; };\n\t\tFD4A16C7B8FEB7F97F3CBE3F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };\n\t\tFD5AEA58D3C0A1C8EEDF00F7 /* TestIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = wrapper.icon; path = TestIcon.icon; sourceTree = \"<group>\"; };\n\t\tFDB2B6A77D39CD5602F2125F /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; };\n\t\tFED40A89162E446494DDE7C7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */\n\t\t9A259ACEBCE19CC5F22B6DD4 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {\n\t\t\tisa = PBXFileSystemSynchronizedBuildFileExceptionSet;\n\t\t\tmembershipExceptions = (\n\t\t\t\tExcludedFile.swift,\n\t\t\t\tInfo.plist,\n\t\t\t);\n\t\t\ttarget = 0867B0DACEF28C11442DE8F7 /* App_iOS */;\n\t\t};\n/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */\n\n/* Begin PBXFileSystemSynchronizedRootGroup section */\n\t\tA2F1B5386E15A261AC8A4DEE /* SyncedChild */ = {\n\t\t\tisa = PBXFileSystemSynchronizedRootGroup;\n\t\t\texplicitFileTypes = {\n\t\t\t};\n\t\t\texplicitFolders = (\n\t\t\t);\n\t\t\tname = SyncedChild;\n\t\t\tpath = SyncedChild;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAE2AB2772F70DFFF402AA02B /* SyncedFolder */ = {\n\t\t\tisa = PBXFileSystemSynchronizedRootGroup;\n\t\t\texceptions = (\n\t\t\t\t9A259ACEBCE19CC5F22B6DD4 /* PBXFileSystemSynchronizedBuildFileExceptionSet */,\n\t\t\t);\n\t\t\texplicitFileTypes = {\n\t\t\t};\n\t\t\texplicitFolders = (\n\t\t\t\tResources,\n\t\t\t\tFeatureATests,\n\t\t\t\tFeatureBTests,\n\t\t\t);\n\t\t\tpath = SyncedFolder;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXFileSystemSynchronizedRootGroup section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t117840B4DBC04099F6779D00 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE7B40B34D8807F43A3805381 /* ExternalTarget.framework in Frameworks */,\n\t\t\t\t4CB673A7C0C11E04F8544BDB /* Contacts.framework in Frameworks */,\n\t\t\t\t262891CCD5F74316610437FA /* Framework2.framework in Frameworks */,\n\t\t\t\t2FAE950E8FF2E7C0F7FF1FE9 /* Framework.framework in Frameworks */,\n\t\t\t\tB20617116B230DED1F7AF5E5 /* libStaticLibrary_ObjC.a in Frameworks */,\n\t\t\t\t0D0E2466833FC2636B92C43D /* Swinject in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2E6FCCFC594BE9FEB74FA2F0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4C1504A05321046B3ED7A839 /* Framework2.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t36418B6CABA06BA9B206556E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3A3BA9F91994D8B472C71F04 /* Swinject in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5EFF61D0A49AA8EABD72DF44 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA7438C77A05D83E7016CF044 /* Framework2.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6D6C0891A16EFF2FDA9D25AF /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA496E1DB82E16DA4099D1411 /* XCTest.framework in Frameworks */,\n\t\t\t\t5E0369B907E239D1E6884ECF /* TestFramework.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7448069D11FB1A170F943C90 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDD5FBFC3C1B2DB3D0D1CF210 /* NetworkExtension.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8189054F985D26094EE77069 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t03D1147528CED90EC1D844CE /* XCTest.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA688549B76B3FDC56A56735D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t76156B580B30704346296641 /* XCTest.framework in Frameworks */,\n\t\t\t\tE4D0F435405DABCB51C5B684 /* TestFramework.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA6E1C88C073F8CC6B5B072B6 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB47F2629BFE5853767C8BB5E /* Contacts.framework in Frameworks */,\n\t\t\t\t76DC6A4B18F434BAC239CC4A /* DriverKit.framework in Frameworks */,\n\t\t\t\t21425F6DE3D493B6F1E33D21 /* Framework.framework in Frameworks */,\n\t\t\t\tA949422315536EACDF8DD78A /* NetworkExtension.framework in Frameworks */,\n\t\t\t\tEDB55692D392FD09C3FCFBF6 /* libStaticLibrary_ObjC.a in Frameworks */,\n\t\t\t\tC093BF20B99FE892D0F06B2D /* libEndpointSecurity.tbd in Frameworks */,\n\t\t\t\tBAA1C1E3828F5D43546AF997 /* libc++.tbd in Frameworks */,\n\t\t\t\tA59B3F08914812573AFF6C2D /* libz.dylib in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDFDFD9EDAD45D89D1080FC5D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD5D493E4A7AD63860E1399DD /* ExternalTarget.framework in Frameworks */,\n\t\t\t\tA1588BF3BFFE1DF7409CBA10 /* Framework.framework in Frameworks */,\n\t\t\t\t71A2AAC5934BDC9EDB6F0D9E /* libStaticLibrary_ObjC.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE63B2ED6C095617F6F53C14A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t61401517ECCEB2362582B5DA /* libEndpointSecurity.tbd in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEA2F63A326C56F6ECA7F5D7D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8267B75289E9D6C7B38FC426 /* DriverKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t018CC36B301BFA9965780BD9 /* iMessageStickers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3ED831531AA349CCC19B258B /* Assets.xcassets */,\n\t\t\t\tF2FA55A558627ED576A4AFD6 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = iMessageStickers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t087B848BD38A4D4CB228ED41 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0D039F2E62354C7C8E283BE6 /* App_iOS_UITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t72A14C887EF7E9C8CBE914AC /* Info.plist */,\n\t\t\t\t587B9E9A3533E965CA602B76 /* TestProjectUITests.swift */,\n\t\t\t);\n\t\t\tpath = App_iOS_UITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1A57D1EE1FBC13598F6B5CB0 /* Framework */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2A5F527F2590C14956518174 /* FrameworkFile.swift */,\n\t\t\t\t34F13B632328979093CE6056 /* Info.plist */,\n\t\t\t\t6A58A16491CDDF968B0D56DE /* MyFramework.h */,\n\t\t\t);\n\t\t\tpath = Framework;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F2DE413CF2CB54988158172 /* App */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2F80635127D17ECB7748067B /* FolderWithDot2.0 */,\n\t\t\t\tCE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */,\n\t\t\t\t9E17D598D98065767A04740F /* Localizable.strings */,\n\t\t\t\t65C8D6D1DDC1512D396C07B7 /* Localizable.stringsdict */,\n\t\t\t\t0C6BA0D12467A13EC012C728 /* LocalizedStoryboard.storyboard */,\n\t\t\t\t814D72C2B921F60B759C2D4B /* Main.storyboard */,\n\t\t\t\t306796628DD52FA55E833B65 /* Model.xcdatamodeld */,\n\t\t\t\tAEBCA8CFF769189C0D52031E /* App_iOS.xctestplan */,\n\t\t\t\tF0D48A913C087D049C8EDDD7 /* App.entitlements */,\n\t\t\t\t7F1A2F579A6F79C62DDA0571 /* AppDelegate.swift */,\n\t\t\t\t3797E591F302ECC0AA2FC607 /* Assets.xcassets */,\n\t\t\t\t9D4AB3FCF725428EFB56F542 /* Configuration.storekit */,\n\t\t\t\tB5C943D39DD7812CAB94B614 /* Documentation.docc */,\n\t\t\t\tC9DDE1B06BCC1CDE0ECF1589 /* Info.plist */,\n\t\t\t\tAAA49985DFFE797EE8416887 /* inputList.xcfilelist */,\n\t\t\t\tBF59AC868D227C92CA8B1B57 /* Model.xcmappingmodel */,\n\t\t\t\tC7809CE9FE9852C2AA87ACE5 /* module.modulemap */,\n\t\t\t\t553D289724905857912C7A1D /* outputList.xcfilelist */,\n\t\t\t\t01E6934B571B91EAAFF0EDCB /* Resource.abc */,\n\t\t\t\t325F18855099386B08DD309B /* Resource.abcd */,\n\t\t\t\t8AF20308873AEEEC4D8C45D1 /* Settings.bundle */,\n\t\t\t\tFD5AEA58D3C0A1C8EEDF00F7 /* TestIcon.icon */,\n\t\t\t\t0704B6CAFBB53E0EBB08F6B3 /* ViewController.swift */,\n\t\t\t);\n\t\t\tname = App;\n\t\t\tpath = App_iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t293D0FF827366B513839236A = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F2DE413CF2CB54988158172 /* App */,\n\t\t\t\tC81493FAD71E9A9A19E00AD5 /* App_Clip */,\n\t\t\t\t6BD8F0932CCAD4BBE752866B /* App_Clip_UITests */,\n\t\t\t\tFC81A3ED177CE9DA68D09941 /* App_iOS_Tests */,\n\t\t\t\t0D039F2E62354C7C8E283BE6 /* App_iOS_UITests */,\n\t\t\t\tEE78B4FBD0137D1975C47D76 /* App_macOS */,\n\t\t\t\t6DE1C805DC13547F27FD86C6 /* App_macOS_Tests */,\n\t\t\t\tD27117FBA2920408002F0B4C /* App_supportedDestinations */,\n\t\t\t\tBAE6C12745737019DC9E98BF /* App_watchOS */,\n\t\t\t\t795B8D70B674C850B57DD39D /* App_watchOS Extension */,\n\t\t\t\t6DBE0EE90642BB3F6E58AD43 /* Configs */,\n\t\t\t\t3F2E22B7AB20FA42CD205C2A /* CopyFiles */,\n\t\t\t\tED8625A7E716E1BA50AB88AB /* CrossOverlayFramework */,\n\t\t\t\tFCC084D4F8992BBC49983A38 /* CustomGroup */,\n\t\t\t\t7979F5A04B370C36415EFB11 /* DriverKit Driver */,\n\t\t\t\t99EF37D6DEE914E180236A91 /* EndpointSecurity Extension */,\n\t\t\t\t5CBCE0E2A145046265FE99E2 /* FileGroup */,\n\t\t\t\t1A57D1EE1FBC13598F6B5CB0 /* Framework */,\n\t\t\t\tA3DCF90D9B1EF4E27CF54B19 /* iMessageApp */,\n\t\t\t\tBF58996786F85CB77BEE72EF /* iMessageExtension */,\n\t\t\t\t018CC36B301BFA9965780BD9 /* iMessageStickers */,\n\t\t\t\tA0F4C565134899E0C5EB2EA7 /* Network Extension */,\n\t\t\t\t9EDF27BB8A57733E6639D36D /* Resources */,\n\t\t\t\t9DB22CB08CFAA455518700DB /* StandaloneFiles */,\n\t\t\t\tBDA839814AF73F01F7710518 /* StaticLibrary_ObjC */,\n\t\t\t\tCBDAC144248EE9D3838C6AAA /* StaticLibrary_Swift */,\n\t\t\t\t6E0D17C5B4E6F01B89254309 /* String Catalogs */,\n\t\t\t\tAE2AB2772F70DFFF402AA02B /* SyncedFolder */,\n\t\t\t\tAB527E0D553CE53AF54C39CD /* SyncedParent */,\n\t\t\t\t8CFD8AD4820FAB9265663F92 /* Tool */,\n\t\t\t\t4C7F5EB7D6F3E0E9B426AB4A /* Utilities */,\n\t\t\t\t3FEA12CF227D41EF50E5C2DB /* Vendor */,\n\t\t\t\t80C3A0E524EC1ABCB9149EA2 /* XPC Service */,\n\t\t\t\tDAA7880242A9DE61E68026CC /* Folder */,\n\t\t\t\t2E1E747C7BC434ADB80CC269 /* Headers */,\n\t\t\t\t6B1603BA83AA0C7B94E45168 /* ResourceFolder */,\n\t\t\t\t6BBE762F36D94AB6FFBFE834 /* SomeFile */,\n\t\t\t\t79DC4A1E4D2E0D3A215179BC /* Bundles */,\n\t\t\t\tFC1515684236259C50A7747F /* Frameworks */,\n\t\t\t\tAC523591AC7BE9275003D2DB /* Products */,\n\t\t\t\tD7929BCBA599BD85A3B8A039 /* Projects */,\n\t\t\t);\n\t\t\tindentWidth = 2;\n\t\t\tsourceTree = \"<group>\";\n\t\t\ttabWidth = 2;\n\t\t\tusesTabs = 0;\n\t\t};\n\t\t2EEFFE9D49F84DE5D5AFA553 /* Module */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF2950763C4C568CC85021D18 /* module.modulemap */,\n\t\t\t);\n\t\t\tpath = Module;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2F80635127D17ECB7748067B /* FolderWithDot2.0 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2F430AABE04B7499B458D9DB /* SwiftFileInDotPath.swift */,\n\t\t\t);\n\t\t\tpath = FolderWithDot2.0;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3F2E22B7AB20FA42CD205C2A /* CopyFiles */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t068EDF47F0B087F6A4052AC0 /* Empty.h */,\n\t\t\t);\n\t\t\tpath = CopyFiles;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3FEA12CF227D41EF50E5C2DB /* Vendor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t70A8E15C81E454DC950C59F0 /* SomeXPCService.xpc */,\n\t\t\t);\n\t\t\tpath = Vendor;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4C7F5EB7D6F3E0E9B426AB4A /* Utilities */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0510CEA09E3BFD387E3EDE28 /* MyPlayground.playground */,\n\t\t\t);\n\t\t\tpath = Utilities;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CBCE0E2A145046265FE99E2 /* FileGroup */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68829F7392F2B367129BA0E7 /* UnderFileGroup */,\n\t\t\t);\n\t\t\tpath = FileGroup;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68829F7392F2B367129BA0E7 /* UnderFileGroup */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCA8718C7CD3BE86D9B1F5120 /* MoreUnder.swift */,\n\t\t\t);\n\t\t\tpath = UnderFileGroup;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t69C61547C081D04364A5DE42 /* Storyboards */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD52EC9AA9FFD3B690C355068 /* LaunchScreen.storyboard */,\n\t\t\t);\n\t\t\tname = Storyboards;\n\t\t\tpath = Storyboards;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6A90AFD865B13D26DA108CAB /* tvOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t18722C61B05FFF4CC63D5755 /* ContentView.swift */,\n\t\t\t);\n\t\t\tpath = tvOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6BD8F0932CCAD4BBE752866B /* App_Clip_UITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3A7BEFAB4710735CF169B1E8 /* Info.plist */,\n\t\t\t\t8D88C6BF7355702B74396791 /* TestProjectUITests.swift */,\n\t\t\t);\n\t\t\tpath = App_Clip_UITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6DBE0EE90642BB3F6E58AD43 /* Configs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t102A08142A31E44F4ED52649 /* base.xcconfig */,\n\t\t\t\t16D662EE577E4CD6AFF39D66 /* config.xcconfig */,\n\t\t\t);\n\t\t\tpath = Configs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6DE1C805DC13547F27FD86C6 /* App_macOS_Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t039F208D1138598CE060F140 /* Info.plist */,\n\t\t\t\t87DF9DCA8399E3214A7E27CF /* TestProjectTests.swift */,\n\t\t\t);\n\t\t\tpath = App_macOS_Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6E0D17C5B4E6F01B89254309 /* String Catalogs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE66ABD3EB14C9D63DEF5C532 /* LocalizableStrings.xcstrings */,\n\t\t\t);\n\t\t\tpath = \"String Catalogs\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t795B8D70B674C850B57DD39D /* App_watchOS Extension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t108BB29172D27BE3BD1E7F35 /* Assets.xcassets */,\n\t\t\t\t8CAF6C55B555E3E1352645B6 /* ExtensionDelegate.swift */,\n\t\t\t\t9F27382DD66E26C059E26EFE /* Info.plist */,\n\t\t\t\tA3F6BCB5FEFB16F1BA368059 /* InterfaceController.swift */,\n\t\t\t\tC934C1F7A68CCD0AB6B38478 /* NotificationController.swift */,\n\t\t\t\tE9672EF8FE1DDC8DE0705129 /* PushNotificationPayload.apns */,\n\t\t\t);\n\t\t\tpath = \"App_watchOS Extension\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7979F5A04B370C36415EFB11 /* DriverKit Driver */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t432E2C071A4B6B3757BEA13E /* Driver.cpp */,\n\t\t\t\t382E11E88B12BCB30F575686 /* Driver.entitlements */,\n\t\t\t\t5A3A73F307648F58213E4EA1 /* Driver.iig */,\n\t\t\t\tD7E73F4E11A4B74449E7FDFE /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"DriverKit Driver\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t79DC4A1E4D2E0D3A215179BC /* Bundles */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t45C12576F5AA694DD0CE2132 /* BundleX.bundle */,\n\t\t\t\tE3958AB20082EA12D4D5E60C /* BundleY.bundle */,\n\t\t\t);\n\t\t\tname = Bundles;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t80C3A0E524EC1ABCB9149EA2 /* XPC Service */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBA040F1F7D6CA08878323A55 /* Info.plist */,\n\t\t\t\t187E665975BB5611AF0F27E1 /* main.m */,\n\t\t\t\tFD05F36F95D6F098A76F220B /* XPC_Service.h */,\n\t\t\t\t148B7C933698BCC4F1DBA979 /* XPC_Service.m */,\n\t\t\t\t3D8A2D4363866877B9140156 /* XPC_ServiceProtocol.h */,\n\t\t\t);\n\t\t\tpath = \"XPC Service\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t85FEBB7D2103B020423407A2 /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9E5249A284275B0CDF4E5DDA /* iOS */,\n\t\t\t\t6A90AFD865B13D26DA108CAB /* tvOS */,\n\t\t\t\t15A4363D659A58DA835DE8BA /* MyAppApp.swift */,\n\t\t\t);\n\t\t\tname = Sources;\n\t\t\tpath = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8CFD8AD4820FAB9265663F92 /* Tool */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t93C033648A37D95027845BD3 /* main.swift */,\n\t\t\t);\n\t\t\tpath = Tool;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t99EF37D6DEE914E180236A91 /* EndpointSecurity Extension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5D13DDAB46F80D94D7345063 /* EndpointSecurity.entitlements */,\n\t\t\t\t8C62E8644AC5070AFC737BCC /* Info.plist */,\n\t\t\t\tA6680EFE4E908CDBDCE405C8 /* main.swift */,\n\t\t\t);\n\t\t\tpath = \"EndpointSecurity Extension\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9DB22CB08CFAA455518700DB /* StandaloneFiles */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0F5BD97AF0F94A15A5B7DDB7 /* Standalone.swift */,\n\t\t\t\t3571E41E19A5AB8AAAB04109 /* StandaloneAssets.xcassets */,\n\t\t\t);\n\t\t\tpath = StandaloneFiles;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9E5249A284275B0CDF4E5DDA /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAEEFDE76B5FEC833403C0869 /* ContentView.swift */,\n\t\t\t);\n\t\t\tpath = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9EDF27BB8A57733E6639D36D /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t28360ECA4D727FAA58557A81 /* example.mp4 */,\n\t\t\t\tBDCA996D141DD8A16B18D68F /* GoogleService-Info.plist */,\n\t\t\t\t7B5068D64404C61A67A18458 /* MyBundle.bundle */,\n\t\t\t\tC9E358FBE2B54D2B5C7FD609 /* SceneKitCatalog.scnassets */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA0F4C565134899E0C5EB2EA7 /* Network Extension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t16AA52945B70B1BF9E246350 /* FilterDataProvider.swift */,\n\t\t\t\tEDCC70978B8AD49373DA0DE0 /* Info.plist */,\n\t\t\t\t03CD22B8CD2E91BB97CC534E /* main.swift */,\n\t\t\t\t45BBB9A7599490883491C808 /* NetworkExtension.entitlements */,\n\t\t\t);\n\t\t\tpath = \"Network Extension\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA3DCF90D9B1EF4E27CF54B19 /* iMessageApp */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD51CC8BCCBD68A90E90A3207 /* Assets.xcassets */,\n\t\t\t\tA220DE4EB3CB2E598D034D9D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = iMessageApp;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAB527E0D553CE53AF54C39CD /* SyncedParent */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA2F1B5386E15A261AC8A4DEE /* SyncedChild */,\n\t\t\t);\n\t\t\tpath = SyncedParent;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAC523591AC7BE9275003D2DB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3FC04772130400920D68A167 /* App_Clip_Tests.xctest */,\n\t\t\t\t7C7EC00B53FF878007F6ECAB /* App_Clip_UITests.xctest */,\n\t\t\t\t38DB679FF1CF4E379D1AB103 /* App_Clip.app */,\n\t\t\t\tCB77A637470A3CDA2BDDBE99 /* App_iOS_Tests.xctest */,\n\t\t\t\t13EEAB58665D79C15184D9D0 /* App_iOS_UITests.xctest */,\n\t\t\t\tB1C33BB070583BE3B0EC0E68 /* App_iOS.app */,\n\t\t\t\t0B9D98D935F2C69A1F5BA539 /* App_macOS_Tests.xctest */,\n\t\t\t\t33F6DCDC37D2E66543D4965D /* App_macOS.app */,\n\t\t\t\t407C3F0009FDCE5B1B7DC2A8 /* App_supportedDestinations.app */,\n\t\t\t\t0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */,\n\t\t\t\tA680BE9F68A255B0FB291AE6 /* App_watchOS.app */,\n\t\t\t\t84317819C92F78425870E483 /* BundleX.bundle */,\n\t\t\t\tBB677D970923F663D846D7E0 /* BundleY.bundle */,\n\t\t\t\t8FE05BF7897ECFD58B7AC8B1 /* CrossOverlayFramework.framework */,\n\t\t\t\tE0F31A9DE15B210D101AFC81 /* CrossOverlayFramework.framework */,\n\t\t\t\t0095836FE59395511E0CB4F0 /* CrossOverlayFramework.framework */,\n\t\t\t\t89EB41A001D8BF26431C5798 /* CrossOverlayFramework.framework */,\n\t\t\t\t83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */,\n\t\t\t\tE5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */,\n\t\t\t\t7D700FA699849D2F95216883 /* EntitledApp.app */,\n\t\t\t\t2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */,\n\t\t\t\t8A9274BE42A03DC5DA1FAD04 /* Framework.framework */,\n\t\t\t\t41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */,\n\t\t\t\t7D67F1C1BFBACE101DE7DB51 /* Framework.framework */,\n\t\t\t\t6177CC6263783487E93F7F4D /* Framework.framework */,\n\t\t\t\t3EF21DF245F66BEF5446AAEF /* Framework2.framework */,\n\t\t\t\t2233774B86539B1574D206B0 /* Framework2.framework */,\n\t\t\t\tA0DC40025AB59B688E758829 /* Framework2.framework */,\n\t\t\t\tAB055761199DF36DB0C629A6 /* Framework2.framework */,\n\t\t\t\t9A87A926D563773658FB87FE /* iMessageApp.app */,\n\t\t\t\tD629E142AB87C681D4EC90F7 /* iMessageExtension.appex */,\n\t\t\t\tC53ACB2962FED621389C36A2 /* iMessageStickersExtension.appex */,\n\t\t\t\tB221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */,\n\t\t\t\t86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */,\n\t\t\t\t469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */,\n\t\t\t\t46DD8F9AAC104BDB63793625 /* libStaticLibrary_ObjC.a */,\n\t\t\t\t8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */,\n\t\t\t\t2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */,\n\t\t\t\tE43116070AFEF5D8C3A5A957 /* TestFramework.framework */,\n\t\t\t\tBECEA4A483ADEB8158F640B3 /* Tool */,\n\t\t\t\t22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBAE6C12745737019DC9E98BF /* App_watchOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC872631362DDBAFCE71E5C66 /* Interface.storyboard */,\n\t\t\t\tD8A016580A3B8F72B820BFBF /* Assets.xcassets */,\n\t\t\t\tFED40A89162E446494DDE7C7 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = App_watchOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBDA839814AF73F01F7710518 /* StaticLibrary_ObjC */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2EEFFE9D49F84DE5D5AFA553 /* Module */,\n\t\t\t\t5A2B916A11DCC2565241359F /* StaticLibrary_ObjC.h */,\n\t\t\t\t1D0C79A8C750EC0DE748C463 /* StaticLibrary_ObjC.m */,\n\t\t\t);\n\t\t\tpath = StaticLibrary_ObjC;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBF58996786F85CB77BEE72EF /* iMessageExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t753001CDCEAA4C4E1AFF8E87 /* MainInterface.storyboard */,\n\t\t\t\t1BC32A813B80A53962A1F365 /* Assets.xcassets */,\n\t\t\t\t40863AE6202CFCD0529D8438 /* Info.plist */,\n\t\t\t\tB198242976C3395E31FE000A /* MessagesViewController.swift */,\n\t\t\t);\n\t\t\tpath = iMessageExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC81493FAD71E9A9A19E00AD5 /* App_Clip */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t79325B44B19B83EC6CEDBCC5 /* LaunchScreen.storyboard */,\n\t\t\t\t2FC2A8A829CE71B1CF415FF7 /* Main.storyboard */,\n\t\t\t\t23A2F16890ECF2EE3FED72AE /* AppDelegate.swift */,\n\t\t\t\t59DA55A04FA2366B5D0BEEFF /* Assets.xcassets */,\n\t\t\t\t1FA5E208EC184E3030D2A21D /* Clip.entitlements */,\n\t\t\t\t6F165CDD5BCC13AFF50B65E2 /* Info.plist */,\n\t\t\t\tDFE6A6FAAFF701FE729293DE /* ViewController.swift */,\n\t\t\t);\n\t\t\tpath = App_Clip;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCBDAC144248EE9D3838C6AAA /* StaticLibrary_Swift */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6AC91042453E18DF74BA1C0F /* StaticLibrary.swift */,\n\t\t\t);\n\t\t\tpath = StaticLibrary_Swift;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD27117FBA2920408002F0B4C /* App_supportedDestinations */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t85FEBB7D2103B020423407A2 /* Sources */,\n\t\t\t\t69C61547C081D04364A5DE42 /* Storyboards */,\n\t\t\t);\n\t\t\tpath = App_supportedDestinations;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7929BCBA599BD85A3B8A039 /* Projects */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF192E783CCA898FBAA5C34EA /* AnotherProject */,\n\t\t\t);\n\t\t\tname = Projects;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tED8625A7E716E1BA50AB88AB /* CrossOverlayFramework */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DD7A61B07AD2F91BDECC255 /* CrossOverlayFramework.swiftcrossimport */,\n\t\t\t\t81E4CCE342955E0E934BE533 /* FrameworkFile.swift */,\n\t\t\t\tD21BB1B6FA5A025305B223BA /* Info.plist */,\n\t\t\t\t576675973B56A96047CB4944 /* MyFramework.h */,\n\t\t\t);\n\t\t\tpath = CrossOverlayFramework;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE78B4FBD0137D1975C47D76 /* App_macOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t74FBDFA5CB063F6001AD8ACD /* Main.storyboard */,\n\t\t\t\t9528528C989D24FE3E6C533E /* App-Info.plist */,\n\t\t\t\t09B82F603D981398F38D762E /* AppDelegate.swift */,\n\t\t\t\tE55F45EACB0F382722D61C8D /* Assets.xcassets */,\n\t\t\t\tA4C3FE6B986506724DAB5D0F /* ViewController.swift */,\n\t\t\t);\n\t\t\tpath = App_macOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFC1515684236259C50A7747F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFDB2B6A77D39CD5602F2125F /* Contacts.framework */,\n\t\t\t\tC0A428E67153BB40184F37BE /* DriverKit.framework */,\n\t\t\t\t0BB1B49A91B892152D68ED76 /* libc++.tbd */,\n\t\t\t\t0BC75409252FF15F540FBB7B /* libEndpointSecurity.tbd */,\n\t\t\t\tFD4A16C7B8FEB7F97F3CBE3F /* libz.dylib */,\n\t\t\t\t5B785B1161553A7DD6DA4255 /* NetworkExtension.framework */,\n\t\t\t\t4C7F9636B706AC92629D0B48 /* XCTest.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFC81A3ED177CE9DA68D09941 /* App_iOS_Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t77C0C341F1865224E0596086 /* Info.plist */,\n\t\t\t\tD132EA69984F32DA9DC727B6 /* TestProjectTests.swift */,\n\t\t\t);\n\t\t\tpath = App_iOS_Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFCC084D4F8992BBC49983A38 /* CustomGroup */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE1343F2238429D4DA9D830B /* File1.swift */,\n\t\t\t\tBC56891DA7446EAC8C2F27EB /* File2.swift */,\n\t\t\t\tDAA7880242A9DE61E68026CC /* Folder */,\n\t\t\t\t03D6D1E34022DA9524E5B38D /* Mintfile */,\n\t\t\t);\n\t\t\tname = CustomGroup;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t0D09E5BA6B8442DC0ABB8AA6 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7F658343A505B824321E086B /* Headers in Headers */,\n\t\t\t\tE4B41CB5C796DD2C3C2E564C /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D9AE1B5509A67E70270EF74 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t96B55C0F660235FE6BDD8869 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2F72F6483B3356C11F79ACCF /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE34351AC0049221C167A60AC /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t54B4D7ADCE0441B5A91DE22D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF6537CE373C94809E6653758 /* Headers in Headers */,\n\t\t\t\t0BDA156BEBFCB9E65910F838 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5A0FEF527F632170E10430F5 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3788E1382B38DF4ACE3D2BB1 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5DCBD97EC23B8FCB39B95029 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t666AA5F3F63C8FD7C68A6CC5 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t85324A7388DEC869665BFA99 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t747CAE14D196F5652E93353C /* Headers in Headers */,\n\t\t\t\t47D1F439B8E6D287B3F3E8D1 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t942F7B856687815A6B056194 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t06F1750F0E45E4822F806523 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA24F1A0AC15CAE82CD3EDFE2 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4B862F11762F6BB54E97E401 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAEC8E1CFD02926FADE734D82 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0786F9C725AD215C4F915BB5 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC5BCD048B70E4D35B14AA8E9 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDBCA8149E5C4183AB52B8D99 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDA6BC7F9BB12AC09AB3AF202 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t57DC116CE5C9F93FBA529C2F /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF21F013CBD830972394A3A13 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3535891EC86283BB5064E7E1 /* Headers in Headers */,\n\t\t\t\t01BFA2C4D9C5BBC72C015AA8 /* MyFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXLegacyTarget section */\n\t\t700328EE1570207608D6ADB3 /* IncludedLegacy */ = {\n\t\t\tisa = PBXLegacyTarget;\n\t\t\tbuildConfigurationList = 02B721AF7361EBCFA91410BF /* Build configuration list for PBXLegacyTarget \"IncludedLegacy\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t82E24A8257F299AC04F44A8F /* Sources */,\n\t\t\t);\n\t\t\tbuildToolPath = /usr/bin/true;\n\t\t\tbuildWorkingDirectory = AnotherProject;\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = IncludedLegacy;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tpassBuildSettingsInEnvironment = 0;\n\t\t\tproductName = IncludedLegacy;\n\t\t};\n\t\t72C923899DE05F1281872160 /* Legacy */ = {\n\t\t\tisa = PBXLegacyTarget;\n\t\t\tbuildConfigurationList = BE0FF81B67730F081F45BC78 /* Build configuration list for PBXLegacyTarget \"Legacy\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAF7B22EF5863A5280B535896 /* Sources */,\n\t\t\t);\n\t\t\tbuildToolPath = /usr/bin/true;\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Legacy;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tpassBuildSettingsInEnvironment = 1;\n\t\t\tproductName = Legacy;\n\t\t};\n/* End PBXLegacyTarget section */\n\n/* Begin PBXNativeTarget section */\n\t\t020A320BB3736FCDE6CC4E70 /* App_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 77CE5B5E5DEAC820254D484C /* Build configuration list for PBXNativeTarget \"App_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t77D35586228BF8AB74152BB5 /* Resources */,\n\t\t\t\t96BB43F4706B031DA45166E8 /* Sources */,\n\t\t\t\tFB79B30FEA6073A29B4D9FCC /* CopyFiles */,\n\t\t\t\tA6E1C88C073F8CC6B5B072B6 /* Frameworks */,\n\t\t\t\tDE875E9A37F7CB9C347AEFA0 /* Embed System Extensions */,\n\t\t\t\tCF6B94E7B2D2312582A526F5 /* Embed Dependencies */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t6BE35B7C058BE1B6F3B906C0 /* PBXTargetDependency */,\n\t\t\t\t1652DB87B43B72B5DE0601C4 /* PBXTargetDependency */,\n\t\t\t\tF3930A0708A7EB1BDA25B31B /* PBXTargetDependency */,\n\t\t\t\tF7532D3474E04037FF26E9BC /* PBXTargetDependency */,\n\t\t\t\t7EFC0278E67CD35F8981993C /* PBXTargetDependency */,\n\t\t\t\tB95DA92D1265C094E71B4A5D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_macOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_macOS;\n\t\t\tproductReference = 33F6DCDC37D2E66543D4965D /* App_macOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t0636AAF06498C336E1CEEDE4 /* TestFramework */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9F4CBE5D909D2757B3D334B3 /* Build configuration list for PBXNativeTarget \"TestFramework\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2F72F6483B3356C11F79ACCF /* Headers */,\n\t\t\t\t902C8700CD150C726365CB8A /* Sources */,\n\t\t\t\t8189054F985D26094EE77069 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TestFramework;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = TestFramework;\n\t\t\tproductReference = E43116070AFEF5D8C3A5A957 /* TestFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t0867B0DACEF28C11442DE8F7 /* App_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 62D7BB889799B73F7E8B798F /* Build configuration list for PBXNativeTarget \"App_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6F573D15DE1F149EF128C492 /* Sources */,\n\t\t\t\t8508BA1B733839E314AF2853 /* Resources */,\n\t\t\t\t865AAD9909027AC34D1374EA /* CopyFiles */,\n\t\t\t\t117840B4DBC04099F6779D00 /* Frameworks */,\n\t\t\t\tE8BC0F358D693454E5027ECC /* Copy Bundle Resources */,\n\t\t\t\t94FF9CA021C43301BA069930 /* Embed App Clips */,\n\t\t\t\tFE78CC3322C9C2DB1D64EAAA /* Embed Frameworks */,\n\t\t\t\t807155B9081529D99AAB4743 /* Embed Watch Content */,\n\t\t\t\t71A4CC6ECC8522178F566E7B /* Strip Unused Architectures from Frameworks */,\n\t\t\t\tCBE633966E8F3819F15270A3 /* MyScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4FA29DA80DA668224AED741F /* PBXTargetDependency */,\n\t\t\t\t8B6243D8D47A6ADA4CA0D7BD /* PBXTargetDependency */,\n\t\t\t\t0D33D01C71E8002A07F02122 /* PBXTargetDependency */,\n\t\t\t\tA94F38390A74E215EC107BB5 /* PBXTargetDependency */,\n\t\t\t\tE84285243DE0BB361A708079 /* PBXTargetDependency */,\n\t\t\t\tE8C078B0A2A2B0E1D35694D5 /* PBXTargetDependency */,\n\t\t\t\t981D116D40DBA0407D0E0E94 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tfileSystemSynchronizedGroups = (\n\t\t\t\tA2F1B5386E15A261AC8A4DEE /* SyncedChild */,\n\t\t\t\tAE2AB2772F70DFFF402AA02B /* SyncedFolder */,\n\t\t\t);\n\t\t\tname = App_iOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tD7917D10F77DA9D69937D493 /* Swinject */,\n\t\t\t);\n\t\t\tproductName = App_iOS;\n\t\t\tproductReference = B1C33BB070583BE3B0EC0E68 /* App_iOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t090315A24AC8E8B8F318A709 /* Tool */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7881E73F05F096623E592040 /* Build configuration list for PBXNativeTarget \"Tool\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2235AD7DEFC8FE534AB91B38 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Tool;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Tool;\n\t\t\tproductReference = BECEA4A483ADEB8158F640B3 /* Tool */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\t0CE8BE7C80651629EC056066 /* CrossOverlayFramework_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 641D1B2D88B93FAD0EA09187 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t096753D5DAA26D110F699A7F /* CopyFiles */,\n\t\t\t\tC5BCD048B70E4D35B14AA8E9 /* Headers */,\n\t\t\t\t84FEBA4F84620938800D12A4 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CrossOverlayFramework_iOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = CrossOverlayFramework_iOS;\n\t\t\tproductReference = 8FE05BF7897ECFD58B7AC8B1 /* CrossOverlayFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 56BF985F253DD84AD7C37538 /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7FAF0BBB3DE701EBE5DBE810 /* CopyFiles */,\n\t\t\t\tEA88FE285DA490166635BE98 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StaticLibrary_ObjC_iOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = StaticLibrary_ObjC_iOS;\n\t\t\tproductReference = B221F5A689AD7D3AD52F56B8 /* libStaticLibrary_ObjC.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t192C574D74079A99AF1AD0B1 /* iMessageStickersExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B40D2F785317445D9A9C8C12 /* Build configuration list for PBXNativeTarget \"iMessageStickersExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAA12B5909FEE45016F469C78 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = iMessageStickersExtension;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = iMessageStickersExtension;\n\t\t\tproductReference = C53ACB2962FED621389C36A2 /* iMessageStickersExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension.messages-sticker-pack\";\n\t\t};\n\t\t19BFB84599B0AA1275A9662D /* StaticLibrary_Swift */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4A036BD16A0E9D22AE065AC9 /* Build configuration list for PBXNativeTarget \"StaticLibrary_Swift\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t97C367BB898AC3F3B2DB1DD8 /* Sources */,\n\t\t\t\t194EE782F10A8F7ABD1A4AEB /* Copy Swift Objective-C Interface Header */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StaticLibrary_Swift;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = StaticLibrary_Swift;\n\t\t\tproductReference = 8CB86294FB939FE6E90932E1 /* libStaticLibrary_Swift.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t1C26A6A0BC446191F311D470 /* iMessageExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = ED1A174BA92C6E5172B519B7 /* Build configuration list for PBXNativeTarget \"iMessageExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5B3245836D7FA67E79EA1731 /* Sources */,\n\t\t\t\t1C008C34DA06FEE7841B0AC3 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = iMessageExtension;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = iMessageExtension;\n\t\t\tproductReference = D629E142AB87C681D4EC90F7 /* iMessageExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension.messages\";\n\t\t};\n\t\t208179651927D1138D19B5AD /* App_watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6B5C5F08C0EF06457756E379 /* Build configuration list for PBXNativeTarget \"App_watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB7B71FA7D279029BF7A7FC7C /* Resources */,\n\t\t\t\t661E0CEEEC2395C39375961F /* Embed Foundation Extensions */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t62DA64F61B337719A2CF993D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_watchOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_watchOS;\n\t\t\tproductReference = A680BE9F68A255B0FB291AE6 /* App_watchOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application.watchapp2\";\n\t\t};\n\t\t271CAC331D24F4F7E12C819C /* BundleY */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = DA49CF5A1AC4FC1A7EE979E8 /* Build configuration list for PBXNativeTarget \"BundleY\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BundleY;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = BundleY;\n\t\t\tproductReference = BB677D970923F663D846D7E0 /* BundleY.bundle */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\t2F4FEAEFD7EE82DC49D899FC /* CrossOverlayFramework_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9C9913AAE0ABA99337F0C069 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE1C04BDC65F3DC88D6D0473F /* CopyFiles */,\n\t\t\t\t942F7B856687815A6B056194 /* Headers */,\n\t\t\t\tA87FBABC2AA10F8D044526BD /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CrossOverlayFramework_macOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = CrossOverlayFramework_macOS;\n\t\t\tproductReference = E0F31A9DE15B210D101AFC81 /* CrossOverlayFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t307AE3FA155FFD09B74AE351 /* App_watchOS Extension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 3F3C272D2EA61F6B88B80D44 /* Build configuration list for PBXNativeTarget \"App_watchOS Extension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAE7971E1CA54D23C264E6541 /* Sources */,\n\t\t\t\t4A6E8F3A477AA5F67A8EB733 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"App_watchOS Extension\";\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = \"App_watchOS Extension\";\n\t\t\tproductReference = 0D09D243DBCF9D32E239F1E8 /* App_watchOS Extension.appex */;\n\t\t\tproductType = \"com.apple.product-type.watchkit2-extension\";\n\t\t};\n\t\t3BF66A4668DFAF9338791F60 /* CrossOverlayFramework_tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E3D23AF56C29471E48CA9A11 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t04D94C495E299B50EB0DC7C4 /* CopyFiles */,\n\t\t\t\tDA6BC7F9BB12AC09AB3AF202 /* Headers */,\n\t\t\t\tE9BE8745FD5B1ACBE43B9E0C /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CrossOverlayFramework_tvOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = CrossOverlayFramework_tvOS;\n\t\t\tproductReference = 0095836FE59395511E0CB4F0 /* CrossOverlayFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t428715FBC1D86458DA70CBDE /* DriverKitDriver */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 412FA71CA97AD6851A1828DD /* Build configuration list for PBXNativeTarget \"DriverKitDriver\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3422D8A97652F33BA3AEAD6E /* Sources */,\n\t\t\t\tEA2F63A326C56F6ECA7F5D7D /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = DriverKitDriver;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = DriverKitDriver;\n\t\t\tproductReference = 83B5EC7EF81F7E4B6F426D4E /* DriverKitDriver.dext */;\n\t\t\tproductType = \"com.apple.product-type.driver-extension\";\n\t\t};\n\t\t536ACF18E4603B59207D43CE /* Framework_tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 658628E35283172E17BFC6A3 /* Build configuration list for PBXNativeTarget \"Framework_tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF21F013CBD830972394A3A13 /* Headers */,\n\t\t\t\t9EC3C2991C5C1EE119E39533 /* Sources */,\n\t\t\t\t5EFF61D0A49AA8EABD72DF44 /* Frameworks */,\n\t\t\t\tBA454AAC926EDFCDA9226CBC /* MyScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD6C733BEB62EAA62CCC68556 /* PBXTargetDependency */,\n\t\t\t\tCE96B0951433713033A03DCD /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Framework_tvOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_tvOS;\n\t\t\tproductReference = 7D67F1C1BFBACE101DE7DB51 /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t53A3B531E3947D8A8722745E /* Framework_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D60A551D881B4B91F4535B78 /* Build configuration list for PBXNativeTarget \"Framework_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t54B4D7ADCE0441B5A91DE22D /* Headers */,\n\t\t\t\tD1F422E9C4DD531AA88418C9 /* Sources */,\n\t\t\t\t3D0637F4554EAD6FA48105BF /* MyScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tAD555A4814F2D294E2AC72D8 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Framework_macOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_macOS;\n\t\t\tproductReference = 41FC82ED1C4C3B7B3D7B2FB7 /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 752BB3C1A601770BDD9AC01E /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3217EBDE07BBCBDE3C16CEDC /* CopyFiles */,\n\t\t\t\t247A4E3947EC2AFB733A1B00 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StaticLibrary_ObjC_macOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = StaticLibrary_ObjC_macOS;\n\t\t\tproductReference = 86169DEEDEAF09AB89C8A31D /* libStaticLibrary_ObjC.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t63BFF75AA22335E3DDD5E26A /* App_Clip_Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 498FA7414845B8834E48496F /* Build configuration list for PBXNativeTarget \"App_Clip_Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF39FAD4CC93306087D129EBD /* Sources */,\n\t\t\t\t6D6C0891A16EFF2FDA9D25AF /* Frameworks */,\n\t\t\t\t30A8F3568B05F3DB13D8B466 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tA19BEE3154D879101F865BB2 /* PBXTargetDependency */,\n\t\t\t\t2D1B4333107E10912508724E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_Clip_Tests;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_Clip_Tests;\n\t\t\tproductReference = 3FC04772130400920D68A167 /* App_Clip_Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t6ED01BC471A8C3642258E178 /* Framework2_watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7E4887637B4FA5B8E2F349CA /* Build configuration list for PBXNativeTarget \"Framework2_watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5DCBD97EC23B8FCB39B95029 /* Headers */,\n\t\t\t\t21327378A4B2AF2B952D6DF1 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework2_watchOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework2_watchOS;\n\t\t\tproductReference = AB055761199DF36DB0C629A6 /* Framework2.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t71B5187E710718C1A205D4DC /* Framework_watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4A8774E3B4F5C9B98E0D0CF9 /* Build configuration list for PBXNativeTarget \"Framework_watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t85324A7388DEC869665BFA99 /* Headers */,\n\t\t\t\t077D11E42A8E90CAB8A95DF2 /* Sources */,\n\t\t\t\t2E6FCCFC594BE9FEB74FA2F0 /* Frameworks */,\n\t\t\t\t85D42C01B0821B87A49F32BD /* MyScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t0C99705018337CE91AA34CBA /* PBXTargetDependency */,\n\t\t\t\t35DF16CA4A1F88140CF69620 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Framework_watchOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_watchOS;\n\t\t\tproductReference = 6177CC6263783487E93F7F4D /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t71E2BDAC4B8E8FC2BBF75C55 /* App_macOS_Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 62C52A55CB8D3BD9A055FD14 /* Build configuration list for PBXNativeTarget \"App_macOS_Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8A616537E6E1BEAB59E069C7 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t8B1B6143B8996B3CF0FE61C5 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_macOS_Tests;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_macOS_Tests;\n\t\t\tproductReference = 0B9D98D935F2C69A1F5BA539 /* App_macOS_Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t7D3D92034F4F203C140574F0 /* StaticLibrary_ObjC_watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 0129D8A8DCD54069136D90F7 /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t924D7F0A22013EE6F06E7400 /* CopyFiles */,\n\t\t\t\t6D2FCEFCAFB24526BD458A2D /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StaticLibrary_ObjC_watchOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = StaticLibrary_ObjC_watchOS;\n\t\t\tproductReference = 46DD8F9AAC104BDB63793625 /* libStaticLibrary_ObjC.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t834F55973F05AC8A18144DB0 /* iMessageApp */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1FC6945BE13C2202A2BCA3BC /* Build configuration list for PBXNativeTarget \"iMessageApp\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t61001E265009194959C2CF36 /* Resources */,\n\t\t\t\tEB212BCB1E2E1D2667233F98 /* Embed Foundation Extensions */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t053FF4219E7A0E38E90071B0 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = iMessageApp;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = iMessageApp;\n\t\t\tproductReference = 9A87A926D563773658FB87FE /* iMessageApp.app */;\n\t\t\tproductType = \"com.apple.product-type.application.messages\";\n\t\t};\n\t\t8B9A14DC280CCE013CC86440 /* Framework2_tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EF0A56586AB1ED900B70D5BC /* Build configuration list for PBXNativeTarget \"Framework2_tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAEC8E1CFD02926FADE734D82 /* Headers */,\n\t\t\t\t8FD76C583F8C166F974F4BE2 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework2_tvOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework2_tvOS;\n\t\t\tproductReference = A0DC40025AB59B688E758829 /* Framework2.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t91C3E922A8482E07649971B9 /* App_Clip_UITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 129D9E77D45A66B1C78578F2 /* Build configuration list for PBXNativeTarget \"App_Clip_UITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2E1429F0FB524A2BCFC61DF1 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1341A437B2D0402F4F4CEA51 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_Clip_UITests;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_Clip_UITests;\n\t\t\tproductReference = 7C7EC00B53FF878007F6ECAB /* App_Clip_UITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n\t\t93542A75A613F00FDB5C9C63 /* StaticLibrary_ObjC_tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 906B8E5233EE4169E84ABAF3 /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t06FAE8D6834F982AA934B3E8 /* CopyFiles */,\n\t\t\t\t9BFB2E19F4777ACBEF89589A /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StaticLibrary_ObjC_tvOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = StaticLibrary_ObjC_tvOS;\n\t\t\tproductReference = 469B630D28015F0EDC456F6B /* libStaticLibrary_ObjC.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t9F551F66949B55E8328EB995 /* EndpointSecuritySystemExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C4FB84AAA6F6974CEA51D359 /* Build configuration list for PBXNativeTarget \"EndpointSecuritySystemExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEAFB6030AE5D2E4D9ACA6ECC /* Sources */,\n\t\t\t\tE63B2ED6C095617F6F53C14A /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = EndpointSecuritySystemExtension;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = EndpointSecuritySystemExtension;\n\t\t\tproductReference = E5E0A80CCE8F8DB662DCD2D0 /* EndpointSecuritySystemExtension.systemextension */;\n\t\t\tproductType = \"com.apple.product-type.system-extension\";\n\t\t};\n\t\tAD28397BCC984F769EE8A937 /* NetworkSystemExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 78DB808B74D58314279E7FD7 /* Build configuration list for PBXNativeTarget \"NetworkSystemExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDEB2782C650F563EB8C62B28 /* Sources */,\n\t\t\t\t7448069D11FB1A170F943C90 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = NetworkSystemExtension;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = NetworkSystemExtension;\n\t\t\tproductReference = 2049B6DD2AFE85F9DC9F3EB3 /* NetworkSystemExtension.systemextension */;\n\t\t\tproductType = \"com.apple.product-type.system-extension\";\n\t\t};\n\t\tAE3F93DB94E7208F2F1D9A78 /* Framework_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 50DA67E9A951C40D9536609D /* Build configuration list for PBXNativeTarget \"Framework_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t0D09E5BA6B8442DC0ABB8AA6 /* Headers */,\n\t\t\t\t40A4456A24F99A01E340C032 /* Sources */,\n\t\t\t\t43E9CD3CEA3FE8944C659368 /* MyScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t486D84E583999BAA22C679EC /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Framework_iOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework_iOS;\n\t\t\tproductReference = 8A9274BE42A03DC5DA1FAD04 /* Framework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tB61ED4688789B071275E2B7A /* EntitledApp */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 91E8D6B95F23669734D43FDC /* Build configuration list for PBXNativeTarget \"EntitledApp\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA0FE01FFC2B5A9FD21A89874 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = EntitledApp;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = EntitledApp;\n\t\t\tproductReference = 7D700FA699849D2F95216883 /* EntitledApp.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tC0570E2FB50D830D8D423396 /* App_supportedDestinations */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5EC789CCE1928A4CDA00DD1E /* Build configuration list for PBXNativeTarget \"App_supportedDestinations\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tCF8BAE171BAAFB2E5DDB9C19 /* Sources */,\n\t\t\t\t97119CD9F01D9A9522EF3526 /* Resources */,\n\t\t\t\t36418B6CABA06BA9B206556E /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = App_supportedDestinations;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC7F9B7EDE85527EFEA85D46D /* Swinject */,\n\t\t\t);\n\t\t\tproductName = App_supportedDestinations;\n\t\t\tproductReference = 407C3F0009FDCE5B1B7DC2A8 /* App_supportedDestinations.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tC7F90FD0FAAF232B3E015D38 /* CrossOverlayFramework_watchOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C483BD5456B09C276DE6EFC1 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_watchOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tADD98000970B8907F73BFD92 /* CopyFiles */,\n\t\t\t\tA24F1A0AC15CAE82CD3EDFE2 /* Headers */,\n\t\t\t\tC975C5F0085D232AF63E0F3E /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CrossOverlayFramework_watchOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = CrossOverlayFramework_watchOS;\n\t\t\tproductReference = 89EB41A001D8BF26431C5798 /* CrossOverlayFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tCE7D183D3752B5B35D2D8E6D /* Framework2_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9A0EF0B71AD44055E8749C42 /* Build configuration list for PBXNativeTarget \"Framework2_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2D9AE1B5509A67E70270EF74 /* Headers */,\n\t\t\t\tA000A0FFF2503ADC8D74D2DF /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework2_iOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework2_iOS;\n\t\t\tproductReference = 3EF21DF245F66BEF5446AAEF /* Framework2.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tD137C04B64B7052419A2DF4E /* App_Clip */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 07B4E73E56B7C2C80DE2A378 /* Build configuration list for PBXNativeTarget \"App_Clip\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6F11C066A401E4F02A1188EB /* Sources */,\n\t\t\t\tAFA07EE1616E0EE7065760C9 /* Resources */,\n\t\t\t\tDFDFD9EDAD45D89D1080FC5D /* Frameworks */,\n\t\t\t\t848740AD60C4329197FF876B /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tFD2D68EC95DC231C4007FB08 /* PBXTargetDependency */,\n\t\t\t\tBE9300E427142E634A8A91B8 /* PBXTargetDependency */,\n\t\t\t\tCFEACC1CED73B52EA1CCD054 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_Clip;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_Clip;\n\t\t\tproductReference = 38DB679FF1CF4E379D1AB103 /* App_Clip.app */;\n\t\t\tproductType = \"com.apple.product-type.application.on-demand-install-capable\";\n\t\t};\n\t\tDA40AB367B606CCE2FDD398D /* BundleX */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2C39D94CF9C8B1CB79F04AC8 /* Build configuration list for PBXNativeTarget \"BundleX\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BundleX;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = BundleX;\n\t\t\tproductReference = 84317819C92F78425870E483 /* BundleX.bundle */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\tDC2F16BAA6E13B44AB62F888 /* App_iOS_Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F888428CB91ACDDAAE8C8F21 /* Build configuration list for PBXNativeTarget \"App_iOS_Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9719917A0F173B1BCC95FBA1 /* Sources */,\n\t\t\t\tA688549B76B3FDC56A56735D /* Frameworks */,\n\t\t\t\tA8688B5E0D1C2F35AD20BB85 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t3A31E571AF127F715E3B8A61 /* PBXTargetDependency */,\n\t\t\t\t6AE62A40F64046B597B07801 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_iOS_Tests;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_iOS_Tests;\n\t\t\tproductReference = CB77A637470A3CDA2BDDBE99 /* App_iOS_Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tE7454C10EA126A93537DD57E /* ExternalTarget */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D9EF39CA9A17477264F02057 /* Build configuration list for PBXNativeTarget \"ExternalTarget\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE3C67D44BD5D2820592267FD /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ExternalTarget;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = ExternalTarget;\n\t\t\tproductReference = 2385A62F6C6EE8D461EE19F2 /* ExternalTarget.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tE7815F2F0D9CDECF9185AAF3 /* XPC Service */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D379D1BBEF24ED05EB6ADEB3 /* Build configuration list for PBXNativeTarget \"XPC Service\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t20C333B691034362EAF1EE82 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"XPC Service\";\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = \"XPC Service\";\n\t\t\tproductReference = 22237B8EBD9E6BE8EBC8735F /* XPC Service.xpc */;\n\t\t\tproductType = \"com.apple.product-type.xpc-service\";\n\t\t};\n\t\tF674B2CFC4738EEC49BAD0DA /* App_iOS_UITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 68CC35789B0DB020E2CFC517 /* Build configuration list for PBXNativeTarget \"App_iOS_UITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7334BD12862A3CED4BE1C6B5 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t49587048934568C2182DA825 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = App_iOS_UITests;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = App_iOS_UITests;\n\t\t\tproductReference = 13EEAB58665D79C15184D9D0 /* App_iOS_UITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n\t\tFC26AF2506D3B2B40DE8A5F8 /* Framework2_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 02E5A42C8065AF7CCB48FACE /* Build configuration list for PBXNativeTarget \"Framework2_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5A0FEF527F632170E10430F5 /* Headers */,\n\t\t\t\t54CB4F4E5136170EA8B9AFA5 /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Framework2_macOS;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Framework2_macOS;\n\t\t\tproductReference = 2233774B86539B1574D206B0 /* Framework2.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t0FBAE303E3CFC2ABAC876A77 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = YES;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t020A320BB3736FCDE6CC4E70 = {\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t0867B0DACEF28C11442DE8F7 = {\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t91C3E922A8482E07649971B9 = {\n\t\t\t\t\t\tTestTargetID = D137C04B64B7052419A2DF4E;\n\t\t\t\t\t};\n\t\t\t\t\tBF3693DCA6182D7AEC410AFC = {\n\t\t\t\t\t\tCUSTOM = value;\n\t\t\t\t\t};\n\t\t\t\t\tF674B2CFC4738EEC49BAD0DA = {\n\t\t\t\t\t\tTestTargetID = 0867B0DACEF28C11442DE8F7;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tknownAssetTags = (\n\t\t\t\t\ttag1,\n\t\t\t\t\ttag2,\n\t\t\t\t);\n\t\t\t};\n\t\t\tbuildConfigurationList = D91E14E36EC0B415578456F2 /* Build configuration list for PBXProject \"Project\" */;\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 293D0FF827366B513839236A;\n\t\t\tminimizedProjectReferenceProxies = 1;\n\t\t\tpackageReferences = (\n\t\t\t\t4EDA79334592CBBA0E507AD2 /* XCRemoteSwiftPackageReference \"Swinject\" */,\n\t\t\t);\n\t\t\tpreferredProjectObjectVersion = 77;\n\t\t\tproductRefGroup = AC523591AC7BE9275003D2DB /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 087B848BD38A4D4CB228ED41 /* Products */;\n\t\t\t\t\tProjectRef = F192E783CCA898FBAA5C34EA /* AnotherProject */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD137C04B64B7052419A2DF4E /* App_Clip */,\n\t\t\t\t63BFF75AA22335E3DDD5E26A /* App_Clip_Tests */,\n\t\t\t\t91C3E922A8482E07649971B9 /* App_Clip_UITests */,\n\t\t\t\t0867B0DACEF28C11442DE8F7 /* App_iOS */,\n\t\t\t\tDC2F16BAA6E13B44AB62F888 /* App_iOS_Tests */,\n\t\t\t\tF674B2CFC4738EEC49BAD0DA /* App_iOS_UITests */,\n\t\t\t\t020A320BB3736FCDE6CC4E70 /* App_macOS */,\n\t\t\t\t71E2BDAC4B8E8FC2BBF75C55 /* App_macOS_Tests */,\n\t\t\t\tC0570E2FB50D830D8D423396 /* App_supportedDestinations */,\n\t\t\t\t208179651927D1138D19B5AD /* App_watchOS */,\n\t\t\t\t307AE3FA155FFD09B74AE351 /* App_watchOS Extension */,\n\t\t\t\tDA40AB367B606CCE2FDD398D /* BundleX */,\n\t\t\t\t271CAC331D24F4F7E12C819C /* BundleY */,\n\t\t\t\t0CE8BE7C80651629EC056066 /* CrossOverlayFramework_iOS */,\n\t\t\t\t2F4FEAEFD7EE82DC49D899FC /* CrossOverlayFramework_macOS */,\n\t\t\t\t3BF66A4668DFAF9338791F60 /* CrossOverlayFramework_tvOS */,\n\t\t\t\tC7F90FD0FAAF232B3E015D38 /* CrossOverlayFramework_watchOS */,\n\t\t\t\t428715FBC1D86458DA70CBDE /* DriverKitDriver */,\n\t\t\t\t9F551F66949B55E8328EB995 /* EndpointSecuritySystemExtension */,\n\t\t\t\tB61ED4688789B071275E2B7A /* EntitledApp */,\n\t\t\t\tE7454C10EA126A93537DD57E /* ExternalTarget */,\n\t\t\t\tCE7D183D3752B5B35D2D8E6D /* Framework2_iOS */,\n\t\t\t\tFC26AF2506D3B2B40DE8A5F8 /* Framework2_macOS */,\n\t\t\t\t8B9A14DC280CCE013CC86440 /* Framework2_tvOS */,\n\t\t\t\t6ED01BC471A8C3642258E178 /* Framework2_watchOS */,\n\t\t\t\tAE3F93DB94E7208F2F1D9A78 /* Framework_iOS */,\n\t\t\t\t53A3B531E3947D8A8722745E /* Framework_macOS */,\n\t\t\t\t536ACF18E4603B59207D43CE /* Framework_tvOS */,\n\t\t\t\t71B5187E710718C1A205D4DC /* Framework_watchOS */,\n\t\t\t\t700328EE1570207608D6ADB3 /* IncludedLegacy */,\n\t\t\t\t72C923899DE05F1281872160 /* Legacy */,\n\t\t\t\tAD28397BCC984F769EE8A937 /* NetworkSystemExtension */,\n\t\t\t\t13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */,\n\t\t\t\t578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */,\n\t\t\t\t93542A75A613F00FDB5C9C63 /* StaticLibrary_ObjC_tvOS */,\n\t\t\t\t7D3D92034F4F203C140574F0 /* StaticLibrary_ObjC_watchOS */,\n\t\t\t\t19BFB84599B0AA1275A9662D /* StaticLibrary_Swift */,\n\t\t\t\tBF3693DCA6182D7AEC410AFC /* SuperTarget */,\n\t\t\t\t0636AAF06498C336E1CEEDE4 /* TestFramework */,\n\t\t\t\t090315A24AC8E8B8F318A709 /* Tool */,\n\t\t\t\tE7815F2F0D9CDECF9185AAF3 /* XPC Service */,\n\t\t\t\t834F55973F05AC8A18144DB0 /* iMessageApp */,\n\t\t\t\t1C26A6A0BC446191F311D470 /* iMessageExtension */,\n\t\t\t\t192C574D74079A99AF1AD0B1 /* iMessageStickersExtension */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\tF6ADE654A3459AFDA2CC0CD3 /* ExternalTarget.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = ExternalTarget.framework;\n\t\t\tremoteRef = E231CFA00B56E5D8C57331C5 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1C008C34DA06FEE7841B0AC3 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCCA17097382757012B58C17C /* Assets.xcassets in Resources */,\n\t\t\t\t7148A4172BFA1CC22E6ED5DB /* MainInterface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4A6E8F3A477AA5F67A8EB733 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t803B7CE086CFBA409F9D1ED7 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t61001E265009194959C2CF36 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t212BCB51DAF3212993DDD49E /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t77D35586228BF8AB74152BB5 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF5D71267BB5A326BDD69D532 /* Assets.xcassets in Resources */,\n\t\t\t\t1BC891D89980D82738D963F3 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8508BA1B733839E314AF2853 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t447D59BE2E0993D7245EA247 /* Assets.xcassets in Resources */,\n\t\t\t\t94FD20C3EA5EBCEC8783740C /* GoogleService-Info.plist in Resources */,\n\t\t\t\tA9548E5DCFE92236494164DF /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t6E8F8303759824631C8D9DA3 /* Localizable.strings in Resources */,\n\t\t\t\tE5DD0AD6F7AE1DD4AF98B83E /* Localizable.stringsdict in Resources */,\n\t\t\t\t76F3F9A5E2A4623430374F31 /* LocalizableStrings.xcstrings in Resources */,\n\t\t\t\t2A7EB1A9A365A7EC5D49AFCF /* LocalizedStoryboard.storyboard in Resources */,\n\t\t\t\t49A4B8937BB5520B36EA33F0 /* Main.storyboard in Resources */,\n\t\t\t\t900CFAD929CAEE3861127627 /* MyBundle.bundle in Resources */,\n\t\t\t\tC88598A49087A212990F4E8B /* ResourceFolder in Resources */,\n\t\t\t\t61601545B6BE00CA74A4E38F /* SceneKitCatalog.scnassets in Resources */,\n\t\t\t\t28A96EBC76D53817AABDA91C /* Settings.bundle in Resources */,\n\t\t\t\tE8A135F768448632F8D77C8F /* StandaloneAssets.xcassets in Resources */,\n\t\t\t\t6F3848C1EF3E43A5AC2A4D40 /* TestIcon.icon in Resources */,\n\t\t\t\t818D448D4DDD6649B5B26098 /* example.mp4 in Resources */,\n\t\t\t\t2C7C03B45571A13D472D6B23 /* iMessageApp.app in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t97119CD9F01D9A9522EF3526 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2698ED273D0A5820B28CAD20 /* LaunchScreen.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAA12B5909FEE45016F469C78 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE1836941C13CC7F13650C317 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAFA07EE1616E0EE7065760C9 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t61516CAC12B2843FBC4572E6 /* Assets.xcassets in Resources */,\n\t\t\t\tB18C121B0A4D43ED8149D8E2 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t0F99AECCB4691803C791CDCE /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB7B71FA7D279029BF7A7FC7C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t52AD3276E068EB3396A292BB /* Assets.xcassets in Resources */,\n\t\t\t\t2B940E57041A72E6A39B6BF0 /* Interface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t194EE782F10A8F7ABD1A4AEB /* Copy Swift Objective-C Interface Header */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\",\n\t\t\t);\n\t\t\tname = \"Copy Swift Objective-C Interface Header\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"ditto \\\"${SCRIPT_INPUT_FILE_0}\\\" \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t};\n\t\t3D0637F4554EAD6FA48105BF /* MyScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = MyScript;\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"You ran a script\\\"\\n\";\n\t\t};\n\t\t43E9CD3CEA3FE8944C659368 /* MyScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = MyScript;\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"You ran a script\\\"\\n\";\n\t\t};\n\t\t71A4CC6ECC8522178F566E7B /* Strip Unused Architectures from Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\talwaysOutOfDate = 1;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Strip Unused Architectures from Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"################################################################################\\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\";\n\t\t};\n\t\t85D42C01B0821B87A49F32BD /* MyScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = MyScript;\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"You ran a script\\\"\\n\";\n\t\t};\n\t\tBA454AAC926EDFCDA9226CBC /* MyScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = MyScript;\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"You ran a script\\\"\\n\";\n\t\t};\n\t\tCBE633966E8F3819F15270A3 /* MyScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdependencyFile = \"$(DERIVED_FILE_DIR)/target.d\";\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\tApp_iOS/inputList.xcfilelist,\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = MyScript;\n\t\t\toutputFileListPaths = (\n\t\t\t\tApp_iOS/outputList.xcfilelist,\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"You ran a script!\\\"\\ntouch \\\"${DERIVED_FILE_DIR}/target.d\\\"\\n\";\n\t\t};\n\t\tCF3AABFD4A48983B322677DA /* MyScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = MyScript;\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"do the thing\\\"\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t077D11E42A8E90CAB8A95DF2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7A8C78212CEAC6452DFAB00E /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t20C333B691034362EAF1EE82 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tAFF19412E9B35635D3AF48CB /* XPC_Service.m in Sources */,\n\t\t\t\t4F6481557E2BEF8D749C37E3 /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t21327378A4B2AF2B952D6DF1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9AB50B81C29243936BB419E4 /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2235AD7DEFC8FE534AB91B38 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t265B6A05C0198FD2EB485173 /* main.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t247A4E3947EC2AFB733A1B00 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t75F2774F183838AF34CA9B8A /* StaticLibrary_ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2E1429F0FB524A2BCFC61DF1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2116F89CF5A04EA0EFA30A89 /* TestProjectUITests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3422D8A97652F33BA3AEAD6E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0932FB6FB887D7D6F7727CB7 /* Driver.cpp in Sources */,\n\t\t\t\tFB6DA0DB62C425066D51767E /* Driver.iig in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t40A4456A24F99A01E340C032 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t210B49C23B9717C668B40C8C /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t54CB4F4E5136170EA8B9AFA5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3133B36F3898A27A2B1C56FC /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5B3245836D7FA67E79EA1731 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t632774E7F21CCB386A76B2A8 /* MessagesViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6D2FCEFCAFB24526BD458A2D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t02F9D686CBA6068A8EE58026 /* StaticLibrary_ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6F11C066A401E4F02A1188EB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t15129B8D9ED000BDA1FEEC27 /* AppDelegate.swift in Sources */,\n\t\t\t\tC4378E3DAF5E0B2F7AB60E03 /* ViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6F573D15DE1F149EF128C492 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t09617AB755651FFEB2564CBC /* AppDelegate.swift in Sources */,\n\t\t\t\t1F9168A43FD8E2FCC2699E14 /* Documentation.docc in Sources */,\n\t\t\t\t666DEC173BC78C7641AB22EC /* File1.swift in Sources */,\n\t\t\t\t339578307B9266AB3D7722D9 /* File2.swift in Sources */,\n\t\t\t\tF788A3FA1CE6489BC257C1C3 /* Model.xcdatamodeld in Sources */,\n\t\t\t\t65B3BAC02D5FAE632719C984 /* Model.xcmappingmodel in Sources */,\n\t\t\t\t58C18019E71E372F635A3FB4 /* MoreUnder.swift in Sources */,\n\t\t\t\t5D10822B0E7C33DD6979F656 /* Standalone.swift in Sources */,\n\t\t\t\t87927928A8A3460166ACB819 /* SwiftFileInDotPath.swift in Sources */,\n\t\t\t\t2730C6D0A35AED4ADD6EDF17 /* ViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7334BD12862A3CED4BE1C6B5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t079B6E02AF21664AB08E621C /* TestProjectUITests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t82E24A8257F299AC04F44A8F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t84FEBA4F84620938800D12A4 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1EFFFE113C5E54A91148D3EB /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8A616537E6E1BEAB59E069C7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB9F3C9E77019EC3423A7F5D8 /* TestProjectTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8FD76C583F8C166F974F4BE2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD61BEABD5B26B2DE67D0C2EC /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t902C8700CD150C726365CB8A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9D80BD5FAE6BE61CFD74CF1B /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t96BB43F4706B031DA45166E8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2A5356FCC03EE312F1738C61 /* AppDelegate.swift in Sources */,\n\t\t\t\tD5458D67C3596943114C3205 /* Standalone.swift in Sources */,\n\t\t\t\tC3672B561F456794151C047C /* ViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9719917A0F173B1BCC95FBA1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tFF030751A47C85F082C7EDB9 /* TestProjectTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t97C367BB898AC3F3B2DB1DD8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7A0DABBEA55B06E148C665A8 /* StaticLibrary.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BFB2E19F4777ACBEF89589A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD8ED40ED61AD912385CFF5F0 /* StaticLibrary_ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9EC3C2991C5C1EE119E39533 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5447AD526B2A1FD4262E2B61 /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA000A0FFF2503ADC8D74D2DF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5748F702ADFB9D85D0F97862 /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA0FE01FFC2B5A9FD21A89874 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA87FBABC2AA10F8D044526BD /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6C02002A4EE169CEBEC7BA7F /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAE7971E1CA54D23C264E6541 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3C5134EE524310ACF7B7CD6E /* ExtensionDelegate.swift in Sources */,\n\t\t\t\tF7423E8738EECF04795C7601 /* InterfaceController.swift in Sources */,\n\t\t\t\tC836F09B677937EFF69B1FCE /* NotificationController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAF7B22EF5863A5280B535896 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC975C5F0085D232AF63E0F3E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t713F57A10C62F70058D7FB0A /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tCF8BAE171BAAFB2E5DDB9C19 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCAF8470C7F1BF207DBE6AEE3 /* ContentView.swift in Sources */,\n\t\t\t\t1B485D6584C3B47AC58831C6 /* ContentView.swift in Sources */,\n\t\t\t\tB358AB913543E62237FCC4E3 /* MyAppApp.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD1F422E9C4DD531AA88418C9 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t998CCB995347CBB8EDC95FB5 /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDEB2782C650F563EB8C62B28 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE0B27599D701E6BB0223D0A8 /* FilterDataProvider.swift in Sources */,\n\t\t\t\tA90C4C147AD175DB9F7B5114 /* main.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE3C67D44BD5D2820592267FD /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE9BE8745FD5B1ACBE43B9E0C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t03FFCE664129864A8F167C2F /* FrameworkFile.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEA88FE285DA490166635BE98 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3318F40C855184C18197ED30 /* StaticLibrary_ObjC.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEAFB6030AE5D2E4D9ACA6ECC /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCAE18A2194B57C830A297F83 /* main.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF39FAD4CC93306087D129EBD /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6B0BCD3573931F7BE133B301 /* TestProjectTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t053FF4219E7A0E38E90071B0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 1C26A6A0BC446191F311D470 /* iMessageExtension */;\n\t\t\ttargetProxy = C8FD369800D87311EC532712 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0C99705018337CE91AA34CBA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 6ED01BC471A8C3642258E178 /* Framework2_watchOS */;\n\t\t\ttargetProxy = 59BFAC272F73B46E97B74426 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0D33D01C71E8002A07F02122 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 208179651927D1138D19B5AD /* App_watchOS */;\n\t\t\ttargetProxy = 9636E133F9CACD17C56B7915 /* PBXContainerItemProxy */;\n\t\t};\n\t\t106CDB4BCFD183241A565E6C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = AE3F93DB94E7208F2F1D9A78 /* Framework_iOS */;\n\t\t\ttargetProxy = 2FA0A954833DB0981CDE58E1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1341A437B2D0402F4F4CEA51 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D137C04B64B7052419A2DF4E /* App_Clip */;\n\t\t\ttargetProxy = 0B37F7A37D610FCFE187A6B7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1652DB87B43B72B5DE0601C4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9F551F66949B55E8328EB995 /* EndpointSecuritySystemExtension */;\n\t\t\ttargetProxy = DD32A97CFD2016BF1477CF6C /* PBXContainerItemProxy */;\n\t\t};\n\t\t2D1B4333107E10912508724E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 0636AAF06498C336E1CEEDE4 /* TestFramework */;\n\t\t\ttargetProxy = 69E205A3F578A8FFE3ECF3F9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t35DF16CA4A1F88140CF69620 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 7D3D92034F4F203C140574F0 /* StaticLibrary_ObjC_watchOS */;\n\t\t\ttargetProxy = A7E63E75AAC31076E5090CAA /* PBXContainerItemProxy */;\n\t\t};\n\t\t3A31E571AF127F715E3B8A61 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 0867B0DACEF28C11442DE8F7 /* App_iOS */;\n\t\t\ttargetProxy = C9947CF0A436FC6113FC0837 /* PBXContainerItemProxy */;\n\t\t};\n\t\t486D84E583999BAA22C679EC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */;\n\t\t\ttargetProxy = 57FA84916D499216199F8C95 /* PBXContainerItemProxy */;\n\t\t};\n\t\t49587048934568C2182DA825 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 0867B0DACEF28C11442DE8F7 /* App_iOS */;\n\t\t\ttargetProxy = 469D922BE967C6D52ED84552 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4FA29DA80DA668224AED741F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ExternalTarget;\n\t\t\ttargetProxy = FF75DC967D1097BC31DCF5E6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t62DA64F61B337719A2CF993D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 307AE3FA155FFD09B74AE351 /* App_watchOS Extension */;\n\t\t\ttargetProxy = AC20E10997F6C1DBBA16C7A0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6AE62A40F64046B597B07801 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 0636AAF06498C336E1CEEDE4 /* TestFramework */;\n\t\t\ttargetProxy = C42BA4EA0239AF536F0F0993 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6BE35B7C058BE1B6F3B906C0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 428715FBC1D86458DA70CBDE /* DriverKitDriver */;\n\t\t\ttargetProxy = 6ED42BD51E8832232E58D9C1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7EFC0278E67CD35F8981993C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */;\n\t\t\ttargetProxy = DECF0B88B325A158E4E1D9AE /* PBXContainerItemProxy */;\n\t\t};\n\t\t8B1B6143B8996B3CF0FE61C5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 020A320BB3736FCDE6CC4E70 /* App_macOS */;\n\t\t\ttargetProxy = 610412261F48A0A36C32FC5C /* PBXContainerItemProxy */;\n\t\t};\n\t\t8B6243D8D47A6ADA4CA0D7BD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D137C04B64B7052419A2DF4E /* App_Clip */;\n\t\t\ttargetProxy = 25714659454527D9511C6093 /* PBXContainerItemProxy */;\n\t\t};\n\t\t981D116D40DBA0407D0E0E94 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 834F55973F05AC8A18144DB0 /* iMessageApp */;\n\t\t\ttargetProxy = 57F1BE74D4C4252529F97984 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA19BEE3154D879101F865BB2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D137C04B64B7052419A2DF4E /* App_Clip */;\n\t\t\ttargetProxy = 747773057270E6F58470B5FA /* PBXContainerItemProxy */;\n\t\t};\n\t\tA94F38390A74E215EC107BB5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tplatformFilter = ios;\n\t\t\ttarget = CE7D183D3752B5B35D2D8E6D /* Framework2_iOS */;\n\t\t\ttargetProxy = D3E1EE9F1E22A388123A116D /* PBXContainerItemProxy */;\n\t\t};\n\t\tAD555A4814F2D294E2AC72D8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 578C80E461E675508CED5DC3 /* StaticLibrary_ObjC_macOS */;\n\t\t\ttargetProxy = 2CA19347816754250A29DA32 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB95DA92D1265C094E71B4A5D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E7815F2F0D9CDECF9185AAF3 /* XPC Service */;\n\t\t\ttargetProxy = 8BAA7F3717FCBE0B8D6669B3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBE9300E427142E634A8A91B8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = AE3F93DB94E7208F2F1D9A78 /* Framework_iOS */;\n\t\t\ttargetProxy = 7E37A3C0A67C3B6363029A18 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCE96B0951433713033A03DCD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 93542A75A613F00FDB5C9C63 /* StaticLibrary_ObjC_tvOS */;\n\t\t\ttargetProxy = CB8F4B3FDD84A2A6F3CA7F4C /* PBXContainerItemProxy */;\n\t\t};\n\t\tCFEACC1CED73B52EA1CCD054 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */;\n\t\t\ttargetProxy = 01630C98B755921A79418B08 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD19F2660FAD44CCC4390265C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 0867B0DACEF28C11442DE8F7 /* App_iOS */;\n\t\t\ttargetProxy = 3A81C6D6875469889D53A2C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD6C733BEB62EAA62CCC68556 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8B9A14DC280CCE013CC86440 /* Framework2_tvOS */;\n\t\t\ttargetProxy = 45907115465077029040BF29 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE84285243DE0BB361A708079 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = AE3F93DB94E7208F2F1D9A78 /* Framework_iOS */;\n\t\t\ttargetProxy = FAFAEB2DDD9CCD218336D267 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE8C078B0A2A2B0E1D35694D5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13E8C5AB873CEE21E18E552F /* StaticLibrary_ObjC_iOS */;\n\t\t\ttargetProxy = 02FC8A8CFD5676EA402CCCBC /* PBXContainerItemProxy */;\n\t\t};\n\t\tF3930A0708A7EB1BDA25B31B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 53A3B531E3947D8A8722745E /* Framework_macOS */;\n\t\t\ttargetProxy = 7F4EAACE4AD6CF285B7D3308 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF7532D3474E04037FF26E9BC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = AD28397BCC984F769EE8A937 /* NetworkSystemExtension */;\n\t\t\ttargetProxy = D4A7C57F6272F44F2E69A5DB /* PBXContainerItemProxy */;\n\t\t};\n\t\tFD2D68EC95DC231C4007FB08 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ExternalTarget;\n\t\t\ttargetProxy = CA16090DFCA7842CB4E20265 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t0C6BA0D12467A13EC012C728 /* LocalizedStoryboard.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tB17B8D9C9B391332CD176A35 /* Base */,\n\t\t\t\t0B193CC6D2B3003418A550B6 /* en */,\n\t\t\t);\n\t\t\tname = LocalizedStoryboard.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2FC2A8A829CE71B1CF415FF7 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t3096A0760969873D46F80A92 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t65C8D6D1DDC1512D396C07B7 /* Localizable.stringsdict */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE42335D1200CB7B8B91E962F /* Base */,\n\t\t\t\t020E4DA91C9132845CAFDC5D /* en */,\n\t\t\t);\n\t\t\tname = Localizable.stringsdict;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t74FBDFA5CB063F6001AD8ACD /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t814822136AF3C64428D69DD6 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t753001CDCEAA4C4E1AFF8E87 /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tFA86D418796C1A6864414460 /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t79325B44B19B83EC6CEDBCC5 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tF15E5C60B7E05D06B1B8E18E /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t814D72C2B921F60B759C2D4B /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5116B3B58070BCD09F1487BA /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9E17D598D98065767A04740F /* Localizable.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t7C176A8297AC2F5207352BA8 /* Base */,\n\t\t\t\tD6C89D80B5458D8929F5C127 /* en */,\n\t\t\t);\n\t\t\tname = Localizable.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC872631362DDBAFCE71E5C66 /* Interface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t7FDC16E1938AA114B67D87A9 /* Base */,\n\t\t\t);\n\t\t\tname = Interface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCE1F06D99242F4223D081F0D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t57FF8864B8EBAB5777DC12E6 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t00AF278082A5D7C2A6555867 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t00FD318C7418F3351FC00744 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = App_watchOS/Info.plist;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t015D35ADD269DCBEA53B52A3 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t01BF8C6D1C21955BA7E803E8 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-macOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t02E38E444E372E89E589E022 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-tvOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t02EB0C0230E6616EC8057F1C /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-macOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t035FC5362AE3E9696248DFD0 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"DriverKit Driver/Driver.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDRIVERKIT_DEPLOYMENT_TARGET = 20.4;\n\t\t\t\tINFOPLIST_FILE = \"DriverKit Driver/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.Driver\";\n\t\t\t\tSDKROOT = driverkit;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t03B133682B8BEF8B1D647C76 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"DriverKit Driver/Driver.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDRIVERKIT_DEPLOYMENT_TARGET = 20.4;\n\t\t\t\tINFOPLIST_FILE = \"DriverKit Driver/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.Driver\";\n\t\t\t\tSDKROOT = driverkit;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t04172E0BDC7C512A23A51C76 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_iOS;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t045CB2D74D9A3532E128BDD2 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t0579BA94EA238151DAFC2FFC /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;\n\t\t\t\tINFOPLIST_FILE = App_Clip/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.clip;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t058734C3B593A26E24211133 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-watchOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t06D6C7ED89937E7891E70B55 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"EndpointSecurity Extension/EndpointSecurity.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"EndpointSecurity Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.EndpointSecurity\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t06E4383A2687EAD5877836CD /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_iOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t079E494F34C3CAFB8F9E44B3 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t07DF024D82D64A8D76209B90 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_Clip_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_Clip;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t082A10B9E5EAC6E783EAB9B0 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_iOS;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t0AB9030B7E8A8BBA74CCB1A9 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_iOS;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t0C18EEAE68FBEBCF066E0CD9 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Network Extension/NetworkExtension.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"Network Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.NetworkExtension\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t0C66F8A2D0CB0D802A327EB4 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;\n\t\t\t\tINFOPLIST_FILE = \"App_watchOS Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t0CE2F7B8A955BE108A66FF68 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-macOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t0EFE33A4C09DCF9FE1519D37 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t10E250D1DC79E11058B933F9 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t11919FD24AA8A110C24C0FEF /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"EndpointSecurity Extension/EndpointSecurity.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"EndpointSecurity Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.EndpointSecurity\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t12BCDE0EFCEE621B881E424C /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = App_macOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS-Tests\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t1341099486D8FE68A99CB5FE /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-macOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t13FF53C2B3637EA82E3DF577 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-iOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t1539437BBB98703535876E35 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;\n\t\t\t\tINFOPLIST_FILE = \"App_watchOS Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t15A9BF8518A5155B879C8DAF /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t15F79278F4ABD33584FC69E4 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tINFOPLIST_FILE = iMessageExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t184E4078B13FE1CC6A11BD52 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_iOS;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t18B5349AE18B7183BE4B4363 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t196FEEE6C4B0DDE53AD16BD6 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"App_macOS/App-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t19BF18E6EAA8B30F894EAB4E /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-watchOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t1C63C4A728212D903E4F2CBB /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-iOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t1C644E47F1C539F2B95160B8 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-watchOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t1D61DC7F5309F4C8B7692D85 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-Swift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t1FB2AFB2F45076B4A047499E /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-iOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t20803EC42C26E4EA13474E5A /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = App_watchOS/Info.plist;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t221A50372FFB2F1202940FDC /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t234640A811EF6EB9CC9081CA /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t236247F0F85C9D342FAEE803 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t24CFBB3ABB9E14E85035B892 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_supportedDestinations/Info.generated.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.test.TestApp;\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator appletvos appletvsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t2569D399CA3C4828EF87AD78 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t25E62244CD9C539F614224DF /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t2630B88F53876A9AD7B61A4E /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"XPC Service/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t26BACA32C62C38FAB45F532D /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tMY_SETTING = hello;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t278E3C762E54ADDA52F9E687 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-tvOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t291A37106E83E5C30890F422 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"DriverKit Driver/Driver.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDRIVERKIT_DEPLOYMENT_TARGET = 20.4;\n\t\t\t\tINFOPLIST_FILE = \"DriverKit Driver/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.Driver\";\n\t\t\t\tSDKROOT = driverkit;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t2C6AB16720ADFB2436337A8F /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t2E5159957368A9CF77A3C9FC /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t2F1CDD64CD0684A2B09D6ED3 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t2F88193D8069519CD36F649B /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t31931061043C66589547105C /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t321D6FAF1E7AA977008359C7 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-tvOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t3236B7B20520584116A96C0D /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_Clip_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_Clip;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t34ED16009A759D256D7ECB53 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-macOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t366C92A637FDA940E6BCB591 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tINFOPLIST_FILE = iMessageExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t36C4B3A6EACCB88098CE13D7 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-tvOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t3764AEC1D64BC7805DC73900 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-Swift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t3BDE7967B50F4358BD4702AD /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_Clip_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_Clip;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t3BE60579CA725E23659AEA80 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;\n\t\t\t\tINFOPLIST_FILE = App_Clip/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.clip;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t3DEEA480EDDC83405CFB9BBA /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t3FFEE1ED324166B88F5F9A45 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"App_macOS/App-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t401097AC487BBA8C7B2B4938 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t4089B74CA10172B8ED2D004B /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t40A3301910021B57051D1BD5 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tMY_SETTING = hello;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t414544E2FA4DE102442A71CD /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleY;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t436FB4981A66822DAF6F22AC /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t43C2B4D01A14EF502D0F0113 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t44C2FD12D7D26D71D8150C76 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = App_macOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS-Tests\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t45FD151DC9928DE066A3B1AD /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-watchOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t4621C6C8A78FBB1CF4078178 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"App_macOS/App-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t4662A9062E19E6BC30C9E0A1 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tINFOPLIST_FILE = iMessageExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t46DAC1602BF6BEBCD177342F /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"EndpointSecurity Extension/EndpointSecurity.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"EndpointSecurity Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.EndpointSecurity\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t49322BF02F4F345A1339EF7A /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-watchOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t498F2DC7204423CCCABAEE80 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_Clip_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_Clip;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t4A0624A4FC88A7E232411C95 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t4B389C6B6140EE7DE69A248A /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t4BCE080A33E3A2F26D1DBEEB /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;\n\t\t\t\tINFOPLIST_FILE = \"App_watchOS Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t4C11A3E7EA48B5FB556D4614 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_supportedDestinations/Info.generated.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.test.TestApp;\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator appletvos appletvsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t4D5DC2028DC046B8AF0B9B83 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-watchOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t4D86BBA6893D41140152B8CC /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t4DA924C751AD8FAF891F953D /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"DriverKit Driver/Driver.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDRIVERKIT_DEPLOYMENT_TARGET = 20.4;\n\t\t\t\tINFOPLIST_FILE = \"DriverKit Driver/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.Driver\";\n\t\t\t\tSDKROOT = driverkit;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t4EBCDEB4013FDB0720343467 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;\n\t\t\t\tINFOPLIST_FILE = \"App_watchOS Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t4EDC77FA8569D4AB3135780D /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;\n\t\t\t\tINFOPLIST_FILE = App_Clip/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.clip;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t4F029A78B7BAB85B1E284798 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = App_macOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS-Tests\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t4FA4DE89FDED9F49FAABED58 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = App_macOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS-Tests\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t511E983641E821858100107B /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t5180F6C101C0335213FB28E5 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t522E20DF286BE38B925CC57E /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t53C3CC585BF0EAB4CA31AD3E /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t545342CFDF7810F2EBFFFC5E /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_iOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t554E51BF9C8020AFC98E2EEF /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_Clip_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_Clip;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t55DA94C85E0E63D3AD593A08 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t5675C7C51DC1B8D63CBAE30A /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t57CEA8537C6F3E5B425C5A8E /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t580039D71F71A98572051157 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t5822FCD48FCC177980F672D4 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t5876AA17762F3248F4FD66E1 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t589D05992FDC35F6BE056958 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t59416DBF97224D8A1B28D610 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageStickers/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t5A9C67C1F423247AE1541F63 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t5B13119724286962FB8C78CE /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t5FAA92426D53E239CDB39102 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;\n\t\t\t\tINFOPLIST_FILE = \"App_watchOS Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t62F50207E03F6D9813514977 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t64BEC335CD4016B9BC59F3C9 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"XPC Service/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t64EC1B53D612851D51D18FD2 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t65A21512F2B980615DF51D77 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t6645E6A343F71C3E91656BE9 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tINFOPLIST_FILE = iMessageExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t66DBF782276810342031776D /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-Swift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t6A11812952F34525D14A4104 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-iOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t6B5A31340B8CF5849805CA3D /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"XPC Service/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t6C201A244077B7B453E15C1A /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t6E93ACBBB608F386C0EB0F40 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-iOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t6FCE7B896519D4B364BD3A71 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-macOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t71529460FB00BCDF2064C57F /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleY;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t72EDF2E14A4CE916F4E2B01B /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t74E52B213DA9EAFA77BC05D0 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-watchOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t75B3C83C754AA9C12ABF5E54 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_supportedDestinations/Info.generated.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.test.TestApp;\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator appletvos appletvsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t77B8B41EBA5D778EB3AF89DC /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t77C426E60C6FCB5A01EFC401 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Network Extension/NetworkExtension.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"Network Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.NetworkExtension\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t7931F229200F89B8CDC8A5E3 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_iOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t79FA19BACBA7B6C15E0399C0 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tINFOPLIST_FILE = iMessageExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t7B2A1BE6CA654E9903A4C680 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = App_watchOS/Info.plist;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t7B4F942EA48FC1FED21AA2EE /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t7C473021DB2A2D88B535FBD6 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t7C9FE720B05E0120F78B81AF /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;\n\t\t\t\tINFOPLIST_FILE = App_Clip/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.clip;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t7D73A7FB339A39293BD2DB9E /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleY;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t7E101F97604A0990174A46CD /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"XPC Service/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t7E81F863EF51334FDDCC8A39 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-watchOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t7F3F6A813F8B126258780E8D /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_supportedDestinations/Info.generated.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.test.TestApp;\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator appletvos appletvsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t7F86E00770E76CA3412A03BD /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-watchOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t817AFA080A41D783F5801C5A /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-tvOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t81AE120E23F0108E77BBCE22 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t8269ABE82BCBF550C38494DF /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t84404129017F8D027A24136A /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;\n\t\t\t\tINFOPLIST_FILE = App_Clip/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.clip;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t85E6B40848AC2A0B1F921553 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t862658ACA3BF7AE7FA22870C /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"iMessage App Icon\";\n\t\t\t\tINFOPLIST_FILE = iMessageExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp.extension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t86BDA2C16646B065BDE01177 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"EndpointSecurity Extension/EndpointSecurity.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"EndpointSecurity Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.EndpointSecurity\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t8705629C56ACC795F1DDB96D /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-macOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t8A380D322263800338FA5139 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t8BAC4B81735DDF8537709B8D /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Network Extension/NetworkExtension.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"Network Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.NetworkExtension\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t8C9F67C7AA56DBE79F0F2640 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t8FEAEB3CB45479405F52D3AF /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-tvOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t917341F64B3A9B883FE942AD /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t921EC740167F616C38809275 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t924BB9ED8B14A02ABF88CC23 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleY;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t92602C025633FBA848F91812 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-macOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t94295771D06A8E3DC6DCC8AD /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t943D402E936EC5BD391F9FD0 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"App_macOS/App-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t94C7D2D3D0907DF146EFC13C /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-macOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t94ECCEFE29DB30C48B227A16 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t96130B9B35FEC2FEA00AFDB9 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-macOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t9666BFAAA42CE2DC7E368E7D /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t96B8ADD171694B9A9E3ABC7E /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-tvOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t97009625463EC8B19F53007A /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"App_macOS/App-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t982EA5A9273899567804B40D /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\t983ACA9F991B0B18D9760B12 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t98A87959E6B7464168469594 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t98EE00BF46FAE62F16C25E9C /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_supportedDestinations/Info.generated.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.test.TestApp;\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator appletvos appletvsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\t9A891313A139893990989BDD /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\t9AFD84FE41E84631927FC891 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\t9E0CC963DE7E2ED71A4C16C1 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageStickers/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t9E1F620F233A34DE80D84356 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-tvOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\t9E38571B33C3CE5CA10C8452 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\t9FCB2F3977FC0F94393F86FE /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-Swift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tA0AA826373CDC7E0A8797430 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-Swift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tA0C50DBBF4AC5D30C92B19F7 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageStickers/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tA0CBB78FB8E4FB0004B05DE0 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tA2EBD902E6DE2B2BD12C4484 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"XPC Service/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tA4015127D0A01FE60CF5621B /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_supportedDestinations/Info.generated.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.test.TestApp;\n\t\t\t\tSDKROOT = auto;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator appletvos appletvsimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2,3\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tA59DDFBFCF18C44A993CFB00 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tA696B22A9734326DBFD20EC8 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tMY_SETTING = hello;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tA79632AF4FFC93B0940CE8E3 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tMY_SETTING = hello;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tA861DE7670417FA256F4E459 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tA91B13C5688E9BCC925C702A /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tA9483E827FAD142F28A0E16D /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-iOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tAA4F4236D960D3ACE683A815 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-iOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tAA6BC5199D9705F3182D0C00 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"DriverKit Driver/Driver.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDRIVERKIT_DEPLOYMENT_TARGET = 20.4;\n\t\t\t\tINFOPLIST_FILE = \"DriverKit Driver/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.Driver\";\n\t\t\t\tSDKROOT = driverkit;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tAABC1E325EADF86C5137D659 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = App_watchOS/Info.plist;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tAB455120CB69CF0A7E128221 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Network Extension/NetworkExtension.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"Network Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.NetworkExtension\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tAC8E8FEA35961580D23185B2 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"XPC Service/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.XPCService;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tAE37A01B34B4B956E784082C /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_iOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tAE8DA78BA7A7194BD625DD45 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tAF25BBA6E0AD56CA13A3F6C6 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tAF3DD6DCF141F35D4129FFF5 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tAF4B5E2FF8B6C883C40737C6 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tB008685BA25BB8FD771F0AE3 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_iOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tB18D58177F363DF071A9AF95 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tB227B91964080DEF6C426483 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleY;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tB24243F387A725EAFE802321 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-watchOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tB3B2FEA08FA4ACD18FDF9BC2 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tB4297CD61108CE066C299844 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageStickers/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tB4464446E556BA3E731D3D25 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-tvOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tB5E1584A197C52FC47245FC8 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tB7EBD1A3A3A7E66100F5C845 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tB8CC52B6DC03DACD9B1309E0 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-watchOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tB928E061A126AC8D17D81D1E /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tB987E9BED4B423A049202386 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Network Extension/NetworkExtension.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"Network Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.NetworkExtension\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tB9AF2E89FE3E9E03E0029607 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tB9BEDF424FEFB1047765C3C6 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tBA21E149424C2D03E5E50EC1 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleY;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tBA5AD3137CD90C50E5E1BDA0 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tBBA736CF3FB466E323EA8462 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_iOS;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tBF2F04729CC0602591655B25 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageStickers/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tC00DBF60DC8C1A570738241F /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tC0BE0797A2AD213D59FF13F8 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tC0D5765142C68AF68B954B3F /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tC4397CDA0D458BAD55C911B0 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = App_watchOS/Info.plist;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tC44EBD74DF4B95E30983A798 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"EndpointSecurity Extension/EndpointSecurity.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"EndpointSecurity Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.EndpointSecurity\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tC59E649CEDC0E973B28B57A4 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .test;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tC6891AC5A8D8021B47DD852F /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tC734956B0E352751B5DA14A6 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_Clip/Clip.entitlements;\n\t\t\t\tINFOPLIST_FILE = App_Clip/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.clip;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tC745E36B41A4ABD1E24A69AF /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.external;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tC7EF8D96FA7893ADD61CF4C0 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_iOS.app/App_iOS\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tC96EA1AD4B3ABB8A49B98BC2 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tC9D8E28D29695DF97266F229 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-tvOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tCA08CB7E7DBBC99CDC7F2C2E /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-iOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tCA45EC48C1EDE1A41141A103 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Tool;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tCB4F81A519CA89CAF5703DAB /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tCBE9D80AD0719511A13A889E /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"App_macOS/App-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tCF25791E297417E38800A521 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-macOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tCF7D27DBBF0667D789D53D29 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"DriverKit Driver/Driver.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDRIVERKIT_DEPLOYMENT_TARGET = 20.4;\n\t\t\t\tINFOPLIST_FILE = \"DriverKit Driver/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.Driver\";\n\t\t\t\tSDKROOT = driverkit;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tD24E68EE5DE052219B036D63 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-iOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tD37EB6FE8C8C4040A394F1E9 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tMY_SETTING = hello;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tD4A6D5FE11C6652E092629BF /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tD70B7AB6D219453ABF475EED /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tD8267FD376089FF4497ED3F1 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tD93982FB34335E2D1B9751FE /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"EndpointSecurity Extension/EndpointSecurity.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"EndpointSecurity Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.EndpointSecurity\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tD9A0609EE6F341CD4E8758C1 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tDC80DC0AF0B4F2B51DAB0A52 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = App_iOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tDDECE7D81A63C1C46A08F1F4 /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = App_iOS/App.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.EntitledApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tDE81296F5A364B236643A3B9 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-watchOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tDF558E25A4E143219DF4AA51 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tE0DF26EA764106961DEC59C9 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-iOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tE24703CFCCBD727B3FE08F51 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tE29961CFB084F6C1BF2CCCAE /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .staging;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tE3E69C722D5BBAF4C8EF4D29 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tE3F181704254174DA162D2C7 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.TestFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tE3FC19CE2B78DA85314CB6A5 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-iOS-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_iOS;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tE4257B4F823EE947AADAD195 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-tvOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tE514F031B181A327296DB27B /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework-watchOS\";\n\t\t\t\tPRODUCT_NAME = Framework;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tE5854B94A71A091D61E6ACD3 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-tvOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tE599549D1B1432302031A904 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.Legacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tE5EB6CE05568645829D40384 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = CrossOverlayFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.CrossOverlayFramework-iOS\";\n\t\t\t\tPRODUCT_NAME = CrossOverlayFramework;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tE683F74557A3FC7BD78CAB2B /* Production Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Debug\";\n\t\t};\n\t\tE7E05E5BC42C73136CDC5CFE /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tE8F5F216BCFE54CB22B80237 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_iOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-Tests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_Clip.app/App_Clip\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tE95B2CE470959F04BE6AACA9 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 16D662EE577E4CD6AFF39D66 /* config.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .test;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tE9C964F0189C68721012002B /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Network Extension/NetworkExtension.entitlements\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = \"Network Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS.NetworkExtension\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tEA62022185E4BCDA6786EC0D /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tEBA3332D0144AAAA57630865 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.BundleX;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tEBD2F70285E21FFAB1C23D01 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = App_macOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS-Tests\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tEC3A16C2887B72837F84904A /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-macOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tEC9867399E6694681F8903B1 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-ObjC-iOS\";\n\t\t\t\tPRODUCT_NAME = StaticLibrary_ObjC;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tEDAF427566F715F739A4A1E1 /* Production Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Production Release\";\n\t\t};\n\t\tEF6AB18F2D803CB530422BAE /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.IncludedLegacy;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tF3AC6A112F81D0958A316D82 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = App_watchOS/Info.plist;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tF443D526C71E9F3481F46EC0 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-macOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tF48A0BCE0F515E3472B34F66 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = App_Clip_UITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-Clip-UITests\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_TARGET_NAME = App_Clip;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tF75CC02D1BB9B39C329A9B43 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;\n\t\t\t\tINFOPLIST_FILE = \"App_watchOS Extension/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.app.watch.extension;\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tF961247BCE59D147388CA721 /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageApp;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tF9AA169AF7F8FB31037CB416 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tMY_SETTING = hello;\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tF9F2DA45FBEAF1528EC026FB /* Test Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-tvOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Test Release\";\n\t\t};\n\t\tFB472DFA702C8A3B55153F97 /* Staging Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tINFOPLIST_FILE = App_macOS_Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.App-macOS-Tests\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/App_macOS.app/Contents/MacOS/App_macOS\";\n\t\t\t};\n\t\t\tname = \"Staging Debug\";\n\t\t};\n\t\tFBC34FE61DA25D0516C15B60 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_ID_SUFFIX = .staging;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 4.0;\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tFC4A8130B924FC04E9190AB6 /* Test Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = iMessageStickers/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.project.iMessageStickersExtension;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Test Debug\";\n\t\t};\n\t\tFE029D76C57D0661E4B8F13B /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Framework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.Framework2-iOS\";\n\t\t\t\tPRODUCT_NAME = Framework2;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n\t\tFE46BDDF158F46B264958EA5 /* Staging Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.project.StaticLibrary-Swift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = \"Staging Release\";\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t0129D8A8DCD54069136D90F7 /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB24243F387A725EAFE802321 /* Production Debug */,\n\t\t\t\t7E81F863EF51334FDDCC8A39 /* Production Release */,\n\t\t\t\t74E52B213DA9EAFA77BC05D0 /* Staging Debug */,\n\t\t\t\t7F86E00770E76CA3412A03BD /* Staging Release */,\n\t\t\t\t49322BF02F4F345A1339EF7A /* Test Debug */,\n\t\t\t\t058734C3B593A26E24211133 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t02B721AF7361EBCFA91410BF /* Build configuration list for PBXLegacyTarget \"IncludedLegacy\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t221A50372FFB2F1202940FDC /* Production Debug */,\n\t\t\t\tAF4B5E2FF8B6C883C40737C6 /* Production Release */,\n\t\t\t\tD4A6D5FE11C6652E092629BF /* Staging Debug */,\n\t\t\t\tEF6AB18F2D803CB530422BAE /* Staging Release */,\n\t\t\t\t57CEA8537C6F3E5B425C5A8E /* Test Debug */,\n\t\t\t\t8A380D322263800338FA5139 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t02E5A42C8065AF7CCB48FACE /* Build configuration list for PBXNativeTarget \"Framework2_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t15A9BF8518A5155B879C8DAF /* Production Debug */,\n\t\t\t\t9AFD84FE41E84631927FC891 /* Production Release */,\n\t\t\t\t8269ABE82BCBF550C38494DF /* Staging Debug */,\n\t\t\t\tF443D526C71E9F3481F46EC0 /* Staging Release */,\n\t\t\t\tA59DDFBFCF18C44A993CFB00 /* Test Debug */,\n\t\t\t\t5675C7C51DC1B8D63CBAE30A /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t07B4E73E56B7C2C80DE2A378 /* Build configuration list for PBXNativeTarget \"App_Clip\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC734956B0E352751B5DA14A6 /* Production Debug */,\n\t\t\t\t3BE60579CA725E23659AEA80 /* Production Release */,\n\t\t\t\t84404129017F8D027A24136A /* Staging Debug */,\n\t\t\t\t4EDC77FA8569D4AB3135780D /* Staging Release */,\n\t\t\t\t7C9FE720B05E0120F78B81AF /* Test Debug */,\n\t\t\t\t0579BA94EA238151DAFC2FFC /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t129D9E77D45A66B1C78578F2 /* Build configuration list for PBXNativeTarget \"App_Clip_UITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t07DF024D82D64A8D76209B90 /* Production Debug */,\n\t\t\t\t3236B7B20520584116A96C0D /* Production Release */,\n\t\t\t\tF48A0BCE0F515E3472B34F66 /* Staging Debug */,\n\t\t\t\t554E51BF9C8020AFC98E2EEF /* Staging Release */,\n\t\t\t\t3BDE7967B50F4358BD4702AD /* Test Debug */,\n\t\t\t\t498F2DC7204423CCCABAEE80 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t1FC6945BE13C2202A2BCA3BC /* Build configuration list for PBXNativeTarget \"iMessageApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t511E983641E821858100107B /* Production Debug */,\n\t\t\t\tEA62022185E4BCDA6786EC0D /* Production Release */,\n\t\t\t\t5876AA17762F3248F4FD66E1 /* Staging Debug */,\n\t\t\t\t4D86BBA6893D41140152B8CC /* Staging Release */,\n\t\t\t\t6C201A244077B7B453E15C1A /* Test Debug */,\n\t\t\t\tF961247BCE59D147388CA721 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t2C39D94CF9C8B1CB79F04AC8 /* Build configuration list for PBXNativeTarget \"BundleX\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t64EC1B53D612851D51D18FD2 /* Production Debug */,\n\t\t\t\t917341F64B3A9B883FE942AD /* Production Release */,\n\t\t\t\t31931061043C66589547105C /* Staging Debug */,\n\t\t\t\tEBA3332D0144AAAA57630865 /* Staging Release */,\n\t\t\t\t85E6B40848AC2A0B1F921553 /* Test Debug */,\n\t\t\t\tB7EBD1A3A3A7E66100F5C845 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t3F3C272D2EA61F6B88B80D44 /* Build configuration list for PBXNativeTarget \"App_watchOS Extension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4EBCDEB4013FDB0720343467 /* Production Debug */,\n\t\t\t\t4BCE080A33E3A2F26D1DBEEB /* Production Release */,\n\t\t\t\t1539437BBB98703535876E35 /* Staging Debug */,\n\t\t\t\tF75CC02D1BB9B39C329A9B43 /* Staging Release */,\n\t\t\t\t5FAA92426D53E239CDB39102 /* Test Debug */,\n\t\t\t\t0C66F8A2D0CB0D802A327EB4 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t412FA71CA97AD6851A1828DD /* Build configuration list for PBXNativeTarget \"DriverKitDriver\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t035FC5362AE3E9696248DFD0 /* Production Debug */,\n\t\t\t\t03B133682B8BEF8B1D647C76 /* Production Release */,\n\t\t\t\t291A37106E83E5C30890F422 /* Staging Debug */,\n\t\t\t\tCF7D27DBBF0667D789D53D29 /* Staging Release */,\n\t\t\t\tAA6BC5199D9705F3182D0C00 /* Test Debug */,\n\t\t\t\t4DA924C751AD8FAF891F953D /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t498FA7414845B8834E48496F /* Build configuration list for PBXNativeTarget \"App_Clip_Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD70B7AB6D219453ABF475EED /* Production Debug */,\n\t\t\t\tE7E05E5BC42C73136CDC5CFE /* Production Release */,\n\t\t\t\tE8F5F216BCFE54CB22B80237 /* Staging Debug */,\n\t\t\t\tC0BE0797A2AD213D59FF13F8 /* Staging Release */,\n\t\t\t\t2E5159957368A9CF77A3C9FC /* Test Debug */,\n\t\t\t\tA0CBB78FB8E4FB0004B05DE0 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t4A036BD16A0E9D22AE065AC9 /* Build configuration list for PBXNativeTarget \"StaticLibrary_Swift\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9FCB2F3977FC0F94393F86FE /* Production Debug */,\n\t\t\t\t3764AEC1D64BC7805DC73900 /* Production Release */,\n\t\t\t\t66DBF782276810342031776D /* Staging Debug */,\n\t\t\t\tFE46BDDF158F46B264958EA5 /* Staging Release */,\n\t\t\t\tA0AA826373CDC7E0A8797430 /* Test Debug */,\n\t\t\t\t1D61DC7F5309F4C8B7692D85 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t4A8774E3B4F5C9B98E0D0CF9 /* Build configuration list for PBXNativeTarget \"Framework_watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE514F031B181A327296DB27B /* Production Debug */,\n\t\t\t\t9666BFAAA42CE2DC7E368E7D /* Production Release */,\n\t\t\t\tB928E061A126AC8D17D81D1E /* Staging Debug */,\n\t\t\t\t015D35ADD269DCBEA53B52A3 /* Staging Release */,\n\t\t\t\tC96EA1AD4B3ABB8A49B98BC2 /* Test Debug */,\n\t\t\t\tD9A0609EE6F341CD4E8758C1 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t50DA67E9A951C40D9536609D /* Build configuration list for PBXNativeTarget \"Framework_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t81AE120E23F0108E77BBCE22 /* Production Debug */,\n\t\t\t\t580039D71F71A98572051157 /* Production Release */,\n\t\t\t\t55DA94C85E0E63D3AD593A08 /* Staging Debug */,\n\t\t\t\t62F50207E03F6D9813514977 /* Staging Release */,\n\t\t\t\t8C9F67C7AA56DBE79F0F2640 /* Test Debug */,\n\t\t\t\tA861DE7670417FA256F4E459 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t56BF985F253DD84AD7C37538 /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t13FF53C2B3637EA82E3DF577 /* Production Debug */,\n\t\t\t\tD24E68EE5DE052219B036D63 /* Production Release */,\n\t\t\t\t6A11812952F34525D14A4104 /* Staging Debug */,\n\t\t\t\tAA4F4236D960D3ACE683A815 /* Staging Release */,\n\t\t\t\tEC9867399E6694681F8903B1 /* Test Debug */,\n\t\t\t\tCA08CB7E7DBBC99CDC7F2C2E /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t5EC789CCE1928A4CDA00DD1E /* Build configuration list for PBXNativeTarget \"App_supportedDestinations\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t24CFBB3ABB9E14E85035B892 /* Production Debug */,\n\t\t\t\t7F3F6A813F8B126258780E8D /* Production Release */,\n\t\t\t\t4C11A3E7EA48B5FB556D4614 /* Staging Debug */,\n\t\t\t\t75B3C83C754AA9C12ABF5E54 /* Staging Release */,\n\t\t\t\tA4015127D0A01FE60CF5621B /* Test Debug */,\n\t\t\t\t98EE00BF46FAE62F16C25E9C /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t62C52A55CB8D3BD9A055FD14 /* Build configuration list for PBXNativeTarget \"App_macOS_Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4F029A78B7BAB85B1E284798 /* Production Debug */,\n\t\t\t\t4FA4DE89FDED9F49FAABED58 /* Production Release */,\n\t\t\t\tFB472DFA702C8A3B55153F97 /* Staging Debug */,\n\t\t\t\tEBD2F70285E21FFAB1C23D01 /* Staging Release */,\n\t\t\t\t44C2FD12D7D26D71D8150C76 /* Test Debug */,\n\t\t\t\t12BCDE0EFCEE621B881E424C /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t62D7BB889799B73F7E8B798F /* Build configuration list for PBXNativeTarget \"App_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tAE37A01B34B4B956E784082C /* Production Debug */,\n\t\t\t\t545342CFDF7810F2EBFFFC5E /* Production Release */,\n\t\t\t\tB008685BA25BB8FD771F0AE3 /* Staging Debug */,\n\t\t\t\t06E4383A2687EAD5877836CD /* Staging Release */,\n\t\t\t\t7931F229200F89B8CDC8A5E3 /* Test Debug */,\n\t\t\t\tDC80DC0AF0B4F2B51DAB0A52 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t641D1B2D88B93FAD0EA09187 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA9483E827FAD142F28A0E16D /* Production Debug */,\n\t\t\t\tE5EB6CE05568645829D40384 /* Production Release */,\n\t\t\t\t1FB2AFB2F45076B4A047499E /* Staging Debug */,\n\t\t\t\t6E93ACBBB608F386C0EB0F40 /* Staging Release */,\n\t\t\t\tE0DF26EA764106961DEC59C9 /* Test Debug */,\n\t\t\t\t1C63C4A728212D903E4F2CBB /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t658628E35283172E17BFC6A3 /* Build configuration list for PBXNativeTarget \"Framework_tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t589D05992FDC35F6BE056958 /* Production Debug */,\n\t\t\t\t5822FCD48FCC177980F672D4 /* Production Release */,\n\t\t\t\t9E38571B33C3CE5CA10C8452 /* Staging Debug */,\n\t\t\t\t4089B74CA10172B8ED2D004B /* Staging Release */,\n\t\t\t\t2569D399CA3C4828EF87AD78 /* Test Debug */,\n\t\t\t\tE24703CFCCBD727B3FE08F51 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t68CC35789B0DB020E2CFC517 /* Build configuration list for PBXNativeTarget \"App_iOS_UITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t082A10B9E5EAC6E783EAB9B0 /* Production Debug */,\n\t\t\t\t184E4078B13FE1CC6A11BD52 /* Production Release */,\n\t\t\t\tE3FC19CE2B78DA85314CB6A5 /* Staging Debug */,\n\t\t\t\t04172E0BDC7C512A23A51C76 /* Staging Release */,\n\t\t\t\t0AB9030B7E8A8BBA74CCB1A9 /* Test Debug */,\n\t\t\t\tBBA736CF3FB466E323EA8462 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t6B5C5F08C0EF06457756E379 /* Build configuration list for PBXNativeTarget \"App_watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t20803EC42C26E4EA13474E5A /* Production Debug */,\n\t\t\t\tAABC1E325EADF86C5137D659 /* Production Release */,\n\t\t\t\tC4397CDA0D458BAD55C911B0 /* Staging Debug */,\n\t\t\t\t7B2A1BE6CA654E9903A4C680 /* Staging Release */,\n\t\t\t\t00FD318C7418F3351FC00744 /* Test Debug */,\n\t\t\t\tF3AC6A112F81D0958A316D82 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t752BB3C1A601770BDD9AC01E /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t92602C025633FBA848F91812 /* Production Debug */,\n\t\t\t\tEC3A16C2887B72837F84904A /* Production Release */,\n\t\t\t\t02EB0C0230E6616EC8057F1C /* Staging Debug */,\n\t\t\t\t01BF8C6D1C21955BA7E803E8 /* Staging Release */,\n\t\t\t\t1341099486D8FE68A99CB5FE /* Test Debug */,\n\t\t\t\t0CE2F7B8A955BE108A66FF68 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t77CE5B5E5DEAC820254D484C /* Build configuration list for PBXNativeTarget \"App_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t943D402E936EC5BD391F9FD0 /* Production Debug */,\n\t\t\t\t4621C6C8A78FBB1CF4078178 /* Production Release */,\n\t\t\t\t97009625463EC8B19F53007A /* Staging Debug */,\n\t\t\t\tCBE9D80AD0719511A13A889E /* Staging Release */,\n\t\t\t\t196FEEE6C4B0DDE53AD16BD6 /* Test Debug */,\n\t\t\t\t3FFEE1ED324166B88F5F9A45 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t7881E73F05F096623E592040 /* Build configuration list for PBXNativeTarget \"Tool\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t436FB4981A66822DAF6F22AC /* Production Debug */,\n\t\t\t\t921EC740167F616C38809275 /* Production Release */,\n\t\t\t\t98A87959E6B7464168469594 /* Staging Debug */,\n\t\t\t\t18B5349AE18B7183BE4B4363 /* Staging Release */,\n\t\t\t\tCA45EC48C1EDE1A41141A103 /* Test Debug */,\n\t\t\t\tC00DBF60DC8C1A570738241F /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t78DB808B74D58314279E7FD7 /* Build configuration list for PBXNativeTarget \"NetworkSystemExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8BAC4B81735DDF8537709B8D /* Production Debug */,\n\t\t\t\tAB455120CB69CF0A7E128221 /* Production Release */,\n\t\t\t\tB987E9BED4B423A049202386 /* Staging Debug */,\n\t\t\t\t77C426E60C6FCB5A01EFC401 /* Staging Release */,\n\t\t\t\tE9C964F0189C68721012002B /* Test Debug */,\n\t\t\t\t0C18EEAE68FBEBCF066E0CD9 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t7CBF487CACC0BBFB530D7963 /* Build configuration list for PBXAggregateTarget \"SuperTarget\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t40A3301910021B57051D1BD5 /* Production Debug */,\n\t\t\t\tA79632AF4FFC93B0940CE8E3 /* Production Release */,\n\t\t\t\tF9AA169AF7F8FB31037CB416 /* Staging Debug */,\n\t\t\t\tA696B22A9734326DBFD20EC8 /* Staging Release */,\n\t\t\t\t26BACA32C62C38FAB45F532D /* Test Debug */,\n\t\t\t\tD37EB6FE8C8C4040A394F1E9 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t7E4887637B4FA5B8E2F349CA /* Build configuration list for PBXNativeTarget \"Framework2_watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t079E494F34C3CAFB8F9E44B3 /* Production Debug */,\n\t\t\t\tB18D58177F363DF071A9AF95 /* Production Release */,\n\t\t\t\t236247F0F85C9D342FAEE803 /* Staging Debug */,\n\t\t\t\tAF25BBA6E0AD56CA13A3F6C6 /* Staging Release */,\n\t\t\t\t5180F6C101C0335213FB28E5 /* Test Debug */,\n\t\t\t\tAE8DA78BA7A7194BD625DD45 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t906B8E5233EE4169E84ABAF3 /* Build configuration list for PBXNativeTarget \"StaticLibrary_ObjC_tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t96B8ADD171694B9A9E3ABC7E /* Production Debug */,\n\t\t\t\t278E3C762E54ADDA52F9E687 /* Production Release */,\n\t\t\t\tE5854B94A71A091D61E6ACD3 /* Staging Debug */,\n\t\t\t\tE4257B4F823EE947AADAD195 /* Staging Release */,\n\t\t\t\t817AFA080A41D783F5801C5A /* Test Debug */,\n\t\t\t\t36C4B3A6EACCB88098CE13D7 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t91E8D6B95F23669734D43FDC /* Build configuration list for PBXNativeTarget \"EntitledApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDDECE7D81A63C1C46A08F1F4 /* Production Debug */,\n\t\t\t\tBA5AD3137CD90C50E5E1BDA0 /* Production Release */,\n\t\t\t\t234640A811EF6EB9CC9081CA /* Staging Debug */,\n\t\t\t\t94295771D06A8E3DC6DCC8AD /* Staging Release */,\n\t\t\t\tCB4F81A519CA89CAF5703DAB /* Test Debug */,\n\t\t\t\t983ACA9F991B0B18D9760B12 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t9A0EF0B71AD44055E8749C42 /* Build configuration list for PBXNativeTarget \"Framework2_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE683F74557A3FC7BD78CAB2B /* Production Debug */,\n\t\t\t\tEDAF427566F715F739A4A1E1 /* Production Release */,\n\t\t\t\t4B389C6B6140EE7DE69A248A /* Staging Debug */,\n\t\t\t\tFE029D76C57D0661E4B8F13B /* Staging Release */,\n\t\t\t\t10E250D1DC79E11058B933F9 /* Test Debug */,\n\t\t\t\t5A9C67C1F423247AE1541F63 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t9C9913AAE0ABA99337F0C069 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tCF25791E297417E38800A521 /* Production Debug */,\n\t\t\t\t34ED16009A759D256D7ECB53 /* Production Release */,\n\t\t\t\t8705629C56ACC795F1DDB96D /* Staging Debug */,\n\t\t\t\t6FCE7B896519D4B364BD3A71 /* Staging Release */,\n\t\t\t\t94C7D2D3D0907DF146EFC13C /* Test Debug */,\n\t\t\t\t96130B9B35FEC2FEA00AFDB9 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\t9F4CBE5D909D2757B3D334B3 /* Build configuration list for PBXNativeTarget \"TestFramework\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t43C2B4D01A14EF502D0F0113 /* Production Debug */,\n\t\t\t\t5B13119724286962FB8C78CE /* Production Release */,\n\t\t\t\tDF558E25A4E143219DF4AA51 /* Staging Debug */,\n\t\t\t\tE3F181704254174DA162D2C7 /* Staging Release */,\n\t\t\t\tC6891AC5A8D8021B47DD852F /* Test Debug */,\n\t\t\t\tB9AF2E89FE3E9E03E0029607 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tB40D2F785317445D9A9C8C12 /* Build configuration list for PBXNativeTarget \"iMessageStickersExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tBF2F04729CC0602591655B25 /* Production Debug */,\n\t\t\t\t59416DBF97224D8A1B28D610 /* Production Release */,\n\t\t\t\t9E0CC963DE7E2ED71A4C16C1 /* Staging Debug */,\n\t\t\t\tB4297CD61108CE066C299844 /* Staging Release */,\n\t\t\t\tFC4A8130B924FC04E9190AB6 /* Test Debug */,\n\t\t\t\tA0C50DBBF4AC5D30C92B19F7 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tBE0FF81B67730F081F45BC78 /* Build configuration list for PBXLegacyTarget \"Legacy\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t53C3CC585BF0EAB4CA31AD3E /* Production Debug */,\n\t\t\t\tA91B13C5688E9BCC925C702A /* Production Release */,\n\t\t\t\t72EDF2E14A4CE916F4E2B01B /* Staging Debug */,\n\t\t\t\tE599549D1B1432302031A904 /* Staging Release */,\n\t\t\t\t9A891313A139893990989BDD /* Test Debug */,\n\t\t\t\t3DEEA480EDDC83405CFB9BBA /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tC483BD5456B09C276DE6EFC1 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_watchOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1C644E47F1C539F2B95160B8 /* Production Debug */,\n\t\t\t\tDE81296F5A364B236643A3B9 /* Production Release */,\n\t\t\t\tB8CC52B6DC03DACD9B1309E0 /* Staging Debug */,\n\t\t\t\t45FD151DC9928DE066A3B1AD /* Staging Release */,\n\t\t\t\t4D5DC2028DC046B8AF0B9B83 /* Test Debug */,\n\t\t\t\t19BF18E6EAA8B30F894EAB4E /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tC4FB84AAA6F6974CEA51D359 /* Build configuration list for PBXNativeTarget \"EndpointSecuritySystemExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t86BDA2C16646B065BDE01177 /* Production Debug */,\n\t\t\t\t06D6C7ED89937E7891E70B55 /* Production Release */,\n\t\t\t\t46DAC1602BF6BEBCD177342F /* Staging Debug */,\n\t\t\t\tC44EBD74DF4B95E30983A798 /* Staging Release */,\n\t\t\t\tD93982FB34335E2D1B9751FE /* Test Debug */,\n\t\t\t\t11919FD24AA8A110C24C0FEF /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tD379D1BBEF24ED05EB6ADEB3 /* Build configuration list for PBXNativeTarget \"XPC Service\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA2EBD902E6DE2B2BD12C4484 /* Production Debug */,\n\t\t\t\t64BEC335CD4016B9BC59F3C9 /* Production Release */,\n\t\t\t\t6B5A31340B8CF5849805CA3D /* Staging Debug */,\n\t\t\t\t7E101F97604A0990174A46CD /* Staging Release */,\n\t\t\t\t2630B88F53876A9AD7B61A4E /* Test Debug */,\n\t\t\t\tAC8E8FEA35961580D23185B2 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tD60A551D881B4B91F4535B78 /* Build configuration list for PBXNativeTarget \"Framework_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t982EA5A9273899567804B40D /* Production Debug */,\n\t\t\t\t25E62244CD9C539F614224DF /* Production Release */,\n\t\t\t\t65A21512F2B980615DF51D77 /* Staging Debug */,\n\t\t\t\tD8267FD376089FF4497ED3F1 /* Staging Release */,\n\t\t\t\t522E20DF286BE38B925CC57E /* Test Debug */,\n\t\t\t\tE3E69C722D5BBAF4C8EF4D29 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tD91E14E36EC0B415578456F2 /* Build configuration list for PBXProject \"Project\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB3B2FEA08FA4ACD18FDF9BC2 /* Production Debug */,\n\t\t\t\tC0D5765142C68AF68B954B3F /* Production Release */,\n\t\t\t\tE29961CFB084F6C1BF2CCCAE /* Staging Debug */,\n\t\t\t\tFBC34FE61DA25D0516C15B60 /* Staging Release */,\n\t\t\t\tE95B2CE470959F04BE6AACA9 /* Test Debug */,\n\t\t\t\tC59E649CEDC0E973B28B57A4 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tD9EF39CA9A17477264F02057 /* Build configuration list for PBXNativeTarget \"ExternalTarget\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC745E36B41A4ABD1E24A69AF /* Production Debug */,\n\t\t\t\t045CB2D74D9A3532E128BDD2 /* Production Release */,\n\t\t\t\tB5E1584A197C52FC47245FC8 /* Staging Debug */,\n\t\t\t\t94ECCEFE29DB30C48B227A16 /* Staging Release */,\n\t\t\t\t2C6AB16720ADFB2436337A8F /* Test Debug */,\n\t\t\t\tAF3DD6DCF141F35D4129FFF5 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tDA49CF5A1AC4FC1A7EE979E8 /* Build configuration list for PBXNativeTarget \"BundleY\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t924BB9ED8B14A02ABF88CC23 /* Production Debug */,\n\t\t\t\t414544E2FA4DE102442A71CD /* Production Release */,\n\t\t\t\t71529460FB00BCDF2064C57F /* Staging Debug */,\n\t\t\t\t7D73A7FB339A39293BD2DB9E /* Staging Release */,\n\t\t\t\tB227B91964080DEF6C426483 /* Test Debug */,\n\t\t\t\tBA21E149424C2D03E5E50EC1 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tE3D23AF56C29471E48CA9A11 /* Build configuration list for PBXNativeTarget \"CrossOverlayFramework_tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t02E38E444E372E89E589E022 /* Production Debug */,\n\t\t\t\tB4464446E556BA3E731D3D25 /* Production Release */,\n\t\t\t\t321D6FAF1E7AA977008359C7 /* Staging Debug */,\n\t\t\t\t9E1F620F233A34DE80D84356 /* Staging Release */,\n\t\t\t\tC9D8E28D29695DF97266F229 /* Test Debug */,\n\t\t\t\t8FEAEB3CB45479405F52D3AF /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tED1A174BA92C6E5172B519B7 /* Build configuration list for PBXNativeTarget \"iMessageExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t862658ACA3BF7AE7FA22870C /* Production Debug */,\n\t\t\t\t79FA19BACBA7B6C15E0399C0 /* Production Release */,\n\t\t\t\t366C92A637FDA940E6BCB591 /* Staging Debug */,\n\t\t\t\t4662A9062E19E6BC30C9E0A1 /* Staging Release */,\n\t\t\t\t15F79278F4ABD33584FC69E4 /* Test Debug */,\n\t\t\t\t6645E6A343F71C3E91656BE9 /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tEF0A56586AB1ED900B70D5BC /* Build configuration list for PBXNativeTarget \"Framework2_tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t77B8B41EBA5D778EB3AF89DC /* Production Debug */,\n\t\t\t\t00AF278082A5D7C2A6555867 /* Production Release */,\n\t\t\t\t4A0624A4FC88A7E232411C95 /* Staging Debug */,\n\t\t\t\t7C473021DB2A2D88B535FBD6 /* Staging Release */,\n\t\t\t\t401097AC487BBA8C7B2B4938 /* Test Debug */,\n\t\t\t\tF9F2DA45FBEAF1528EC026FB /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n\t\tF888428CB91ACDDAAE8C8F21 /* Build configuration list for PBXNativeTarget \"App_iOS_Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC7EF8D96FA7893ADD61CF4C0 /* Production Debug */,\n\t\t\t\tB9BEDF424FEFB1047765C3C6 /* Production Release */,\n\t\t\t\t2F1CDD64CD0684A2B09D6ED3 /* Staging Debug */,\n\t\t\t\t0EFE33A4C09DCF9FE1519D37 /* Staging Release */,\n\t\t\t\t2F88193D8069519CD36F649B /* Test Debug */,\n\t\t\t\t7B4F942EA48FC1FED21AA2EE /* Test Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = \"Production Debug\";\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCRemoteSwiftPackageReference section */\n\t\t4EDA79334592CBBA0E507AD2 /* XCRemoteSwiftPackageReference \"Swinject\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/Swinject/Swinject\";\n\t\t\trequirement = {\n\t\t\t\tkind = exactVersion;\n\t\t\t\tversion = 2.8.0;\n\t\t\t};\n\t\t};\n/* End XCRemoteSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\tC7F9B7EDE85527EFEA85D46D /* Swinject */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 4EDA79334592CBBA0E507AD2 /* XCRemoteSwiftPackageReference \"Swinject\" */;\n\t\t\tproductName = Swinject;\n\t\t};\n\t\tD7917D10F77DA9D69937D493 /* Swinject */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = 4EDA79334592CBBA0E507AD2 /* XCRemoteSwiftPackageReference \"Swinject\" */;\n\t\t\tproductName = Swinject;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\n/* Begin XCVersionGroup section */\n\t\t306796628DD52FA55E833B65 /* Model.xcdatamodeld */ = {\n\t\t\tisa = XCVersionGroup;\n\t\t\tchildren = (\n\t\t\t\tD70BE0C05E5779A077793BE6 /* Model 2.xcdatamodel */,\n\t\t\t\t4BF4D16042A80576D259160C /* Model 3.xcdatamodel */,\n\t\t\t\t7DE38C10AB71A47B786D5BF2 /* Model.xcdatamodel */,\n\t\t\t);\n\t\t\tcurrentVersion = D70BE0C05E5779A077793BE6 /* Model 2.xcdatamodel */;\n\t\t\tpath = Model.xcdatamodeld;\n\t\t\tsourceTree = \"<group>\";\n\t\t\tversionGroupType = wrapper.xcdatamodel;\n\t\t};\n/* End XCVersionGroup section */\n\t};\n\trootObject = 0FBAE303E3CFC2ABAC876A77 /* Project object */;\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"4\"\n   version = \"2.0\">\n   <Breakpoints>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.FileBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            condition = \"launchOptions == nil\"\n            endingLineNumber = \"7\"\n            filePath = \"App_iOS/AppDelegate.swift\"\n            startingLineNumber = \"7\">\n            <Actions>\n               <BreakpointActionProxy\n                  ActionExtensionID = \"Xcode.BreakpointAction.Log\">\n                  <ActionContent\n                     message = \"message\"\n                     conveyanceType = \"1\">\n                  </ActionContent>\n               </BreakpointActionProxy>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.FileBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            endingColumnNumber = \"13\"\n            endingLineNumber = \"11\"\n            filePath = \"App_iOS/AppDelegate.swift\"\n            startingColumnNumber = \"13\"\n            startingLineNumber = \"11\">\n            <Actions>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.ExceptionBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            scope = \"0\"\n            stopOnStyle = \"0\">\n            <Actions>\n               <BreakpointActionProxy\n                  ActionExtensionID = \"Xcode.BreakpointAction.DebuggerCommand\">\n                  <ActionContent\n                     consoleCommand = \"po $arg1\">\n                  </ActionContent>\n               </BreakpointActionProxy>\n               <BreakpointActionProxy\n                  ActionExtensionID = \"Xcode.BreakpointAction.AppleScript\">\n                  <ActionContent\n                     script = \"display alert &quot;Exception happened!&quot;\">\n                  </ActionContent>\n               </BreakpointActionProxy>\n               <BreakpointActionProxy\n                  ActionExtensionID = \"Xcode.BreakpointAction.Sound\">\n                  <ActionContent\n                     soundName = \"Blow\">\n                  </ActionContent>\n               </BreakpointActionProxy>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.SwiftErrorBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"No\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\">\n            <Actions>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.OpenGLErrorBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"2\"\n            continueAfterRunningActions = \"No\">\n            <Actions>\n               <BreakpointActionProxy\n                  ActionExtensionID = \"Xcode.BreakpointAction.ShellCommand\">\n                  <ActionContent\n                     arguments = \"argument1, argument2\"\n                     command = \"script.sh\"\n                     waitUntilDone = \"YES\">\n                  </ActionContent>\n               </BreakpointActionProxy>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.SymbolicBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            symbolName = \"UIViewAlertForUnsatisfiableConstraints\"\n            moduleName = \"UIKitCore\">\n            <Actions>\n               <BreakpointActionProxy\n                  ActionExtensionID = \"Xcode.BreakpointAction.GraphicsTrace\">\n                  <ActionContent>\n                  </ActionContent>\n               </BreakpointActionProxy>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.IDEConstraintErrorBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"Yes\">\n            <Actions>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.IDETestFailureBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\">\n            <Actions>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.RuntimeIssueBreakpoint\">\n         <BreakpointContent\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\">\n            <Actions>\n            </Actions>\n            <Locations>\n            </Locations>\n         </BreakpointContent>\n      </BreakpointProxy>\n   </Breakpoints>\n</Bucket>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Clip.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D137C04B64B7052419A2DF4E\"\n               BuildableName = \"App_Clip.app\"\n               BlueprintName = \"App_Clip\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D137C04B64B7052419A2DF4E\"\n            BuildableName = \"App_Clip.app\"\n            BlueprintName = \"App_Clip\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"63BFF75AA22335E3DDD5E26A\"\n               BuildableName = \"App_Clip_Tests.xctest\"\n               BlueprintName = \"App_Clip_Tests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"91C3E922A8482E07649971B9\"\n               BuildableName = \"App_Clip_UITests.xctest\"\n               BlueprintName = \"App_Clip_UITests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D137C04B64B7052419A2DF4E\"\n            BuildableName = \"App_Clip.app\"\n            BlueprintName = \"App_Clip\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D137C04B64B7052419A2DF4E\"\n            BuildableName = \"App_Clip.app\"\n            BlueprintName = \"App_Clip\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n               BuildableName = \"App_iOS.app\"\n               BlueprintName = \"App_iOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      customLLDBInitFile = \"${SRCROOT}/.lldbinit\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      codeCoverageEnabled = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <TestPlans>\n         <TestPlanReference\n            default = \"YES\"\n            reference = \"container:App_iOS/App_iOS.xctestplan\">\n         </TestPlanReference>\n      </TestPlans>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"F674B2CFC4738EEC49BAD0DA\"\n               BuildableName = \"App_iOS_UITests.xctest\"\n               BlueprintName = \"App_iOS_UITests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"YES\"\n            testExecutionOrdering = \"random\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DC2F16BAA6E13B44AB62F888\"\n               BuildableName = \"App_iOS_Tests.xctest\"\n               BlueprintName = \"App_iOS_Tests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n            <LocationScenarioReference\n               identifier = \"New York, NY, USA\"\n               referenceType = \"1\">\n            </LocationScenarioReference>\n         </TestableReference>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      customLLDBInitFile = \"${SRCROOT}/.lldbinit\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      enableGPUFrameCaptureMode = \"3\"\n      enableGPUValidationMode = \"1\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <LocationScenarioReference\n         identifier = \"Honolulu, HI, USA\"\n         referenceType = \"1\">\n      </LocationScenarioReference>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <CommandLineArguments>\n      </CommandLineArguments>\n      <StoreKitConfigurationFileReference\n         identifier = \"../../App_iOS/Configuration.storekit\">\n      </StoreKitConfigurationFileReference>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Production.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n               BuildableName = \"App_iOS.app\"\n               BlueprintName = \"App_iOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"NO\"\n      disableMainThreadChecker = \"YES\"\n      codeCoverageEnabled = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DC2F16BAA6E13B44AB62F888\"\n               BuildableName = \"App_iOS_Tests.xctest\"\n               BlueprintName = \"App_iOS_Tests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"F674B2CFC4738EEC49BAD0DA\"\n               BuildableName = \"App_iOS_UITests.xctest\"\n               BlueprintName = \"App_iOS_UITests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <CodeCoverageTargets>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </CodeCoverageTargets>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      disableMainThreadChecker = \"YES\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      stopOnEveryMainThreadCheckerIssue = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <StoreKitConfigurationFileReference\n         identifier = \"../../App_iOS/Configuration.storekit\">\n      </StoreKitConfigurationFileReference>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"NO\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Staging.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n               BuildableName = \"App_iOS.app\"\n               BlueprintName = \"App_iOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Staging Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"NO\"\n      disableMainThreadChecker = \"YES\"\n      codeCoverageEnabled = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DC2F16BAA6E13B44AB62F888\"\n               BuildableName = \"App_iOS_Tests.xctest\"\n               BlueprintName = \"App_iOS_Tests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"F674B2CFC4738EEC49BAD0DA\"\n               BuildableName = \"App_iOS_UITests.xctest\"\n               BlueprintName = \"App_iOS_UITests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <CodeCoverageTargets>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </CodeCoverageTargets>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Staging Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      disableMainThreadChecker = \"YES\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      stopOnEveryMainThreadCheckerIssue = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <StoreKitConfigurationFileReference\n         identifier = \"../../App_iOS/Configuration.storekit\">\n      </StoreKitConfigurationFileReference>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Staging Release\"\n      shouldUseLaunchSchemeArgsEnv = \"NO\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Staging Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Staging Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS Test.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n               BuildableName = \"App_iOS.app\"\n               BlueprintName = \"App_iOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Test Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"NO\"\n      disableMainThreadChecker = \"YES\"\n      codeCoverageEnabled = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DC2F16BAA6E13B44AB62F888\"\n               BuildableName = \"App_iOS_Tests.xctest\"\n               BlueprintName = \"App_iOS_Tests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\"\n            parallelizable = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"F674B2CFC4738EEC49BAD0DA\"\n               BuildableName = \"App_iOS_UITests.xctest\"\n               BlueprintName = \"App_iOS_UITests\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <CodeCoverageTargets>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </CodeCoverageTargets>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Test Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      disableMainThreadChecker = \"YES\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      stopOnEveryMainThreadCheckerIssue = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n      <StoreKitConfigurationFileReference\n         identifier = \"../../App_iOS/Configuration.storekit\">\n      </StoreKitConfigurationFileReference>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Test Release\"\n      shouldUseLaunchSchemeArgsEnv = \"NO\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n            BuildableName = \"App_iOS.app\"\n            BlueprintName = \"App_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"MyDisabledArgument\"\n            isEnabled = \"NO\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"MyEnabledArgument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Test Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Test Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_macOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"020A320BB3736FCDE6CC4E70\"\n               BuildableName = \"App_macOS.app\"\n               BlueprintName = \"App_macOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"020A320BB3736FCDE6CC4E70\"\n            BuildableName = \"App_macOS.app\"\n            BlueprintName = \"App_macOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"020A320BB3736FCDE6CC4E70\"\n            BuildableName = \"App_macOS.app\"\n            BlueprintName = \"App_macOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"020A320BB3736FCDE6CC4E70\"\n            BuildableName = \"App_macOS.app\"\n            BlueprintName = \"App_macOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_watchOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"208179651927D1138D19B5AD\"\n               BuildableName = \"App_watchOS.app\"\n               BlueprintName = \"App_watchOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"0867B0DACEF28C11442DE8F7\"\n               BuildableName = \"App_iOS.app\"\n               BlueprintName = \"App_iOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"208179651927D1138D19B5AD\"\n            BuildableName = \"App_watchOS.app\"\n            BlueprintName = \"App_watchOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <RemoteRunnable\n         runnableDebuggingMode = \"2\"\n         BundleIdentifier = \"com.apple.Carousel\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"208179651927D1138D19B5AD\"\n            BuildableName = \"App_watchOS.app\"\n            BlueprintName = \"App_watchOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </RemoteRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"208179651927D1138D19B5AD\"\n            BuildableName = \"App_watchOS.app\"\n            BlueprintName = \"App_watchOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/DriverKitDriver.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"428715FBC1D86458DA70CBDE\"\n               BuildableName = \"DriverKitDriver.dext\"\n               BlueprintName = \"DriverKitDriver\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"428715FBC1D86458DA70CBDE\"\n            BuildableName = \"DriverKitDriver.dext\"\n            BlueprintName = \"DriverKitDriver\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"428715FBC1D86458DA70CBDE\"\n            BuildableName = \"DriverKitDriver.dext\"\n            BlueprintName = \"DriverKitDriver\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"428715FBC1D86458DA70CBDE\"\n            BuildableName = \"DriverKitDriver.dext\"\n            BlueprintName = \"DriverKitDriver\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/EndpointSecuritySystemExtension.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9F551F66949B55E8328EB995\"\n               BuildableName = \"EndpointSecuritySystemExtension.systemextension\"\n               BlueprintName = \"EndpointSecuritySystemExtension\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9F551F66949B55E8328EB995\"\n            BuildableName = \"EndpointSecuritySystemExtension.systemextension\"\n            BlueprintName = \"EndpointSecuritySystemExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9F551F66949B55E8328EB995\"\n            BuildableName = \"EndpointSecuritySystemExtension.systemextension\"\n            BlueprintName = \"EndpointSecuritySystemExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9F551F66949B55E8328EB995\"\n            BuildableName = \"EndpointSecuritySystemExtension.systemextension\"\n            BlueprintName = \"EndpointSecuritySystemExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"NO\"\n      buildImplicitDependencies = \"NO\"\n      runPostActionsOnFailure = \"YES\">\n      <PreActions>\n         <ExecutionAction\n            ActionType = \"Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction\">\n            <ActionContent\n               title = \"Run Script\"\n               scriptText = \"echo Starting Framework Build\">\n               <EnvironmentBuildable>\n                  <BuildableReference\n                     BuildableIdentifier = \"primary\"\n                     BlueprintIdentifier = \"AE3F93DB94E7208F2F1D9A78\"\n                     BuildableName = \"Framework.framework\"\n                     BlueprintName = \"Framework_iOS\"\n                     ReferencedContainer = \"container:Project.xcodeproj\">\n                  </BuildableReference>\n               </EnvironmentBuildable>\n            </ActionContent>\n         </ExecutionAction>\n      </PreActions>\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AE3F93DB94E7208F2F1D9A78\"\n               BuildableName = \"Framework.framework\"\n               BlueprintName = \"Framework_iOS\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"ja\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      region = \"en\"\n      codeCoverageEnabled = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AE3F93DB94E7208F2F1D9A78\"\n            BuildableName = \"Framework.framework\"\n            BlueprintName = \"Framework_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AE3F93DB94E7208F2F1D9A78\"\n            BuildableName = \"Framework.framework\"\n            BlueprintName = \"Framework_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"argument\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"argument.with.dot\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AE3F93DB94E7208F2F1D9A78\"\n            BuildableName = \"Framework.framework\"\n            BlueprintName = \"Framework_iOS\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/NetworkSystemExtension.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AD28397BCC984F769EE8A937\"\n               BuildableName = \"NetworkSystemExtension.systemextension\"\n               BlueprintName = \"NetworkSystemExtension\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AD28397BCC984F769EE8A937\"\n            BuildableName = \"NetworkSystemExtension.systemextension\"\n            BlueprintName = \"NetworkSystemExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AD28397BCC984F769EE8A937\"\n            BuildableName = \"NetworkSystemExtension.systemextension\"\n            BlueprintName = \"NetworkSystemExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AD28397BCC984F769EE8A937\"\n            BuildableName = \"NetworkSystemExtension.systemextension\"\n            BlueprintName = \"NetworkSystemExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Tool.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"090315A24AC8E8B8F318A709\"\n               BuildableName = \"Tool\"\n               BlueprintName = \"Tool\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"090315A24AC8E8B8F318A709\"\n            BuildableName = \"Tool\"\n            BlueprintName = \"Tool\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"090315A24AC8E8B8F318A709\"\n            BuildableName = \"Tool\"\n            BlueprintName = \"Tool\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"090315A24AC8E8B8F318A709\"\n            BuildableName = \"Tool\"\n            BlueprintName = \"Tool\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageApp.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"834F55973F05AC8A18144DB0\"\n               BuildableName = \"iMessageApp.app\"\n               BlueprintName = \"iMessageApp\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"834F55973F05AC8A18144DB0\"\n            BuildableName = \"iMessageApp.app\"\n            BlueprintName = \"iMessageApp\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"834F55973F05AC8A18144DB0\"\n            BuildableName = \"iMessageApp.app\"\n            BlueprintName = \"iMessageApp\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"834F55973F05AC8A18144DB0\"\n            BuildableName = \"iMessageApp.app\"\n            BlueprintName = \"iMessageApp\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/iMessageExtension.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   wasCreatedForAppExtension = \"YES\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1C26A6A0BC446191F311D470\"\n               BuildableName = \"iMessageExtension.appex\"\n               BlueprintName = \"iMessageExtension\"\n               ReferencedContainer = \"container:Project.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1C26A6A0BC446191F311D470\"\n            BuildableName = \"iMessageExtension.appex\"\n            BlueprintName = \"iMessageExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Production Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1C26A6A0BC446191F311D470\"\n            BuildableName = \"iMessageExtension.appex\"\n            BlueprintName = \"iMessageExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Production Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1C26A6A0BC446191F311D470\"\n            BuildableName = \"iMessageExtension.appex\"\n            BlueprintName = \"iMessageExtension\"\n            ReferencedContainer = \"container:Project.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Production Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Production Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Resources/GoogleService-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>AD_UNIT_ID_FOR_BANNER_TEST</key>\n\t<string>ca-app-pub-0000000000000000/1111111111</string>\n\t<key>AD_UNIT_ID_FOR_INTERSTITIAL_TEST</key>\n\t<string>ca-app-pub-9999999999999999/2222222222</string>\n\t<key>CLIENT_ID</key>\n\t<string>AAAAAAA</string>\n\t<key>REVERSED_CLIENT_ID</key>\n\t<string>BBBBBBB</string>\n\t<key>API_KEY</key>\n\t<string>CCCCCCC</string>\n\t<key>GCM_SENDER_ID</key>\n\t<string>000000000000000</string>\n\t<key>PLIST_VERSION</key>\n\t<string>1</string>\n\t<key>BUNDLE_ID</key>\n\t<string>com.project.app</string>\n\t<key>PROJECT_ID</key>\n\t<string>abcdef:app-000000000</string>\n\t<key>STORAGE_BUCKET</key>\n\t<string>abcdef:app-000000000.appspot.com</string>\n\t<key>IS_ADS_ENABLED</key>\n\t<true/>\n\t<key>IS_ANALYTICS_ENABLED</key>\n\t<true/>\n\t<key>IS_APPINVITE_ENABLED</key>\n\t<false/>\n\t<key>IS_GCM_ENABLED</key>\n\t<true/>\n\t<key>IS_SIGNIN_ENABLED</key>\n\t<true/>\n\t<key>GOOGLE_APP_ID</key>\n\t<string>000000000000000</string>\n\t<key>DATABASE_URL</key>\n\t<string>https://github.com/yonaskolb/XcodeGen/</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Resources/MyBundle.bundle/file.text",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/SomeFile",
    "content": "\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/StandaloneFiles/Standalone.swift",
    "content": "func standaloneHello() -> String {\n    \"Hello\"\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/StandaloneFiles/StandaloneAssets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/StaticLibrary_ObjC/Module/module.modulemap",
    "content": "module StaticLibrary_ObjC {\n    header \"StaticLibrary_ObjC.h\"\n    export *\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/StaticLibrary_ObjC/StaticLibrary_ObjC.h",
    "content": "#include <Foundation/Foundation.h>\n\n@interface SLObjC: NSObject\n@end\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/StaticLibrary_ObjC/StaticLibrary_ObjC.m",
    "content": "#include \"StaticLibrary_ObjC.h\"\n\n@implementation SLObjC\n\n- (NSString *)description {\n  return @\"Hello, World!\";\n}\n\n@end\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/StaticLibrary_Swift/StaticLibrary.swift",
    "content": "\npublic struct SLSwift {\n    public func description() -> String {\n        \"Hello, World!\"\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/String Catalogs/LocalizableStrings.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"sampleText\" : {\n      \"comment\" : \"Sample string in an asset catalog\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"This is a localized string\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esta es una cadena de texto localizable.\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedFolder/ExcludedFile.swift",
    "content": "// excluded\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedFolder/FeatureATests/__Snapshots__/.gitkeep",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedFolder/FeatureBTests/__Snapshots__/.gitkeep",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedFolder/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedFolder/Resources/.gitkeep",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedFolder/SyncedFile.swift",
    "content": "\nstruct SyncedStruct {\n  \n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/SyncedParent/SyncedChild/SyncedChildFile.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Tool/main.swift",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/Utilities/MyPlayground.playground/Contents.swift",
    "content": "import Cocoa\n\nvar str = \"Hello, playground\"\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Utilities/MyPlayground.playground/contents.xcplayground",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<playground version='5.0' target-platform='macos' executeOnSourceChanges='false'>\n    <timeline fileName='timeline.xctimeline'/>\n</playground>"
  },
  {
    "path": "Tests/Fixtures/TestProject/Utilities/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Utilities/MyPlayground.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Vendor/SomeXPCService.xpc/Contents/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>BuildMachineOSBuild</key>\n\t<string>17G65</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>XPC Service</string>\n\t<key>CFBundleExecutable</key>\n\t<string>XPC Service</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.project.XPCService</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>XPC Service</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>9F2000</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>17E189</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.13</string>\n\t<key>DTXcode</key>\n\t<string>0941</string>\n\t<key>DTXcodeBuild</key>\n\t<string>9F2000</string>\n\t<key>XPCService</key>\n\t<dict>\n\t\t<key>ServiceType</key>\n\t\t<string>Application</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Vendor/SomeXPCService.xpc/Contents/_CodeSignature/CodeResources",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>files</key>\n\t<dict/>\n\t<key>files2</key>\n\t<dict/>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^Resources/</key>\n\t\t<true/>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^[^/]+$</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Workspace.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Project.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:AnotherProject/AnotherProject.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Workspace.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/Workspace.xcworkspace/xcshareddata/swiftpm/Package.resolved",
    "content": "{\n  \"originHash\" : \"43ca8cdf31efddefed0c1a55ebf00893877282d5a9bda294cd149edd4e559706\",\n  \"pins\" : [\n    {\n      \"identity\" : \"swinject\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Swinject/Swinject\",\n      \"state\" : {\n        \"revision\" : \"b1d92a53159fe45e162c307183aec9be15e4e7ae\",\n        \"version\" : \"2.8.0\"\n      }\n    }\n  ],\n  \"version\" : 3\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/XPC Service/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>XPC Service</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>XPCService</key>\n\t<dict>\n\t\t<key>ServiceType</key>\n\t\t<string>Application</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/XPC Service/XPC_Service.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"XPC_ServiceProtocol.h\"\n\n@interface XPC_Service : NSObject <XPC_ServiceProtocol>\n@end\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/XPC Service/XPC_Service.m",
    "content": "#import \"XPC_Service.h\"\n\n@implementation XPC_Service\n\n- (void)upperCaseString:(NSString *)aString withReply:(void (^)(NSString *))reply {\n    NSString *response = [aString uppercaseString];\n    reply(response);\n}\n\n@end\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/XPC Service/XPC_ServiceProtocol.h",
    "content": "#import <Foundation/Foundation.h>\n\n// The protocol that this service will vend as its API. This header file will also need to be visible to the process hosting the service.\n@protocol XPC_ServiceProtocol\n\n// Replace the API of this protocol with an API appropriate to the service you are vending.\n- (void)upperCaseString:(NSString *)aString withReply:(void (^)(NSString *))reply;\n    \n@end\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/XPC Service/main.m",
    "content": "#import <Foundation/Foundation.h>\n#import \"XPC_Service.h\"\n\n@interface ServiceDelegate : NSObject <NSXPCListenerDelegate>\n@end\n\n@implementation ServiceDelegate\n\n- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {\n    // This method is where the NSXPCListener configures, accepts, and resumes a new incoming NSXPCConnection.\n    \n    // Configure the connection.\n    // First, set the interface that the exported object implements.\n    newConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(XPC_ServiceProtocol)];\n    \n    // Next, set the object that the connection exports. All messages sent on the connection to this service will be sent to the exported object to handle. The connection retains the exported object.\n    XPC_Service *exportedObject = [XPC_Service new];\n    newConnection.exportedObject = exportedObject;\n    \n    // Resuming the connection allows the system to deliver more incoming messages.\n    [newConnection resume];\n    \n    // Returning YES from this method tells the system that you have accepted this connection. If you want to reject the connection for some reason, call -invalidate on the connection and return NO.\n    return YES;\n}\n\n@end\n\nint main(int argc, const char *argv[])\n{\n    // Create the delegate for the service.\n    ServiceDelegate *delegate = [ServiceDelegate new];\n    \n    // Set up the one NSXPCListener for this service. It will handle all incoming connections.\n    NSXPCListener *listener = [NSXPCListener serviceListener];\n    listener.delegate = delegate;\n    \n    // Resuming the serviceListener starts this service. This method does not return.\n    [listener resume];\n    return 0;\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/build.sh",
    "content": "#!/bin/bash\nset -e\n\necho \"\n⚙️ Building iOS app\"\nxcodebuild -quiet -workspace Workspace.xcworkspace -scheme \"App_iOS Test\" -configuration \"Test Debug\" -xcconfig fixtures.xcconfig -destination 'generic/platform=iOS Simulator'\necho \"✅ Successfully built iOS app\"\n\necho \"\n⚙️ Building macOS app\"\nxcodebuild -quiet -workspace Workspace.xcworkspace -scheme \"App_macOS\" -configuration \"Test Debug\" -xcconfig fixtures.xcconfig -destination 'generic/platform=macOS'\necho \"✅ Successfully built macOS app\"\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/carthage_dynamic.xcconfig",
    "content": "#include \"xcode12_13_and_14_workaround.xcconfig\"\n\nIPHONEOS_DEPLOYMENT_TARGET=14.0\nMACOSX_DEPLOYMENT_TARGET=10.15\nTVOS_DEPLOYMENT_TARGET=14.0\nWATCHOS_DEPLOYMENT_TARGET=7.0\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/carthage_static.xcconfig",
    "content": "#include \"xcode12_13_and_14_workaround.xcconfig\"\n\nMACH_O_TYPE = staticlib\n\nIPHONEOS_DEPLOYMENT_TARGET=14.0\nMACOSX_DEPLOYMENT_TARGET=10.15\nTVOS_DEPLOYMENT_TARGET=14.0\nWATCHOS_DEPLOYMENT_TARGET=7.0\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/environments.yml",
    "content": "settings:\n  configs:\n    Test:\n      BUNDLE_ID_SUFFIX: .test\n    Staging:\n      BUNDLE_ID_SUFFIX: .staging\nconfigs:\n  Test Debug: debug\n  Staging Debug: debug\n  Production Debug: debug\n  Test Release: release\n  Staging Release: release\n  Production Release: release\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/excluded-file",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/TestProject/fixtures.xcconfig",
    "content": "#include \"xcode12_13_and_14_workaround.xcconfig\"\n\n// Common settings for fixtures\nCODE_SIGN_IDENTITY =\nCODE_SIGNING_REQUIRED = NO\nCODE_SIGN_ENTITLEMENTS =\nCODE_SIGNING_ALLOWED = NO\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageApp/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageApp/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageApp/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageExtension/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageExtension/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x45\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x45\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"67x50\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"74x55\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"27x20\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"platform\" : \"ios\"\n    },\n    {\n      \"size\" : \"27x20\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"platform\" : \"ios\"\n    },\n    {\n      \"size\" : \"32x24\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"platform\" : \"ios\"\n    },\n    {\n      \"size\" : \"32x24\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"platform\" : \"ios\"\n    },\n    {\n      \"size\" : \"1024x768\",\n      \"idiom\" : \"ios-marketing\",\n      \"scale\" : \"1x\",\n      \"platform\" : \"ios\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageExtension/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13122.16\" systemVersion=\"17A278a\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"ObA-dk-sSI\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Messages View Controller-->\n        <scene sceneID=\"7MM-of-jgj\">\n            <objects>\n                <viewController id=\"ObA-dk-sSI\" customClass=\"MessagesViewController\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"zMn-AG-sqS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"528\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Hello World\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"d1e-fi-ked\">\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"centerY\" secondItem=\"d1e-fi-ked\" secondAttribute=\"centerY\" id=\"H0s-hz-dDP\"/>\n                            <constraint firstAttribute=\"centerX\" secondItem=\"d1e-fi-ked\" secondAttribute=\"centerX\" id=\"wFy-hW-Bib\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"LDy-ih-0nr\"/>\n                    </view>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"528\"/>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"X47-rx-isc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageExtension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>IMessage</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionMainStoryboard</key>\n\t\t<string>MainInterface</string>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.message-payload-provider</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageExtension/MessagesViewController.swift",
    "content": "import Messages\nimport UIKit\n\nclass MessagesViewController: MSMessagesAppViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view.\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n    // MARK: - Conversation Handling\n\n    override func willBecomeActive(with conversation: MSConversation) {\n        // Called when the extension is about to move from the inactive to active state.\n        // This will happen when the extension is about to present UI.\n\n        // Use this method to configure the extension and restore previously stored state.\n    }\n\n    override func didResignActive(with conversation: MSConversation) {\n        // Called when the extension is about to move from the active to inactive state.\n        // This will happen when the user dissmises the extension, changes to a different\n        // conversation or quits Messages.\n\n        // Use this method to release shared resources, save user data, invalidate timers,\n        // and store enough state information to restore your extension to its current state\n        // in case it is terminated later.\n    }\n\n    override func didReceive(_ message: MSMessage, conversation: MSConversation) {\n        // Called when a message arrives that was generated by another instance of this\n        // extension on a remote device.\n\n        // Use this method to trigger UI updates in response to the message.\n    }\n\n    override func didStartSending(_ message: MSMessage, conversation: MSConversation) {\n        // Called when the user taps the send button.\n    }\n\n    override func didCancelSending(_ message: MSMessage, conversation: MSConversation) {\n        // Called when the user deletes the message without sending it.\n\n        // Use this to clean up state related to the deleted message.\n    }\n\n    override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {\n        // Called before the extension transitions to a new presentation style.\n\n        // Use this method to prepare for the change in presentation style.\n    }\n\n    override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {\n        // Called after the extension transitions to a new presentation style.\n\n        // Use this method to finalize any behaviors associated with the change in presentation style.\n    }\n}\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageStickers/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageStickers/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Tests/Fixtures/TestProject/iMessageStickers/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/project.yml",
    "content": "name: Project\ninclude: [environments.yml, AnotherProject/project.yml]\noptions:\n  bundleIdPrefix: com.project\n  usesTabs: false\n  indentWidth: 2\n  tabWidth: 2\n  transitivelyLinkDependencies: true\n  deploymentTarget:\n    watchOS: 4.0\n  groupSortPosition: top\n  preGenCommand: echo \"This is a pre-gen command\"\n  postGenCommand: scripts/script.sh\n  fileTypes:\n    abc:\n      buildPhase: none\n    abcd:\n      buildPhase: none\nfileGroups:\n  - Configs\n  - FileGroup\n  - SomeFile\n  - Utilities\n  - App_iOS/Configuration.storekit\nprojectReferences:\n  AnotherProject:\n    path: ./AnotherProject/AnotherProject.xcodeproj\nconfigFiles:\n  Test Debug: Configs/config.xcconfig\npackages:\n  Swinject:\n    url: https://github.com/Swinject/Swinject\n    version: 2.8.0\nbreakpoints:\n  - type: File\n    path: App_iOS/AppDelegate.swift\n    line: 7\n    condition: launchOptions == nil\n    actions:\n      - type: Log\n        message: message\n        conveyanceType: speak\n  - type: File\n    path: App_iOS/AppDelegate.swift\n    line: 11\n    column: 13\n  - type: Exception\n    scope: All\n    stopOnStype: Catch\n    actions:\n      - type: DebuggerCommand\n        command: po $arg1\n      - type: AppleScript\n        script: display alert \"Exception happened!\"\n      - type: Sound\n        sound: Blow\n  - type: SwiftError\n    enabled: false\n  - type: OpenGLError\n    ignoreCount: 2\n    actions:\n      - type: ShellCommand\n        path: script.sh\n        arguments: argument1, argument2\n        waitUntilDone: true\n  - type: Symbolic\n    symbol: UIViewAlertForUnsatisfiableConstraints\n    module: UIKitCore\n    actions:\n      - type: GraphicsTrace\n  - type: IDEConstraintError\n    continueAfterRunningActions: true\n  - type: IDETestFailure\n  - type: RuntimeIssue\ntargets:\n  Legacy:\n    type: \"\"\n    platform: iOS\n    legacy:\n      toolPath: /usr/bin/true\n      passSettings: true\n\n  App_macOS:\n    type: application\n    platform: macOS\n    scheme: {}\n    info:\n      path: App_macOS/App-Info.plist\n      properties:\n        LSMinimumSystemVersion: $(MACOSX_DEPLOYMENT_TARGET)\n        NSMainStoryboardFile: Main\n        NSPrincipalClass: NSApplication\n        CFBundleIconFile: \"\"\n        CustomSetting: $CUSTOM_SETTING\n    attributes:\n      ProvisioningStyle: Automatic\n    sources:\n      - path: App_macOS\n      - path: StandaloneFiles/Standalone.swift\n      - path: Vendor/SomeXPCService.xpc\n      - path: NonExisting\n        optional: true\n    dependencies:\n      - target: Framework_macOS\n        copy:\n            destination: plugins\n            subpath: \"test\"\n      - target: XPC Service\n      - target: NetworkSystemExtension\n      - target: EndpointSecuritySystemExtension\n      - target: DriverKitDriver\n      - sdk: Contacts.framework\n      - sdk: libc++.tbd\n      - sdk: libz.dylib\n    putResourcesBeforeSourcesBuildPhase: true\n\n  App_iOS:\n    type: application\n    platform: iOS\n    attributes:\n      ProvisioningStyle: Automatic\n    sources:\n      - StandaloneFiles/StandaloneAssets.xcassets\n      - path: App_iOS\n        name: App\n        compilerFlags:\n          - \"-Werror\"\n        excludes:\n          - \"**/excluded-file\"\n          - \"excluded-file\"\n          - \"Model.xcmappingmodel\"\n          - \"Configuration.storekit\"\n      - path: App_iOS\n        name: App\n        includes:\n          - \"Model.xcmappingmodel\"\n      - path: StandaloneFiles/Standalone.swift\n      - FileGroup/UnderFileGroup\n      - Resources/MyBundle.bundle\n      - Resources/SceneKitCatalog.scnassets\n      - Resources/GoogleService-Info.plist\n      - path: Resources/ResourceFolder\n        type: folder\n      - path: Folder\n        type: folder\n        buildPhase: none\n        group: CustomGroup\n      - path: Mintfile\n        type: file\n        buildPhase: none\n        group: CustomGroup\n      - path: Group/File1.swift\n        group: CustomGroup\n      - path: Group2/File2.swift\n        group: CustomGroup\n      - path: CopyFiles\n        buildPhase:\n          copyFiles:\n            destination: productsDirectory\n            subpath: include/$(PRODUCT_NAME)\n      - path: Resources/example.mp4\n        buildPhase: resources\n        resourceTags:\n          - tag1\n          - tag2\n      - String Catalogs/LocalizableStrings.xcstrings\n      - path: SyncedFolder\n        type: syncedFolder\n        excludes:\n          - ExcludedFile.swift\n          - Info.plist\n        explicitFolders:\n          - Resources\n          - \"**/*Tests\"\n      - path: SyncedParent/SyncedChild\n        type: syncedFolder\n        createIntermediateGroups: true\n    settings:\n      INFOPLIST_FILE: App_iOS/Info.plist\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.app\n    dependencies:\n      - target: Framework_iOS\n        platformFilter: all\n      - target: StaticLibrary_ObjC_iOS\n      - target: Framework2_iOS\n        weak: true\n        platformFilter: iOS\n      - target: App_watchOS\n      - target: iMessageApp\n      - sdk: Contacts.framework\n      - bundle: BundleX.bundle\n      - { bundle: BundleY.bundle, codeSign: false }\n      - target: AnotherProject/ExternalTarget\n      - target: App_Clip\n      - package: Swinject\n        product: Swinject\n        platformFilter: iOS\n# https://github.com/yonaskolb/XcodeGen/issues/1232\n# After GitHub Actions start supporting Xcode 14, an example for extensionKit should be added.\n#      - target: ExtensionKitExtension\n    onlyCopyFilesOnInstall: true\n    scheme:\n      testTargets:\n        - App_iOS_Tests\n        - App_iOS_UITests\n      gatherCoverageData: true\n      coverageTargets:\n        - App_iOS\n      disableMainThreadChecker: true\n      stopOnEveryMainThreadCheckerIssue: true\n      configVariants:\n        - Test\n        - Staging\n        - Production\n      commandLineArguments:\n          MyEnabledArgument: true\n          MyDisabledArgument: false\n      storeKitConfiguration: \"App_iOS/Configuration.storekit\"\n    postbuildScripts:\n      - path: scripts/strip-frameworks.sh\n        name: Strip Unused Architectures from Frameworks\n        runOnlyWhenInstalling: true\n        basedOnDependencyAnalysis: false\n      - name: MyScript\n        script: |\n          echo \"You ran a script!\"\n          touch \"${DERIVED_FILE_DIR}/target.d\"\n        inputFileLists:\n          - App_iOS/inputList.xcfilelist\n        outputFileLists:\n          - App_iOS/outputList.xcfilelist\n        discoveredDependencyFile: $(DERIVED_FILE_DIR)/target.d\n\n  EntitledApp:\n    type: application\n    platform: iOS\n    entitlements:\n      path: App_iOS/App.entitlements\n      properties:\n        com.apple.security.application-groups: group.com.app\n\n  App_supportedDestinations:\n    type: application\n    supportedDestinations: [iOS, tvOS]\n    info:\n      path: App_supportedDestinations/Info.generated.plist\n      properties:\n        CFBundleDisplayName: \"TestApp\"\n        CFBundleVersion: \"1.0.0\"\n    settings:\n      base:\n        PRODUCT_BUNDLE_IDENTIFIER: com.test.TestApp\n    sources:\n      - path: App_supportedDestinations/Sources\n        group: App_supportedDestinations\n        inferDestinationFiltersByPath: true\n      - path: App_supportedDestinations/Storyboards\n        group: App_supportedDestinations\n        destinationFilters: [iOS]\n    dependencies:\n      - package: Swinject\n        product: Swinject\n        destinationFilters: [tvOS]\n\n  App_watchOS:\n      type: application.watchapp2\n      platform: watchOS\n      deploymentTarget: 4.0\n      sources:\n        App_watchOS\n      settings:\n        PRODUCT_BUNDLE_IDENTIFIER: com.project.app.watch\n      dependencies:\n        - target: App_watchOS Extension\n      templates: [MyTemplate]\n\n  App_watchOS Extension:\n      type: watchkit2-extension\n      platform: watchOS\n      sources:\n        App_watchOS Extension\n      settings:\n        PRODUCT_BUNDLE_IDENTIFIER: com.project.app.watch.extension\n\n  iMessageApp:\n    type: application.messages\n    platform: iOS\n    sources: iMessageApp\n    scheme: {}\n    dependencies:\n      - target: iMessageExtension\n\n  iMessageExtension:\n    type: app-extension.messages\n    platform: iOS\n    sources: iMessageExtension\n    settings:\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.iMessageApp.extension\n    scheme: {}\n\n  iMessageStickersExtension:\n    type: app-extension.messages-sticker-pack\n    platform: iOS\n    sources:\n      - path: iMessageStickers\n\n  DriverKitDriver:\n    platform: macOS\n    type: driver-extension\n    sources:\n      - DriverKit Driver\n    settings:\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.App-macOS.Driver\n      CODE_SIGN_ENTITLEMENTS: DriverKit Driver/Driver.entitlements\n      SDKROOT: driverkit\n      DRIVERKIT_DEPLOYMENT_TARGET: 20.4\n    scheme: {}\n    dependencies:\n      - sdk: DriverKit.framework\n\n  NetworkSystemExtension:\n    platform: macOS\n    type: system-extension\n    sources:\n      - Network Extension\n    settings:\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.App-macOS.NetworkExtension\n      CODE_SIGN_ENTITLEMENTS: Network Extension/NetworkExtension.entitlements\n    scheme: {}\n    dependencies:\n      - sdk: NetworkExtension.framework\n\n  EndpointSecuritySystemExtension:\n    platform: macOS\n    type: system-extension\n    sources:\n      - EndpointSecurity Extension\n    settings:\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.App-macOS.EndpointSecurity\n      CODE_SIGN_ENTITLEMENTS: EndpointSecurity Extension/EndpointSecurity.entitlements\n    scheme: {}\n    dependencies:\n      - sdk: libEndpointSecurity.tbd\n\n  StaticLibrary_ObjC:\n    type: library.static\n    platform: [iOS, tvOS, watchOS, macOS]\n    sources: StaticLibrary_ObjC\n\n  StaticLibrary_Swift:\n    type: library.static\n    platform: iOS\n    sources: StaticLibrary_Swift\n\n  Framework:\n    type: framework\n    platform: [iOS, tvOS, watchOS, macOS]\n    sources:\n      - path: Framework\n        excludes:\n          - \"*.xcodeproj\"\n      - path: Headers\n        buildPhase: headers\n        type: folder\n        headerVisibility: public\n    postbuildScripts:\n      - name: MyScript\n        path: scripts/script.sh\n    dependencies:\n      - target: StaticLibrary_ObjC_${platform}\n      - target: Framework2_${platform}\n        platforms: [tvOS, watchOS]\n\n  Framework2:\n    type: framework\n    platform: [iOS, tvOS, watchOS, macOS]\n    sources:\n      - path: Framework\n        excludes:\n          - \"*.xcodeproj\"\n  TestFramework:\n    type: framework\n    platform: iOS\n    sources:\n      - path: Framework\n        excludes:\n          - \"*.xcodeproj\"\n    dependencies:\n      - sdk: Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework\n        root: DEVELOPER_DIR\n\n  CrossOverlayFramework:\n    type: framework\n    platform: [iOS, tvOS, watchOS, macOS]\n    sources:\n      - path: CrossOverlayFramework\n        excludes:\n          - \"*.xcodeproj\"\n\n  App_iOS_Tests:\n    type: bundle.unit-test\n    platform: iOS\n    sources: App_iOS_Tests\n    dependencies:\n      - target: App_iOS\n      - target: TestFramework\n  App_iOS_UITests:\n    type: bundle.ui-testing\n    platform: iOS\n    sources: App_iOS_UITests\n    dependencies:\n      - target: App_iOS\n\n  App_macOS_Tests:\n    type: bundle.unit-test\n    platform: macOS\n    sources: App_macOS_Tests\n    dependencies:\n      - target: App_macOS\n\n  XPC Service:\n    type: xpc-service\n    platform: macOS\n    sources:\n      - path: XPC Service\n\n  Tool:\n    type: tool\n    platform: macOS\n    sources: [Tool]\n    scheme: {}\n\n  App_Clip:\n    type: application.on-demand-install-capable\n    platform: iOS\n    entitlements:\n      path: App_Clip/Clip.entitlements\n      properties:\n        com.apple.developer.parent-application-identifiers: [$(AppIdentifierPrefix)com.project.appwithclip]\n        com.apple.security.application-groups: group.com.app\n    sources:\n      App_Clip\n    settings:\n      INFOPLIST_FILE: App_Clip/Info.plist\n      PRODUCT_BUNDLE_IDENTIFIER: com.project.app.clip\n    dependencies:\n      - target: Framework_iOS\n      - target: StaticLibrary_ObjC_iOS\n      - target: AnotherProject/ExternalTarget\n    scheme:\n      testTargets:\n        - App_Clip_Tests\n        - App_Clip_UITests\n\n  App_Clip_Tests:\n    type: bundle.unit-test\n    platform: iOS\n    sources: App_iOS_Tests\n    dependencies:\n      - target: App_Clip\n      - target: TestFramework\n\n  App_Clip_UITests:\n    type: bundle.ui-testing\n    platform: iOS\n    sources: App_Clip_UITests\n    dependencies:\n      - target: App_Clip\n# https://github.com/yonaskolb/XcodeGen/issues/1232\n# After GitHub Actions start supporting Xcode 14, an example for extensionKit should be added.\n#  ExtensionKitExtension:\n#    type: extensionkit-extension\n#    platform: iOS\n#    sources: ExtensionKit Extension\n\nschemes:\n  Framework:\n    build:\n      parallelizeBuild: false\n      buildImplicitDependencies: false\n      targets:\n        Framework_iOS: all\n      preActions:\n        - script: echo Starting Framework Build\n          settingsTarget: Framework_iOS\n      runPostActionsOnFailure: true\n    run:\n      commandLineArguments:\n        argument: YES\n        argument.with.dot: YES\n    test:\n      gatherCoverageData: true\n      language: ja\n      region: en\n  App_Scheme:\n    build:\n      targets:\n        App_iOS: all\n    run:\n      simulateLocation:\n        allow: true\n        defaultLocation: Honolulu, HI, USA\n      customLLDBInit: ${SRCROOT}/.lldbinit\n      enableGPUFrameCaptureMode: \"disabled\"\n      enableGPUValidationMode: false\n      storeKitConfiguration: \"App_iOS/Configuration.storekit\"\n      macroExpansion: App_iOS\n    test:\n      gatherCoverageData: true\n      targets:\n        - App_iOS_UITests\n        - name: App_iOS_Tests\n          parallelizable: true\n          randomExecutionOrder: true\n          location: New York, NY, USA\n      customLLDBInit: ${SRCROOT}/.lldbinit\n      testPlans:\n        - path: App_iOS/App_iOS.xctestplan\ntargetTemplates:\n  MyTemplate:\n    scheme: {}\naggregateTargets:\n  SuperTarget:\n    attributes:\n      CUSTOM: value\n    targets:\n      - App_iOS\n      - Framework_iOS\n    settings:\n      MY_SETTING: hello\n    buildScripts:\n      - name: MyScript\n        script: echo \"do the thing\"\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/scripts/script.sh",
    "content": "echo \"You ran a script\"\n"
  },
  {
    "path": "Tests/Fixtures/TestProject/scripts/strip-frameworks.sh",
    "content": "################################################################################\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"
  },
  {
    "path": "Tests/Fixtures/TestProject/xcode12_13_and_14_workaround.xcconfig",
    "content": "//\n// See https://github.com/Carthage/Carthage/issues/3019\n//\n// Skips building ARM slices for simulators until Carthage can support it\n//\n\nEXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8\nEXCLUDED_ARCHS_1200=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))\nEXCLUDED_ARCHS_1300=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))\nEXCLUDED_ARCHS_1400=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))\nEXCLUDED_ARCHS=$(inherited) $(EXCLUDED_ARCHS_$(XCODE_VERSION_MAJOR))\n"
  },
  {
    "path": "Tests/Fixtures/duplicated_include/different_path/duplicated_import_root.yml",
    "content": "name: DuplicatedImportRoot\nfileGroups:\n  - Third\n"
  },
  {
    "path": "Tests/Fixtures/duplicated_include/duplicated_import_root.yml",
    "content": "name: DuplicatedImportRoot\nfileGroups:\n  - First\n  - Second\ntargetTemplates:\n  IncludedTemplate:\n    type: application\n    platform: iOS\n    sources:\n      - template\n    preBuildScripts:\n      - script: swiftlint\n        name: Swiftlint\n"
  },
  {
    "path": "Tests/Fixtures/duplicated_include/duplicated_import_sut.yml",
    "content": "include: \n  - duplicated_import_transitive.yml\n  - duplicated_import_root.yml\n  - duplicated_import_root.yml\n  - path: different_path/duplicated_import_root.yml\n    relativePaths: false\nname: DuplicatedImportDependent\ntargets:\n  IncludedTarget:\n    templates:\n      - IncludedTemplate"
  },
  {
    "path": "Tests/Fixtures/duplicated_include/duplicated_import_transitive.yml",
    "content": "include: \n  - duplicated_import_root.yml\nname: DuplicatedImportTransitive\n"
  },
  {
    "path": "Tests/Fixtures/include_test.json",
    "content": "{\n  \"include\": [\n    \"included.yml\"\n  ],\n  \"name\": \"NewName\",\n  \"settingGroups\": {\n    \"test\": {\n      \"MY_SETTING1\": \"NEW VALUE\",\n      \"MY_SETTING3\": \"VALUE3\"\n    },\n    \"new\": {\n      \"MY_SETTING\": \"VALUE\"\n    },\n    \"toReplace:REPLACE\": {\n      \"MY_SETTING2\": \"VALUE2\"\n    }\n  },\n  \"targets\": {\n    \"NewTarget\": {\n      \"type\": \"application\",\n      \"platform\": \"iOS\"\n    },\n    \"IncludedTarget\": {\n      \"name\": \"IncludedTargetNew\",\n      \"platform\": \"tvOS\",\n      \"sources:REPLACE\": \"NewSource\"\n    }\n  }\n}\n"
  },
  {
    "path": "Tests/Fixtures/include_test.yml",
    "content": "include:\n    - included.yml\n    - path: included_additional.yml\n      enable: ${INCLUDE_ADDITIONAL_YAML}\npackages:\n  Yams:\n    url: https://github.com/jpsim/Yams\n    majorVersion: 2.0.0\nname: NewName\nsettingGroups:\n  test:\n    MY_SETTING1: NEW VALUE\n    MY_SETTING3: VALUE3\n  new:\n    MY_SETTING: VALUE\n  toReplace:REPLACE:\n    MY_SETTING2: VALUE2\ntargets:\n  NewTarget:\n    type: application\n    platform: iOS\n    templates: [IncludedTemplate]\n    sources:\n      - target\n  IncludedTarget:\n    name: IncludedTargetNew\n    platform: tvOS\n    sources:REPLACE: NewSource\n    dependencies:\n      - package: Yams\n"
  },
  {
    "path": "Tests/Fixtures/included.yml",
    "content": "name: Included\nsettingGroups:\n  test:\n    MY_SETTING1: VALUE1\n    MY_SETTING2: VALUE2\n    MY_SETTING4: ${SETTING4}\n  toReplace:\n    MY_SETTING1: VALUE1\ntargets:\n  IncludedTarget:\n    type: application\n    platform: iOS\n    sources:\n      - Target\ntargetTemplates:\n  IncludedTemplate:\n    sources:\n      - template\n"
  },
  {
    "path": "Tests/Fixtures/included_additional.yml",
    "content": "name: Included_Additional\nsettingGroups:\n  test:\n    MY_SETTING5: ADDITIONAL\npackages:\n  SwiftPM:\n    url: https://github.com/apple/swift-package-manager\n    branch: swift-5.0-branch\ntargets:\n  IncludedTarget:\n    dependencies:\n      - package: SwiftPM\n"
  },
  {
    "path": "Tests/Fixtures/invalid_configs/invalid_configs_value_non_mapping_aggregate_targets.yml",
    "content": "name: InvalidConfigsValueNonMappingAggregateTargets\n\n# This fixture tests validation of `settings.configs` under an aggregate target.\n# Here, `invalid_key0` and `invalid_key1` are scalar values (not mappings),\n# so parsing should throw SpecParsingError.invalidConfigsMappingFormat.\ntargets:\n  valid_target1:\n    type: application\n    platform: iOS\n  valid_target2:\n    type: application\n    platform: iOS\n\naggregateTargets:\n  invalid_target:\n    targets:\n      - valid_target1\n      - valid_target2\n    settings:\n      configs:\n        invalid_key0: value0\n        debug:\n          valid_key: value1\n        invalid_key1: value2\n"
  },
  {
    "path": "Tests/Fixtures/invalid_configs/invalid_configs_value_non_mapping_setting_groups.yml",
    "content": "name: InvalidConfigsValueNonMappingSettingGroups\n\n# This fixture tests validation of `settings.configs` under an aggregate target.\n# Here, `invalid_key0` and `invalid_key1` are scalar values (not mappings),\n# so parsing should throw SpecParsingError.invalidConfigsMappingFormat.\nsettingGroups:\n  invalid_preset:\n    configs:\n      invalid_key0: value0\n      debug:\n        valid_key: value1\n      invalid_key1: value2\ntargets:\n  invalid_target:\n    type: application\n    platform: iOS\n    settings:\n      groups:\n        - invalid_preset\n"
  },
  {
    "path": "Tests/Fixtures/invalid_configs/invalid_configs_value_non_mapping_settings.yml",
    "content": "name: InvalidConfigsValueNonMappingSettings\n\n# This fixture tests validation of `settings.configs` at the top level.\n# Here, `invalid_key0` and `invalid_key1` are scalar values (not mappings),\n# so parsing should throw SpecParsingError.invalidConfigsMappingFormat.\nsettings:\n  configs:\n    invalid_key0: value0\n    debug:\n      valid_key: value1\n    invalid_key1: value2\n"
  },
  {
    "path": "Tests/Fixtures/invalid_configs/invalid_configs_value_non_mapping_targets.yml",
    "content": "name: InvalidConfigsValueNonMappingTargets\n\n# This fixture tests nested validation of `settings.configs` under a target.\n# Here, `invalid_key0` and `invalid_key1` are scalar values (not mappings),\n# so parsing should throw SpecParsingError.invalidConfigsMappingFormat.\ntargets:\n  invalid_target:\n    type: application\n    platform: iOS\n    settings:\n      configs:\n        invalid_key0: value0\n        debug:\n          valid_key: value1\n        invalid_key1: value2\n"
  },
  {
    "path": "Tests/Fixtures/legacy_paths_test/legacy_included_paths_test.yml",
    "content": "configFiles:\n  IncludedConfig: config\ninclude:\n  - path: legacy_paths_test/recursive_include.yml\n    relativePaths: false\noptions:\n  carthageBuildPath: carthage_build\n  carthageExecutablePath: carthage_executable\ntargets:\n  IncludedTarget:\n    type: application\n    platform: tvOS\n    configFiles:\n      Config: config\n    dependencies:\n      - framework: Framework\n    info:\n      path: info\n    entitlements:\n      path: entitlements\n    preBuildScripts:\n    - path: preBuildScript\n    postCompileScripts:\n    - path: postCompileScript\n    postBuildScripts:\n    - path: postBuildScript\naggregateTargets:\n  IncludedAggregateTarget:\n    targets:\n      - IncludedTarget\n    configFiles:\n      Config: config\n    buildScripts:\n    - path: buildScript\n"
  },
  {
    "path": "Tests/Fixtures/legacy_paths_test/recursive_include.yml",
    "content": "targets:\n  IncludedTarget:\n    sources:\n      - source\n"
  },
  {
    "path": "Tests/Fixtures/legacy_paths_test.yml",
    "content": "include:\n  path: legacy_paths_test/legacy_included_paths_test.yml\n  relativePaths: false\nname: NewName\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/included_paths_test.yml",
    "content": "name: IncludedPathsTest\ninclude:\n  - recursive_test/recursive_test.yml\n  - same_relative_path_test/same_relative_path_test.yml\n  - path: relative_local_package/inc.yml\n    relativePaths: true\n  - path: relative_file_groups/inc.yml\n    relativePaths: true\nconfigFiles:\n  IncludedConfig: config\nprojectReferences:\n  ProjX: { path: ../TestProject/Project.xcodeproj }\ntargets:\n  IncludedTarget:\n    type: application\n    platform: tvOS\n    configFiles:\n      Config: config\n    sources:\n      - simplesource\n      - path: source\n        excludes: [file]\n    dependencies:\n      - framework: Framework\n    info:\n      path: info\n    entitlements:\n      path: entitlements\n    preBuildScripts:\n      - path: preBuildScript\n    postCompileScripts:\n      - path: postCompileScript\n    postBuildScripts:\n      - path: postBuildScript\n    scheme:\n      testPlans:\n        - path: TestPlan.xctestplan\naggregateTargets:\n  IncludedAggregateTarget:\n    targets:\n      - IncludedTarget\n    configFiles:\n      Config: config\n    buildScripts:\n    - path: buildScript\ntargetTemplates:\n  Template1:\n    sources:\n      - template_source\nschemes:\n  Scheme:\n    build:\n      targets:\n        NewTarget: all\n    test:\n      testPlans:\n        - path: TestPlan.xctestplan\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/recursive_test/recursive_test.yml",
    "content": "options:\n  carthageBuildPath: carthage_build\n  carthageExecutablePath: carthage_executable\nconfigFiles:\n  RecursiveConfig: config\ntargets:\n  RecursiveTarget:\n    type: application\n    platform: macOS\n    configFiles:\n      Config: config\n    sources:\n      - source\n    dependencies:\n      - framework: Framework\n    info:\n      path: info\n    entitlements:\n      path: entitlements\n    prebuildScripts:\n    - path: prebuildScript\n    postCompileScripts:\n    - path: postCompileScript\n    postBuildScripts:\n    - path: postBuildScript\naggregateTargets:\n  RecursiveAggregateTarget:\n    targets:\n      - RecursiveTarget\n    configFiles:\n      Config: config\n    buildScripts:\n    - path: buildScript\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/relative_file_groups/TestFile.md",
    "content": "This is a test file for relative file groups\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/relative_file_groups/inc.yml",
    "content": "fileGroups:\n  - TestFile.md\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/relative_local_package/LocalPackage/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\nxcuserdata/\nDerivedData/\n.swiftpm/configuration/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/relative_local_package/LocalPackage/Package.swift",
    "content": "// swift-tools-version: 5.7\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"LocalPackage\",\n    products: [\n        // Products define the executables and libraries a package produces, making them visible to other packages.\n        .library(\n            name: \"LocalPackage\",\n            targets: [\"LocalPackage\"]\n        )\n    ],\n    targets: [\n        // Targets are the basic building blocks of a package, defining a module or a test suite.\n        // Targets can depend on other targets in this package and products from dependencies.\n        .target(name: \"LocalPackage\")\n    ]\n)\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/relative_local_package/LocalPackage/Sources/LocalPackage/LocalPackage.swift",
    "content": "// The Swift Programming Language\n// https://docs.swift.org/swift-book\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/relative_local_package/inc.yml",
    "content": "packages:\n  LocalPackage:\n    path: LocalPackage\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/parent1/parent1.yml",
    "content": "include:\n- same/same.yml\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/parent1/same/same.yml",
    "content": "include:\n- target1/target1.yml\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/parent1/same/target1/target1.yml",
    "content": "targets:\n  target1:\n    type: framework\n    platform: macOS\n    sources:\n    - source\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/parent2/parent2.yml",
    "content": "include:\n- same/same.yml\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/parent2/same/same.yml",
    "content": "include:\n- target2/target2.yml\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/parent2/same/target2/target2.yml",
    "content": "targets:\n  target2:\n    type: framework\n    platform: macOS\n    sources:\n    - source\n"
  },
  {
    "path": "Tests/Fixtures/paths_test/same_relative_path_test/same_relative_path_test.yml",
    "content": "include:\n- parent1/parent1.yml\n- parent2/parent2.yml\ntargets:\n  app:\n    type: application\n    platform: macOS\n    sources:\n    - source\n    dependencies:\n    - target: target1\n    - target: target2\n"
  },
  {
    "path": "Tests/Fixtures/paths_test.yml",
    "content": "include: paths_test/included_paths_test.yml\nname: NewName\nconfigFiles:\n  NewConfig: config\ntargets:\n  NewTarget:\n    type: application\n    platform: iOS\n    templates: [Template1]\n    configFiles:\n      Config: config\n    sources:\n      - source\n    dependencies:\n      - framework: Framework\n    info:\n      path: info\n    entitlements:\n      path: entitlements\n    preBuildScripts:\n    - path: preBuildScript\n    postCompileScripts:\n    - path: postCompileScript\n    postBuildScripts:\n    - path: postBuildScript\naggregateTargets:\n  NewAggregateTarget:\n    targets:\n      - NewTarget\n    configFiles:\n      Config: config\n    buildScripts:\n    - path: buildScript\n"
  },
  {
    "path": "Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 77;\n\tobjects = {\n\n/* Begin PBXFileReference section */\n\t\t5FE827133AD803E389008F92 /* Shared_TargetScheme.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = Shared_TargetScheme.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9194D98A5CC4C58074AED541 /* ExternalTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExternalTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXGroup section */\n\t\t2D08B11F4EE060D112B7BCA1 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5B8D13EAC88739DF2D92F8AE /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5B8D13EAC88739DF2D92F8AE /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9194D98A5CC4C58074AED541 /* ExternalTarget.framework */,\n\t\t\t\t5FE827133AD803E389008F92 /* Shared_TargetScheme.bundle */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t370BCE474732AA3FDEE3019C /* ExternalTarget */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 983F6F982C3E47042EB01009 /* Build configuration list for PBXNativeTarget \"ExternalTarget\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF568C5AE0A56AB4B50C2CDDC /* Sources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ExternalTarget;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = ExternalTarget;\n\t\t\tproductReference = 9194D98A5CC4C58074AED541 /* ExternalTarget.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t7D5ECBED52C0D723572BDC7A /* Shared_TargetScheme */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = FF87BC5AF9E43A6A84F165D0 /* Build configuration list for PBXNativeTarget \"Shared_TargetScheme\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Shared_TargetScheme;\n\t\t\tpackageProductDependencies = (\n\t\t\t);\n\t\t\tproductName = Shared_TargetScheme;\n\t\t\tproductReference = 5FE827133AD803E389008F92 /* Shared_TargetScheme.bundle */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t8702E0566EC7EF0ABE948569 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = YES;\n\t\t\t\tLastUpgradeCheck = 1430;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = E903F6E8184E2A86CEC31778 /* Build configuration list for PBXProject \"TestProject\" */;\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 2D08B11F4EE060D112B7BCA1;\n\t\t\tminimizedProjectReferenceProxies = 1;\n\t\t\tpreferredProjectObjectVersion = 77;\n\t\t\tproductRefGroup = 5B8D13EAC88739DF2D92F8AE /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t370BCE474732AA3FDEE3019C /* ExternalTarget */,\n\t\t\t\t7D5ECBED52C0D723572BDC7A /* Shared_TargetScheme */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tF568C5AE0A56AB4B50C2CDDC /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1030670B17865EFEEDFC485B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2342CD0E4856A52DA47045D5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t7A68130BD0BC3B52C0C49426 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE03B593805F20F9465213BC5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEC8D269E955A03687C9CC471 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEFFEE19ADA3596D4D0EDD264 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t983F6F982C3E47042EB01009 /* Build configuration list for PBXNativeTarget \"ExternalTarget\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2342CD0E4856A52DA47045D5 /* Debug */,\n\t\t\t\t7A68130BD0BC3B52C0C49426 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tE903F6E8184E2A86CEC31778 /* Build configuration list for PBXProject \"TestProject\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE03B593805F20F9465213BC5 /* Debug */,\n\t\t\t\t1030670B17865EFEEDFC485B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tFF87BC5AF9E43A6A84F165D0 /* Build configuration list for PBXNativeTarget \"Shared_TargetScheme\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEC8D269E955A03687C9CC471 /* Debug */,\n\t\t\t\tEFFEE19ADA3596D4D0EDD264 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 8702E0566EC7EF0ABE948569 /* Project object */;\n}\n"
  },
  {
    "path": "Tests/Fixtures/scheme_test/TestProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Tests/Fixtures/scheme_test/TestProject.xcodeproj/xcshareddata/xcschemes/ExternalTarget.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"370BCE474732AA3FDEE3019C\"\n               BuildableName = \"ExternalTarget.framework\"\n               BlueprintName = \"ExternalTarget\"\n               ReferencedContainer = \"container:TestProject.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"370BCE474732AA3FDEE3019C\"\n            BuildableName = \"ExternalTarget.framework\"\n            BlueprintName = \"ExternalTarget\"\n            ReferencedContainer = \"container:TestProject.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"370BCE474732AA3FDEE3019C\"\n            BuildableName = \"ExternalTarget.framework\"\n            BlueprintName = \"ExternalTarget\"\n            ReferencedContainer = \"container:TestProject.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <CommandLineArguments>\n      </CommandLineArguments>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"370BCE474732AA3FDEE3019C\"\n            BuildableName = \"ExternalTarget.framework\"\n            BlueprintName = \"ExternalTarget\"\n            ReferencedContainer = \"container:TestProject.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/scheme_test/TestProject.xcodeproj/xcshareddata/xcschemes/Shared_TargetScheme.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1430\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      runPostActionsOnFailure = \"NO\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"7D5ECBED52C0D723572BDC7A\"\n               BuildableName = \"Shared_TargetScheme.bundle\"\n               BlueprintName = \"Shared_TargetScheme\"\n               ReferencedContainer = \"container:TestProject.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      onlyGenerateCoverageForSpecifiedTargets = \"NO\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7D5ECBED52C0D723572BDC7A\"\n            BuildableName = \"Shared_TargetScheme.bundle\"\n            BlueprintName = \"Shared_TargetScheme\"\n            ReferencedContainer = \"container:TestProject.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7D5ECBED52C0D723572BDC7A\"\n            BuildableName = \"Shared_TargetScheme.bundle\"\n            BlueprintName = \"Shared_TargetScheme\"\n            ReferencedContainer = \"container:TestProject.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <CommandLineArguments>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <CommandLineArguments>\n      </CommandLineArguments>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7D5ECBED52C0D723572BDC7A\"\n            BuildableName = \"Shared_TargetScheme.bundle\"\n            BlueprintName = \"Shared_TargetScheme\"\n            ReferencedContainer = \"container:TestProject.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tests/Fixtures/scheme_test/test_project.yml",
    "content": "name: TestProject\nschemes:\n  User_ProjectScheme:\n    build:\n      targets:\n        ExternalTarget: all\n    management:\n      shared: false\n      orderHint: 1\n      isShown: true\ntargets:\n  ExternalTarget:\n    type: framework\n    platform: iOS\n    scheme:\n      management:\n        shared: true\n        isShown: false\n  Shared_TargetScheme:\n    type: bundle\n    platform: iOS\n    scheme:\n      management:\n        orderHint: 0"
  },
  {
    "path": "Tests/Fixtures/settings_test.yml",
    "content": "settings:\n  BUILD_SETTING_1: value\n  BUILD_SETTING_2: value 2\n\nsettings:\n  base:\n    BUILD_SETTING_1: value 1\n  configs:\n    my_config:\n      BUILD_SETTING_2: value 2\n  groups:\n    - my_settings\n\nname: SettingsTest\nsettingGroups:\n  preset1:\n    SETTING: value\n  preset2:\n    configs:\n      config1:\n        SETTING1: value\n  preset3:\n    base:\n      SETTING: value\n    configs:\n      config1:\n        SETTING1: value\n  preset4:\n    base:\n      SETTING: value\n  preset5:\n    groups:\n      - preset1\n    base:\n      SETTING: value\n  preset6:\n    groups:\n      - preset1\n    base:\n      SETTING: value\n    configs:\n      config1:\n        SETTING1: value\n  preset7:\n    base:\n      SETTING: value\n    configs:\n      config1:\n        groups:\n          - preset1\n        base:\n          SETTING: value\n  preset8:\n    configs:\n      config1:\n        configs:\n          config1:\n            SETTING1: value\nsettings:\n  base:\n    SETTING 5: value 5\n  groups:\n    - preset7\n  configs:\n    config1:\n      SETTING 6: value 6\nconfigs:\n  config1: debug\n  config2: release\ntargets:\n  Target:\n    type: application\n    platform: iOS\n    settings:\n      groups:\n        - preset7\n      base:\n        SETTING 2: value 2\n      configs:\n        config1:\n          groups:\n            - preset1\n          base:\n            SETTING 3: value 3\n"
  },
  {
    "path": "Tests/Fixtures/test.xcconfig",
    "content": ""
  },
  {
    "path": "Tests/Fixtures/variables_test.yml",
    "content": "include: [included.yml]\nname: NewName\nsettingGroups:\n  test:\n    MY_SETTING1: ${SETTING1}\ntargets:\n  SomeTarget:\n    type: framework\n    platform: iOS\n    templates:\n      - Variables\n    templateAttributes:\n      templateVariable: templateVariable\n      variable: doesNotWin\ntargetTemplates:\n  Variables:\n    sources:\n      - ${target_name}\n      - ${variable}\n      - ${templateVariable}\n"
  },
  {
    "path": "Tests/Fixtures/yaml.yml",
    "content": "true: true\nfalse: false\nyes: YES\nno: NO\nyesQuote: \"YES\"\nnoQuote: \"NO\"\nint: 1\nintQuote: \"1\"\nfloat: 3.2\nfloatQuote: \"10.10\"\nstring: hello\nstringQuote: \"hello\"\nspace: \" \"\nempty:\nemptyQuote: \"\"\nemptyDictionary: {}\narrayLiteral: [1,2]\narrayList:\n  - 1\n  - 2\n"
  },
  {
    "path": "Tests/LinuxMain.swift",
    "content": "// LinuxMain.swift\nfatalError(\"Run the tests with `swift test --enable-test-discovery`.\")\n\n"
  },
  {
    "path": "Tests/PerformanceTests/PerformanceTests.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport TestSupport\nimport XcodeGenKit\nimport XcodeProj\nimport XCTest\n\nclass GeneratedPerformanceTests: XCTestCase {\n\n    let basePath = Path.temporary + \"XcodeGenPeformanceTests\"\n\n    func testLoading() throws {\n        let project = try Project.testProject(basePath: basePath)\n        let specPath = basePath + \"project.yaml\"\n        try dumpYamlDictionary(project.toJSONDictionary(), path: specPath)\n\n        measure {\n            let spec = try! SpecFile(path: specPath,\n                                     variables: ProcessInfo.processInfo.environment)\n            _ = spec.resolvedDictionary()\n        }\n    }\n\n    func testGeneration() throws {\n        let project = try Project.testProject(basePath: basePath)\n        measure {\n            let generator = ProjectGenerator(project: project)\n            _ = try! generator.generateXcodeProject(userName: \"someUser\")\n        }\n    }\n\n    func testWriting() throws {\n        let project = try Project.testProject(basePath: basePath)\n        let generator = ProjectGenerator(project: project)\n        let xcodeProject = try generator.generateXcodeProject(userName: \"someUser\")\n        measure {\n            xcodeProject.pbxproj.invalidateUUIDs()\n            try! xcodeProject.write(path: project.defaultProjectPath)\n        }\n    }\n}\n\nlet fixturePath = Path(#file).parent().parent() + \"Fixtures\"\n\nclass FixturePerformanceTests: XCTestCase {\n\n    let specPath = fixturePath + \"TestProject/project.yml\"\n\n    func testFixtureDecoding() throws {\n        measure {\n            _ = try! Project(path: specPath)\n        }\n    }\n\n    func testCacheFileGeneration() throws {\n        let specLoader = SpecLoader(version: \"1.2\")\n        _ = try specLoader.loadProject(path: specPath)\n\n        measure {\n            _ = try! specLoader.generateCacheFile()\n        }\n    }\n\n    func testFixtureGeneration() throws {\n        try skipIfNecessary()\n        let project = try Project(path: specPath)\n        measure {\n            let generator = ProjectGenerator(project: project)\n            _ = try! generator.generateXcodeProject(userName: \"someUser\")\n        }\n    }\n\n    func testFixtureWriting() throws {\n        try skipIfNecessary()\n        let project = try Project(path: specPath)\n        let generator = ProjectGenerator(project: project)\n        let xcodeProject = try generator.generateXcodeProject(userName: \"someUser\")\n        measure {\n            xcodeProject.pbxproj.invalidateUUIDs()\n            try! xcodeProject.write(path: project.defaultProjectPath)\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/PerformanceTests/TestProject.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport XcodeProj\n\nextension Project {\n\n    static func testProject(basePath: Path, createSources: Bool = true) throws -> Project {\n\n        if createSources {\n            try? basePath.delete()\n            try basePath.mkpath()\n        }\n\n        var paths: [Path] = []\n        var targets: [Target] = []\n        let scheme = TargetScheme(\n            testTargets: [],\n            configVariants: [\"Test\", \"Staging\", \"Prod\"],\n            gatherCoverageData: true,\n            storeKitConfiguration: \"Configuration.storekit\",\n            disableMainThreadChecker: true,\n            stopOnEveryMainThreadCheckerIssue: false,\n            commandLineArguments: [\n                \"--command\": true,\n                \"--command2\": false,\n            ],\n            environmentVariables: [\n                XCScheme.EnvironmentVariable(variable: \"ENV\", value: \"HELLO\", enabled: true),\n                XCScheme.EnvironmentVariable(variable: \"ENV2\", value: \"HELLO\", enabled: false),\n            ],\n            preActions: [Scheme.ExecutionAction(name: \"run\", script: \"script\")],\n            postActions: [Scheme.ExecutionAction(name: \"run\", script: \"script\")],\n            management: Scheme.Management(shared: false, orderHint: 1, isShown: true)\n        )\n        for platform in Platform.allCases {\n            let appTarget = Target(\n                name: \"App_\\(platform)\",\n                type: .application,\n                platform: platform,\n                sources: [TargetSource(path: \"App_\\(platform)\")],\n                dependencies: [\n                    Dependency(type: .target, reference: \"Framework_\\(platform)\"),\n                    Dependency(type: .target, reference: \"Framework2_\\(platform)\"),\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire\"),\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"BrightFutures\"),\n                ],\n                scheme: scheme\n            )\n            targets.append(appTarget)\n            if createSources {\n                paths += try createTargetSources(path: basePath, target: appTarget)\n            }\n\n            let testTarget = Target(\n                name: \"App_Test_\\(platform)\",\n                type: .unitTestBundle,\n                platform: platform,\n                sources: [TargetSource(path: \"App_Test_\\(platform)\")],\n                dependencies: [\n                    Dependency(type: .target, reference: \"App_\\(platform)\"),\n                    Dependency(type: .target, reference: \"Framework_\\(platform)\"),\n                    Dependency(type: .target, reference: \"Framework2_\\(platform)\"),\n                ],\n                scheme: scheme\n            )\n            targets.append(testTarget)\n            if createSources {\n                paths += try createTargetSources(path: basePath, target: testTarget)\n            }\n\n            let frameworkTarget = Target(\n                name: \"Framework_\\(platform)\",\n                type: .framework,\n                platform: platform,\n                sources: [\n                    TargetSource(path: \"Framework_\\(platform)\"),\n                ],\n                dependencies: [\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire\"),\n                ],\n                scheme: scheme\n            )\n            targets.append(frameworkTarget)\n            if createSources {\n                paths += try createTargetSources(path: basePath, target: frameworkTarget)\n            }\n\n            let frameworkTarget2 = Target(\n                name: \"Framework2_\\(platform)\",\n                type: .framework,\n                platform: platform,\n                sources: [TargetSource(path: \"Framework2_\\(platform)\")],\n                dependencies: [\n                    Dependency(type: .target, reference: \"Framework_\\(platform)\"),\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire\"),\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"BrightFutures\"),\n                ],\n                scheme: scheme\n            )\n            targets.append(frameworkTarget2)\n            if createSources {\n                paths += try createTargetSources(path: basePath, target: frameworkTarget2)\n            }\n        }\n        if createSources {\n            let files = paths.filter { $0.isFile }\n            let directories = paths.filter { $0.isDirectory }\n            print(\"Generated \\(files.count) files and \\(directories.count) directories\")\n        }\n\n        return Project(\n            basePath: basePath,\n            name: \"Project\",\n            configs: [\n                Config(name: \"Debug Test\", type: .debug),\n                Config(name: \"Release Test\", type: .release),\n                Config(name: \"Debug Staging\", type: .debug),\n                Config(name: \"Release Staging\", type: .release),\n                Config(name: \"Debug Prod\", type: .debug),\n                Config(name: \"Release Prod\", type: .release),\n            ],\n            targets: targets,\n            aggregateTargets: [],\n            settings: [:],\n            settingGroups: [:],\n            schemes: [],\n            options: SpecOptions(),\n            fileGroups: [],\n            configFiles: [:],\n            attributes: [:]\n        )\n    }\n\n    fileprivate static func createTargetSources(path: Path, target: Target) throws -> [Path] {\n        let levels = 3\n        let directoriesPerLevel = 1\n        let swiftFilesPerDirectory = 5\n        let objFilesPerDirectory = 2\n        let resourcesPerDirectory = 2\n        var paths: [Path] = []\n\n        func createDirectory(_ path: Path, depth: Int = 0) throws {\n            try path.mkpath()\n            paths.append(path)\n\n            for swiftFile in 1...swiftFilesPerDirectory {\n                let file = path + \"file_\\(swiftFile).swift\"\n                try file.write(\"\")\n                paths.append(file)\n            }\n\n            for resourceFile in 1...resourcesPerDirectory {\n                let file = path + \"file_\\(resourceFile).png\"\n                try file.write(\"\")\n                paths.append(file)\n            }\n\n            for objFile in 1...objFilesPerDirectory {\n                let header = path + \"file_\\(objFile).h\"\n                try header.write(\"\")\n                paths.append(header)\n\n                let implementation = path + \"file_\\(objFile).m\"\n                try implementation.write(\"\")\n                paths.append(implementation)\n            }\n\n            if depth < levels - 1 {\n                for directory in 1...directoriesPerLevel {\n                    try createDirectory(path + \"directory_\\(directory)\", depth: depth + 1)\n                }\n            }\n        }\n\n        for source in target.sources {\n            try createDirectory(path + source.path)\n        }\n        return paths\n    }\n}\n"
  },
  {
    "path": "Tests/ProjectSpecTests/Dictionary+Extension_Tests.swift",
    "content": "@testable import ProjectSpec\nimport XCTest\n\nfinal class DictionaryExtensionTests: XCTestCase {\n    func testRemovingNil_ShouldReturnNewDictionaryWithoutOptionalValues() {\n        // Arrange\n        let input: [String: Any?] = inputDictionary\n        let expected: [String: Any] = outputDictionary\n        XCTAssertNotEqual(input as NSDictionary, expected as NSDictionary)\n\n        // Act\n        let sut: [String: Any] = input.removingEmptyArraysDictionariesAndNils()\n\n        // Assert\n        XCTAssertEqual(sut as NSDictionary, expected as NSDictionary)\n    }\n}\n\nextension DictionaryExtensionTests {\n    var inputDictionary: [String: Any?] {\n        let inner1: [String: Any?] = [\n            \"inner1\": \"value1\",\n            \"inner2\": Optional(\"value2\"),\n            \"inner3\": nil,\n            \"inner4\": Optional([1, 2, 3]),\n        ]\n        let inner2: [String: Any?] = [\n            \"inner1\": \"value1\",\n            \"inner2\": Optional(\"value2\"),\n            \"inner3\": inner1,\n            \"inner4\": [1, 2, 3],\n        ]\n        let inner3: [String: Any?] = [\n            \"inner1\": \"value1\",\n            \"inner2\": Optional(\"value2\"),\n            \"inner3\": Optional(inner1),\n            \"inner4\": [1, 2, 3],\n            \"inner5\": inner2,\n        ]\n        let inner4: [String: Any?] = [\n            \"inner1\": inner1,\n            \"inner2\": inner2,\n            \"inner3\": inner3,\n            \"inner4\": Optional(\"value4\"),\n            \"inner5\": nil,\n        ]\n\n        let inner6: [String: Any?] = [\n            \"inner1\": \"value1\",\n            \"inner2\": \"value2\",\n            \"inner3\": [inner1, inner1, inner1],\n        ]\n\n        let input: [String: Any?] = [\n            \"inner1\": \"value1\",\n            \"inner2\": Optional(\"value2\"),\n            \"inner3\": nil,\n            \"inner4\": inner4,\n            \"inner5\": [],\n            \"inner6\": inner6,\n            \"inner7\": [:],\n        ]\n\n        return input\n    }\n\n    var outputDictionary: [String: Any] {\n        let expected: [String: Any] = [\n            \"inner1\": \"value1\",\n            \"inner2\": \"value2\",\n            \"inner4\": [\n                \"inner1\": [\n                    \"inner1\": \"value1\",\n                    \"inner2\": \"value2\",\n                    \"inner4\": [1, 2, 3],\n                ],\n                \"inner2\": [\n                    \"inner1\": \"value1\",\n                    \"inner2\": \"value2\",\n                    \"inner3\": [\n                        \"inner1\": \"value1\",\n                        \"inner2\": \"value2\",\n                        \"inner4\": [1, 2, 3],\n                    ],\n                    \"inner4\": [1, 2, 3],\n                ],\n                \"inner3\": [\n                    \"inner1\": \"value1\",\n                    \"inner2\": \"value2\",\n                    \"inner3\": [\n                        \"inner1\": \"value1\",\n                        \"inner2\": \"value2\",\n                        \"inner4\": [1, 2, 3],\n                    ],\n                    \"inner4\": [1, 2, 3],\n                    \"inner5\": [\n                        \"inner1\": \"value1\",\n                        \"inner2\": \"value2\",\n                        \"inner3\": [\n                            \"inner1\": \"value1\",\n                            \"inner2\": \"value2\",\n                            \"inner4\": [1, 2, 3],\n                        ],\n                        \"inner4\": [1, 2, 3],\n                    ],\n                ],\n                \"inner4\": \"value4\",\n            ],\n            \"inner6\": [\n                \"inner1\": \"value1\",\n                \"inner2\": \"value2\",\n                \"inner3\": [[\n                    \"inner1\": \"value1\",\n                    \"inner2\": \"value2\",\n                    \"inner4\": [1, 2, 3],\n                ], [\n                    \"inner1\": \"value1\",\n                    \"inner2\": \"value2\",\n                    \"inner4\": [1, 2, 3],\n                ], [\n                    \"inner1\": \"value1\",\n                    \"inner2\": \"value2\",\n                    \"inner4\": [1, 2, 3],\n                ]],\n            ],\n        ]\n\n        return expected\n    }\n}\n"
  },
  {
    "path": "Tests/ProjectSpecTests/InvalidConfigsFormatTests.swift",
    "content": "import ProjectSpec\nimport Testing\nimport TestSupport\nimport PathKit\n\nstruct InvalidConfigsMappingFormatTests {\n    struct InvalidConfigsTestArguments {\n        var fixturePath: Path\n        var expectedError: SpecParsingError\n    }\n\n    private static var testArguments: [InvalidConfigsTestArguments] {\n        let invalidConfigsFixturePath: Path = fixturePath + \"invalid_configs\"\n        return [\n            InvalidConfigsTestArguments(\n                fixturePath: invalidConfigsFixturePath + \"invalid_configs_value_non_mapping_settings.yml\",\n                expectedError: SpecParsingError.invalidConfigsMappingFormat(keys: [\"invalid_key0\", \"invalid_key1\"])\n            ),\n            InvalidConfigsTestArguments(\n                fixturePath: invalidConfigsFixturePath + \"invalid_configs_value_non_mapping_targets.yml\",\n                expectedError: SpecParsingError.invalidConfigsMappingFormat(keys: [\"invalid_key0\", \"invalid_key1\"])\n            ),\n            InvalidConfigsTestArguments(\n                fixturePath: invalidConfigsFixturePath + \"invalid_configs_value_non_mapping_aggregate_targets.yml\",\n                expectedError: SpecParsingError.invalidConfigsMappingFormat(keys: [\"invalid_key0\", \"invalid_key1\"])\n            ),\n            InvalidConfigsTestArguments(\n                fixturePath: invalidConfigsFixturePath + \"invalid_configs_value_non_mapping_setting_groups.yml\",\n                expectedError: SpecParsingError.invalidConfigsMappingFormat(keys: [\"invalid_key0\", \"invalid_key1\"])\n            )\n        ]\n    }\n\n    @Test(\"throws invalidConfigsMappingFormat for non-mapping configs entries\", arguments: testArguments)\n    func testInvalidConfigsMappingFormat(_ arguments: InvalidConfigsTestArguments) throws {\n        #expect {\n            try Project(path: arguments.fixturePath)\n        } throws: { actualError in\n            (actualError as any CustomStringConvertible).description\n            == arguments.expectedError.description\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/ProjectSpecTests/ProjectSpecTests.swift",
    "content": "import PathKit\nimport ProjectSpec\nimport Spectre\nimport XcodeProj\nimport XCTest\nimport TestSupport\nimport Version\n\nclass ProjectSpecTests: XCTestCase {\n\n    func testTargetType() {\n        describe {\n\n            let framework = Target(\n                name: \"MyFramework\",\n                type: .framework,\n                platform: .iOS,\n                settings: Settings(buildSettings: [\"SETTING_2\": \"VALUE\"])\n            )\n            let staticLibrary = Target(\n                name: \"MyStaticLibrary\",\n                type: .staticLibrary,\n                platform: .iOS,\n                settings: Settings(buildSettings: [\"SETTING_2\": \"VALUE\"])\n            )\n            let dynamicLibrary = Target(\n                name: \"MyDynamicLibrary\",\n                type: .dynamicLibrary,\n                platform: .iOS,\n                settings: Settings(buildSettings: [\"SETTING_2\": \"VALUE\"])\n            )\n            $0.it(\"is a framework when it has the right extension\") {\n                try expect(framework.type.isFramework).to.beTrue()\n            }\n\n            $0.it(\"is a library when it has the right type\") {\n                try expect(staticLibrary.type.isLibrary).to.beTrue()\n                try expect(dynamicLibrary.type.isLibrary).to.beTrue()\n            }\n        }\n    }\n\n    func testTargetFilename() {\n        describe {\n\n            let framework = Target(\n                name: \"MyFramework\",\n                type: .framework,\n                platform: .iOS,\n                settings: Settings(buildSettings: [:])\n            )\n            let staticLibrary = Target(\n                name: \"MyStaticLibrary\",\n                type: .staticLibrary,\n                platform: .iOS,\n                settings: Settings(buildSettings: [:])\n            )\n            let dynamicLibrary = Target(\n                name: \"MyDynamicLibrary\",\n                type: .dynamicLibrary,\n                platform: .iOS,\n                settings: Settings(buildSettings: [:])\n            )\n            $0.it(\"has correct filename\") {\n                try expect(framework.filename) == \"MyFramework.framework\"\n                try expect(staticLibrary.filename) == \"libMyStaticLibrary.a\"\n                try expect(dynamicLibrary.filename) == \"MyDynamicLibrary.dylib\"\n            }\n        }\n    }\n\n    func testDeploymentTarget() {\n        describe {\n\n            $0.it(\"has correct build setting\") {\n                try expect(Platform.auto.deploymentTargetSetting) == \"\"\n                try expect(Platform.iOS.deploymentTargetSetting) == \"IPHONEOS_DEPLOYMENT_TARGET\"\n                try expect(Platform.tvOS.deploymentTargetSetting) == \"TVOS_DEPLOYMENT_TARGET\"\n                try expect(Platform.watchOS.deploymentTargetSetting) == \"WATCHOS_DEPLOYMENT_TARGET\"\n                try expect(Platform.macOS.deploymentTargetSetting) == \"MACOSX_DEPLOYMENT_TARGET\"\n                try expect(Platform.visionOS.deploymentTargetSetting) == \"XROS_DEPLOYMENT_TARGET\"\n            }\n\n            $0.it(\"has correct sdk root\") {\n                try expect(Platform.auto.sdkRoot) == \"auto\"\n                try expect(Platform.iOS.sdkRoot) == \"iphoneos\"\n                try expect(Platform.tvOS.sdkRoot) == \"appletvos\"\n                try expect(Platform.watchOS.sdkRoot) == \"watchos\"\n                try expect(Platform.macOS.sdkRoot) == \"macosx\"\n                try expect(Platform.visionOS.sdkRoot) == \"xros\"\n            }\n            \n            $0.it(\"parses version correctly\") {\n                try expect(Version.parse(\"2\").deploymentTarget) == \"2.0\"\n                try expect(Version.parse(\"2.0\").deploymentTarget) == \"2.0\"\n                try expect(Version.parse(\"2.1\").deploymentTarget) == \"2.1\"\n                try expect(Version.parse(\"2.10\").deploymentTarget) == \"2.10\"\n                try expect(Version.parse(\"2.1.0\").deploymentTarget) == \"2.1\"\n                try expect(Version.parse(\"2.12.0\").deploymentTarget) == \"2.12\"\n                try expect(Version.parse(\"2.1.2\").deploymentTarget) == \"2.1.2\"\n                try expect(Version.parse(\"2.10.2\").deploymentTarget) == \"2.10.2\"\n                try expect(Version.parse(\"2.0.2\").deploymentTarget) == \"2.0.2\"\n                try expect(Version.parse(2).deploymentTarget) == \"2.0\"\n                try expect(Version.parse(2.0).deploymentTarget) == \"2.0\"\n                try expect(Version.parse(2.1).deploymentTarget) == \"2.1\"\n            }\n        }\n    }\n\n    func testValidation() {\n        describe {\n\n            let baseProject = Project(name: \"\", configs: [Config(name: \"invalid\")])\n            let invalidSettings = Settings(\n                configSettings: [\"invalidConfig\": [:]],\n                groups: [\"invalidSettingGroup\"]\n            )\n\n            $0.it(\"fails with invalid XcodeGen version\") {\n                let minimumVersion = try Version.parse(\"1.11.1\")\n                var project = baseProject\n                project.options = SpecOptions(minimumXcodeGenVersion: minimumVersion)\n\n                func expectMinimumXcodeGenVersionError(_ project: Project, minimumVersion: Version, xcodeGenVersion: Version, file: String = #file, line: Int = #line) throws {\n                    try expectError(SpecValidationError(errors: [SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumVersion, version: xcodeGenVersion)]), file: file, line: line) {\n                        try project.validateMinimumXcodeGenVersion(xcodeGenVersion)\n                    }\n                }\n\n                try expectMinimumXcodeGenVersionError(project, minimumVersion: minimumVersion, xcodeGenVersion: Version.parse(\"1.11.0\"))\n                try expectMinimumXcodeGenVersionError(project, minimumVersion: minimumVersion, xcodeGenVersion: Version.parse(\"1.10.99\"))\n                try expectMinimumXcodeGenVersionError(project, minimumVersion: minimumVersion, xcodeGenVersion: Version.parse(\"0.99\"))\n            }\n\n            $0.it(\"fails with invalid project\") {\n                var project = baseProject\n                project.settings = invalidSettings\n                project.configFiles = [\"invalidConfig\": \"invalidConfigFile\"]\n                project.fileGroups = [\"invalidFileGroup\"]\n                project.packages = [\"invalidLocalPackage\": .local(path: \"invalidLocalPackage\", group: nil, excludeFromProject: false)]\n                project.settingGroups = [\"settingGroup1\": Settings(\n                    configSettings: [\"invalidSettingGroupConfig\": [:]],\n                    groups: [\"invalidSettingGroupSettingGroup\"]\n                )]\n\n                try expectValidationError(project, .invalidConfigFileConfig(\"invalidConfig\"))\n                try expectValidationError(project, .invalidBuildSettingConfig(\"invalidConfig\"))\n                try expectValidationError(project, .invalidConfigFile(configFile: \"invalidConfigFile\", config: \"invalidConfig\"))\n                try expectValidationError(project, .invalidSettingsGroup(\"invalidSettingGroup\"))\n                try expectValidationError(project, .invalidFileGroup(\"invalidFileGroup\"))\n                try expectValidationError(project, .invalidLocalPackage(\"invalidLocalPackage\"))\n                try expectValidationError(project, .invalidSettingsGroup(\"invalidSettingGroupSettingGroup\"))\n                try expectValidationError(project, .invalidBuildSettingConfig(\"invalidSettingGroupConfig\"))\n            }\n\n            $0.it(\"fails with duplicate dependencies\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .iOS,\n                        dependencies: [\n                            Dependency(type: .target, reference: \"dependency1\"),\n                            Dependency(type: .target, reference: \"dependency1\"),\n                            Dependency(type: .framework, reference: \"dependency2\"),\n                            Dependency(type: .framework, reference: \"dependency2\"),\n\n                            // multiple package dependencies with different products should be allowed\n                            Dependency(type: .package(products: [\"one\"]), reference: \"package1\"),\n                            Dependency(type: .package(products: [\"two\"]), reference: \"package1\"),\n                        ]\n                    ),\n                    Target(\n                        name: \"target2\",\n                        type: .framework,\n                        platform: .iOS,\n                        dependencies: [\n                            Dependency(type: .framework, reference: \"dependency3\"),\n                            Dependency(type: .target, reference: \"dependency3\"),\n                            Dependency(type: .target, reference: \"dependency4\"),\n                            Dependency(type: .target, reference: \"dependency4\"),\n                        ]\n                    )\n                ]\n                try expectValidationError(project, .duplicateDependencies(target: \"target1\", dependencyReference: \"dependency1\"))\n                try expectValidationError(project, .duplicateDependencies(target: \"target1\", dependencyReference: \"dependency2\"))\n                try expectValidationError(project, .duplicateDependencies(target: \"target2\", dependencyReference: \"dependency4\"))\n\n                try expectNoValidationError(project, .duplicateDependencies(target: \"target1\", dependencyReference: \"package1\"))\n            }\n            \n            $0.it(\"unexpected supported destinations for watch app\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .watchOS,\n                        supportedDestinations: [.macOS]\n                    )\n                ]\n                try expectValidationError(project, .unexpectedTargetPlatformForSupportedDestinations(target: \"target1\", platform: .watchOS))\n            }\n            \n            $0.it(\"watchOS in multiplatform app's supported destinations\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .auto,\n                        supportedDestinations: [.watchOS]\n                    )\n                ]\n                try expectValidationError(project, .containsWatchOSDestinationForMultiplatformApp(target: \"target1\"))\n            }\n            \n            $0.it(\"watchOS in non-app's supported destinations\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .framework,\n                        platform: .auto,\n                        supportedDestinations: [.watchOS]\n                    )\n                ]\n                try expectNoValidationError(project, .containsWatchOSDestinationForMultiplatformApp(target: \"target1\"))\n            }\n            \n            $0.it(\"multiple definitions of mac platform in supported destinations\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .iOS,\n                        supportedDestinations: [.macOS, .macCatalyst]\n                    )\n                ]\n                try expectValidationError(project, .multipleMacPlatformsInSupportedDestinations(target: \"target1\"))\n            }\n            \n            $0.it(\"invalid target platform for macCatalyst supported destinations\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .tvOS,\n                        supportedDestinations: [.tvOS, .macCatalyst]\n                    )\n                ]\n                try expectValidationError(project, .invalidTargetPlatformForSupportedDestinations(target: \"target1\"))\n            }\n            \n            $0.it(\"missing target platform in supported destinations\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .iOS,\n                        supportedDestinations: [.tvOS]\n                    )\n                ]\n                try expectValidationError(project, .missingTargetPlatformInSupportedDestinations(target: \"target1\", platform: .iOS))\n            }\n            \n            $0.it(\"allows non-existent configurations\") {\n                var project = baseProject\n                project.options = SpecOptions(disabledValidations: [.missingConfigs])\n                let configPath = fixturePath + \"test.xcconfig\"\n                project.configFiles = [\"missingConfiguration\": configPath.string]\n                try project.validate()\n            }\n\n            $0.it(\"allows non-existent config files\") {\n                var project = baseProject\n                project.options = SpecOptions(disabledValidations: [.missingConfigFiles])\n                project.configFiles = [\"invalid\": \"doesntexist.xcconfig\"]\n                try project.validate()\n            }\n\n            $0.it(\"fails with invalid target\") {\n                var project = baseProject\n                project.targets = [Target(\n                    name: \"target1\",\n                    type: .application,\n                    platform: .iOS,\n                    settings: invalidSettings,\n                    configFiles: [\"invalidConfig\": \"invalidConfigFile\"],\n                    sources: [\"invalidSource\"],\n                    dependencies: [\n                        Dependency(type: .target, reference: \"invalidDependency\"),\n                        Dependency(type: .package(products: []), reference: \"invalidPackage\"),\n                    ],\n                    preBuildScripts: [BuildScript(script: .path(\"invalidPreBuildScript\"), name: \"preBuildScript1\")],\n                    postCompileScripts: [BuildScript(script: .path(\"invalidPostCompileScript\"))],\n                    postBuildScripts: [BuildScript(script: .path(\"invalidPostBuildScript\"))],\n                    scheme: TargetScheme(testTargets: [\"invalidTarget\"])\n                )]\n\n                try expectValidationError(project, .invalidTargetDependency(target: \"target1\", dependency: \"invalidDependency\"))\n                try expectValidationError(project, .invalidSwiftPackage(name: \"invalidPackage\", target: \"target1\"))\n                try expectValidationError(project, .invalidTargetConfigFile(target: \"target1\", configFile: \"invalidConfigFile\", config: \"invalidConfig\"))\n                try expectValidationError(project, .invalidTargetSchemeTest(target: \"target1\", testTarget: \"invalidTarget\"))\n                try expectValidationError(project, .invalidTargetSource(target: \"target1\", source: \"invalidSource\"))\n                try expectValidationError(project, .invalidBuildSettingConfig(\"invalidConfig\"))\n                try expectValidationError(project, .invalidSettingsGroup(\"invalidSettingGroup\"))\n                try expectValidationError(project, .invalidBuildScriptPath(target: \"target1\", name: \"preBuildScript1\", path: \"invalidPreBuildScript\"))\n                try expectValidationError(project, .invalidBuildScriptPath(target: \"target1\", name: nil, path: \"invalidPostCompileScript\"))\n                try expectValidationError(project, .invalidBuildScriptPath(target: \"target1\", name: nil, path: \"invalidPostBuildScript\"))\n\n                try expectValidationError(project, .missingConfigForTargetScheme(target: \"target1\", configType: .debug))\n                try expectValidationError(project, .missingConfigForTargetScheme(target: \"target1\", configType: .release))\n\n                project.targets[0].scheme?.configVariants = [\"invalidVariant\"]\n                try expectValidationError(project, .invalidTargetSchemeConfigVariant(target: \"target1\", configVariant: \"invalidVariant\", configType: .debug))\n            }\n\n            $0.it(\"fails with empty source path\") {\n                var project = baseProject\n                project.targets = [Target(\n                    name: \"target1\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [\"\", \"validSource\"]\n                )]\n                try expectValidationError(project, .emptySourcePath(target: \"target1\"))\n            }\n\n            $0.it(\"fails with invalid aggregate target\") {\n                var project = baseProject\n                project.aggregateTargets = [AggregateTarget(\n                    name: \"target1\",\n                    targets: [\"invalidDependency\"],\n                    settings: invalidSettings,\n                    configFiles: [\"invalidConfig\": \"invalidConfigFile\"],\n                    buildScripts: [BuildScript(script: .path(\"invalidPrebuildScript\"), name: \"buildScript1\")],\n                    scheme: TargetScheme(testTargets: [\"invalidTarget\"])\n                )]\n\n                try expectValidationError(project, .invalidTargetDependency(target: \"target1\", dependency: \"invalidDependency\"))\n                try expectValidationError(project, .invalidTargetConfigFile(target: \"target1\", configFile: \"invalidConfigFile\", config: \"invalidConfig\"))\n                try expectValidationError(project, .invalidTargetSchemeTest(target: \"target1\", testTarget: \"invalidTarget\"))\n                try expectValidationError(project, .invalidBuildSettingConfig(\"invalidConfig\"))\n                try expectValidationError(project, .invalidSettingsGroup(\"invalidSettingGroup\"))\n                try expectValidationError(project, .invalidBuildScriptPath(target: \"target1\", name: \"buildScript1\", path: \"invalidPrebuildScript\"))\n\n                try expectValidationError(project, .missingConfigForTargetScheme(target: \"target1\", configType: .debug))\n                try expectValidationError(project, .missingConfigForTargetScheme(target: \"target1\", configType: .release))\n\n                project.aggregateTargets[0].scheme?.configVariants = [\"invalidVariant\"]\n                try expectValidationError(project, .invalidTargetSchemeConfigVariant(target: \"target1\", configVariant: \"invalidVariant\", configType: .debug))\n            }\n\n            $0.it(\"fails with invalid sdk dependency\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .iOS,\n                        dependencies: [Dependency(type: .sdk(root: nil), reference: \"invalidDependency\")]\n                    ),\n                ]\n\n                try expectValidationError(project, .invalidSDKDependency(target: \"target1\", dependency: \"invalidDependency\"))\n            }\n\n            $0.it(\"fails with invalid scheme\") {\n                var project = baseProject\n                project.schemes = [Scheme(\n                    name: \"scheme1\",\n                    build: .init(targets: [.init(target: \"invalidTarget\")]),\n                    run: .init(config: \"debugInvalid\"),\n                    test: .init(config: \"testInvalid\", coverageTargets: [\"SubProject/Yams\"], targets: [.init(targetReference: \"invalidTarget\")]),\n                    archive: .init(config: \"releaseInvalid\")\n                )]\n\n                try expectValidationError(project, .invalidSchemeTarget(scheme: \"scheme1\", target: \"invalidTarget\", action: \"build\"))\n                try expectValidationError(project, .invalidSchemeConfig(scheme: \"scheme1\", config: \"debugInvalid\"))\n                try expectValidationError(project, .invalidSchemeConfig(scheme: \"scheme1\", config: \"releaseInvalid\"))\n                try expectValidationError(project, .invalidSchemeTarget(scheme: \"scheme1\", target: \"invalidTarget\", action: \"test\"))\n                try expectValidationError(project, .invalidProjectReference(scheme: \"scheme1\", reference: \"SubProject\"))\n            }\n\n            $0.it(\"fails with invalid project reference in scheme\") {\n                var project = baseProject\n                project.schemes = [Scheme(\n                    name: \"scheme1\",\n                    build: .init(targets: [.init(target: \"invalidProjectRef/target1\")])\n                )]\n                try expectValidationError(project, .invalidProjectReference(scheme: \"scheme1\", reference: \"invalidProjectRef\"))\n            }\n\n            $0.it(\"fails with invalid project reference path\") {\n                var project = baseProject\n                let reference = ProjectReference(name: \"InvalidProj\", path: \"invalid_path\")\n                project.projectReferences = [reference]\n                try expectValidationError(project, .invalidProjectReferencePath(reference))\n            }\n\n            $0.it(\"fails with invalid project reference in dependency\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .iOS,\n                        dependencies: [Dependency(type: .target, reference: \"invalidProjectRef/target2\")]\n                    ),\n                ]\n                try expectValidationError(project, .invalidTargetDependency(target: \"target1\", dependency: \"invalidProjectRef/target2\"))\n            }\n\n            $0.it(\"allows project reference in target dependency\") {\n                var project = baseProject\n                let externalProjectPath = fixturePath + \"TestProject/AnotherProject/AnotherProject.xcodeproj\"\n                project.projectReferences = [\n                    ProjectReference(name: \"validProjectRef\", path: externalProjectPath.string),\n                ]\n                project.targets = [\n                    Target(\n                        name: \"target1\",\n                        type: .application,\n                        platform: .iOS,\n                        dependencies: [Dependency(type: .target, reference: \"validProjectRef/ExternalTarget\")]\n                    ),\n                ]\n                try project.validate()\n            }\n\n            $0.it(\"allows missing optional file\") {\n                var project = baseProject\n                project.targets = [Target(\n                    name: \"target1\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [.init(path: \"generated.swift\", optional: true)]\n                )]\n                try project.validate()\n            }\n\n            $0.it(\"validates missing default configurations\") {\n                var project = baseProject\n                project.options = SpecOptions(defaultConfig: \"foo\")\n                try expectValidationError(project, .missingDefaultConfig(configName: \"foo\"))\n            }\n\n            $0.it(\"validates config settings format\") {\n                var project = baseProject\n                project.configs = Config.defaultConfigs\n                project.settings.buildSettings = [\"Debug\": \"VALUE\", \"Release\": \"VALUE\"]\n\n                try expectValidationError(project, .invalidPerConfigSettings)\n            }\n\n            $0.it(\"allows custom scheme for aggregated target\") {\n                var project = baseProject\n                let buildScript = BuildScript(script: .path(#file), name: \"buildScript1\")\n                let aggregatedTarget = AggregateTarget(\n                    name: \"target1\",\n                    targets: [],\n                    settings: Settings(buildSettings: [:]),\n                    configFiles: [:],\n                    buildScripts: [buildScript],\n                    scheme: nil,\n                    attributes: [:]\n                )\n                project.aggregateTargets = [aggregatedTarget]\n                let buildTarget = Scheme.BuildTarget(target: \"target1\")\n                let scheme = Scheme(name: \"target1-Scheme\", build: Scheme.Build(targets: [buildTarget]))\n                project.schemes = [scheme]\n                try project.validate()\n            }\n\n            $0.it(\"validates scheme variants\") {\n\n                func expectVariant(_ variant: String, type: ConfigType = .debug, for config: Config, matches: Bool, file: String = #file, line: Int = #line) throws {\n                    let configs = [Config(name: \"xxxxxxxxxxx\", type: .debug), config]\n                    let foundConfig = configs.first(including: variant, for: type)\n                    let found = foundConfig != nil && foundConfig != configs[0]\n                    try expect(found, file: file, line: line) == matches\n                }\n\n                try expectVariant(\"Dev\", for: Config(name: \"DevDebug\", type: .debug), matches: true)\n                try expectVariant(\"Dev\", for: Config(name: \"Dev debug\", type: .debug), matches: true)\n                try expectVariant(\"Dev\", for: Config(name: \"DEV DEBUG\", type: .debug), matches: true)\n                try expectVariant(\"Dev\", for: Config(name: \"Debug Dev\", type: .debug), matches: true)\n                try expectVariant(\"Dev\", for: Config(name: \"dev Debug\", type: .debug), matches: true)\n                try expectVariant(\"Dev\", for: Config(name: \"Dev debug\", type: .release), matches: false)\n                try expectVariant(\"Dev\", for: Config(name: \"Dev-debug\", type: .debug), matches: true)\n                try expectVariant(\"Dev\", for: Config(name: \"Dev_debug\", type: .debug), matches: true)\n                try expectVariant(\"Prod\", for: Config(name: \"PreProd debug\", type: .debug), matches: false)\n                try expectVariant(\"Develop\", for: Config(name: \"Dev debug\", type: .debug), matches: false)\n                try expectVariant(\"Development\", for: Config(name: \"Debug (Development)\", type: .debug), matches: true)\n                try expectVariant(\"Staging\", for: Config(name: \"Debug (Staging)\", type: .debug), matches: true)\n                try expectVariant(\"Production\", for: Config(name: \"Debug (Production)\", type: .debug), matches: true)\n            }\n\n            $0.it(\"fails on missing test plan file\") {\n                var project = baseProject\n\n                project.configs = Config.defaultConfigs\n\n                project.targets = [Target(\n                    name: \"target1\",\n                    type: .application,\n                    platform: .iOS\n                )]\n\n                let testPlan = TestPlan(path: \"does-not-exist.xctestplan\")\n\n                let scheme = Scheme(\n                    name: \"xctestplan-scheme\",\n                    build: Scheme.Build(targets: [\n                        Scheme.BuildTarget(target: \"target1\")\n                    ]),\n                    test: Scheme.Test(config: \"Debug\",\n                        testPlans: [testPlan]\n                    )\n                )\n\n                project.schemes = [scheme]\n\n                try expectValidationError(project, .invalidTestPlan(testPlan))\n            }\n\n            $0.it(\"fails on multiple default test plans\") {\n                var project = baseProject\n\n                project.configs = Config.defaultConfigs\n\n                project.targets = [Target(\n                    name: \"target1\",\n                    type: .application,\n                    platform: .iOS\n                )]\n\n                let testPlan1 = TestPlan(path: \"\\(fixturePath.string)/TestProject/App_iOS/App_iOS.xctestplan\", defaultPlan: true)\n                let testPlan2 = TestPlan(path: \"\\(fixturePath.string)/TestProject/App_iOS/App_iOS.xctestplan\", defaultPlan: true)\n\n                let scheme = Scheme(\n                    name: \"xctestplan-scheme\",\n                    build: Scheme.Build(targets: [\n                        Scheme.BuildTarget(target: \"target1\")\n                    ]),\n                    test: Scheme.Test(config: \"Debug\",\n                        testPlans: [testPlan1, testPlan2]\n                    )\n                )\n\n                project.schemes = [scheme]\n\n                try expectValidationError(project, .multipleDefaultTestPlans)\n            }\n\n            $0.it(\"fails on packages has not plugin package reference\") {\n                var project = baseProject\n                project.targets = [\n                    Target(\n                        name: \"target\",\n                        type: .application,\n                        platform: .iOS,\n                        buildToolPlugins: [\n                            BuildToolPlugin(plugin: \"plugin\", package: \"package\")\n                        ]\n                    )\n                ]\n                try expectValidationError(project, .invalidPluginPackageReference(plugin: \"plugin\", package: \"package\"))\n            }\n\n            $0.it(\"allow on packages has plugin package reference\") {\n                var project = baseProject\n                project.packages[\"package\"] = .remote(url: \"url\", versionRequirement: .branch(\"branch\"))\n                project.targets = [\n                    Target(\n                        name: \"target\",\n                        type: .application,\n                        platform: .iOS,\n                        buildToolPlugins: [\n                            BuildToolPlugin(plugin: \"plugin\", package: \"package\")\n                        ]\n                    )\n                ]\n                try expectNoValidationError(project, .invalidPluginPackageReference(plugin: \"plugin\", package: \"package\"))\n            }\n        }\n    }\n\n    func testJSONEncodable() {\n        describe {\n            $0.it(\"encodes to json\") {\n                let proj = Project(basePath: Path.current,\n                                   name: \"ToJson\",\n                                   configs: [Config(name: \"DevelopmentConfig\", type: .debug), Config(name: \"ProductionConfig\", type: .release)],\n                                   targets: [Target(name: \"App\",\n                                                    type: .application,\n                                                    platform: .iOS,\n                                                    productName: \"App\",\n                                                    deploymentTarget: Version(major: 0, minor: 1, patch: 2),\n                                                    settings: Settings(buildSettings: [\"foo\": \"bar\"],\n                                                                       configSettings: [\"foo\": Settings(buildSettings: [\"nested\": \"config\"],\n                                                                                                        configSettings: [:],\n                                                                                                        groups: [\"config-setting-group\"])],\n                                                                       groups: [\"setting-group\"]),\n                                                    configFiles: [\"foo\": \"bar\"],\n                                                    sources: [TargetSource(path: \"Source\",\n                                                                           name: \"Source\",\n                                                                           compilerFlags: [\"-Werror\"],\n                                                                           excludes: [\"foo\", \"bar\"],\n                                                                           type: .folder,\n                                                                           optional: true,\n                                                                           buildPhase: .resources,\n                                                                           headerVisibility: .private,\n                                                                           createIntermediateGroups: true)],\n                                                    dependencies: [Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic),\n                                                                              reference: \"reference\",\n                                                                              embed: true,\n                                                                              codeSign: true,\n                                                                              link: true,\n                                                                              implicit: true,\n                                                                              weakLink: true,\n                                                                              copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"example\", phaseOrder: .postCompile))],\n                                                    info: Plist(path: \"info.plist\", attributes: [\"foo\": \"bar\"]),\n                                                    entitlements: Plist(path: \"entitlements.plist\", attributes: [\"foo\": \"bar\"]),\n                                                    transitivelyLinkDependencies: true,\n                                                    directlyEmbedCarthageDependencies: true,\n                                                    requiresObjCLinking: true,\n                                                    preBuildScripts: [BuildScript(script: .script(\"pwd\"),\n                                                                                  name: \"Foo script\",\n                                                                                  inputFiles: [\"foo\"],\n                                                                                  outputFiles: [\"bar\"],\n                                                                                  inputFileLists: [\"foo.xcfilelist\"],\n                                                                                  outputFileLists: [\"bar.xcfilelist\"],\n                                                                                  shell: \"/bin/bash\",\n                                                                                  runOnlyWhenInstalling: true,\n                                                                                  showEnvVars: true,\n                                                                                  basedOnDependencyAnalysis: false)],\n                                                    buildToolPlugins: [BuildToolPlugin(plugin: \"plugin\", package: \"Yams\")],\n                                                    postCompileScripts: [BuildScript(script: .path(\"cmd.sh\"),\n                                                                                     name: \"Bar script\",\n                                                                                     inputFiles: [\"foo\"],\n                                                                                     outputFiles: [\"bar\"],\n                                                                                     inputFileLists: [\"foo.xcfilelist\"],\n                                                                                     outputFileLists: [\"bar.xcfilelist\"],\n                                                                                     shell: \"/bin/bash\",\n                                                                                     runOnlyWhenInstalling: true,\n                                                                                     showEnvVars: true,\n                                                                                     basedOnDependencyAnalysis: false)],\n                                                    postBuildScripts: [BuildScript(script: .path(\"cmd.sh\"),\n                                                                                   name: \"an another script\",\n                                                                                   inputFiles: [\"foo\"],\n                                                                                   outputFiles: [\"bar\"],\n                                                                                   inputFileLists: [\"foo.xcfilelist\"],\n                                                                                   outputFileLists: [\"bar.xcfilelist\"],\n                                                                                   shell: \"/bin/bash\",\n                                                                                   runOnlyWhenInstalling: true,\n                                                                                   showEnvVars: true,\n                                                                                   basedOnDependencyAnalysis: false),\n                                                                       BuildScript(script: .path(\"cmd.sh\"),\n                                                                                   name: \"Dependency script\",\n                                                                                   inputFiles: [\"foo\"],\n                                                                                   outputFiles: [\"bar\"],\n                                                                                   inputFileLists: [\"foo.xcfilelist\"],\n                                                                                   outputFileLists: [\"bar.xcfilelist\"],\n                                                                                   shell: \"/bin/bash\",\n                                                                                   runOnlyWhenInstalling: true,\n                                                                                   showEnvVars: true,\n                                                                                   basedOnDependencyAnalysis: true,\n                                                                                   discoveredDependencyFile: \"dep.d\")],\n                                                    buildRules: [BuildRule(fileType: .pattern(\"*.xcassets\"),\n                                                                           action: .script(\"pre_process_swift.py\"),\n                                                                           name: \"My Build Rule\",\n                                                                           outputFiles: [\"$(SRCROOT)/Generated.swift\"],\n                                                                           outputFilesCompilerFlags: [\"foo\"],\n                                                                           runOncePerArchitecture: false),\n                                                                 BuildRule(fileType: .type(\"sourcecode.swift\"),\n                                                                           action: .compilerSpec(\"com.apple.xcode.tools.swift.compiler\"),\n                                                                           name: nil,\n                                                                           outputFiles: [\"bar\"],\n                                                                           outputFilesCompilerFlags: [\"foo\"],\n                                                                           runOncePerArchitecture: true)],\n                                                    scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(targetReference: \"test target\",\n                                                                                                              randomExecutionOrder: false,\n                                                                                                              parallelizable: false)],\n                                                                         configVariants: [\"foo\"],\n                                                                         gatherCoverageData: true,\n                                                                         coverageTargets: [\"App\"],\n                                                                         storeKitConfiguration: \"Configuration.storekit\",\n                                                                         disableMainThreadChecker: true,\n                                                                         stopOnEveryMainThreadCheckerIssue: false,\n                                                                         disableThreadPerformanceChecker: true,\n                                                                         commandLineArguments: [\"foo\": true],\n                                                                         environmentVariables: [XCScheme.EnvironmentVariable(variable: \"environmentVariable\",\n                                                                                                                             value: \"bar\",\n                                                                                                                             enabled: true)],\n                                                                         preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                             script: \"bar\",\n                                                                                                             settingsTarget: \"foo\")],\n                                                                         postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                              script: \"bar\",\n                                                                                                              settingsTarget: \"foo\")]),\n                                                    legacy: LegacyTarget(toolPath: \"foo\",\n                                                                         passSettings: true,\n                                                                         arguments: \"bar\",\n                                                                         workingDirectory: \"foo\"),\n                                                    attributes: [\"foo\": \"bar\"],\n                                                    putResourcesBeforeSourcesBuildPhase: true)],\n                                   aggregateTargets: [AggregateTarget(name: \"aggregate target\",\n                                                                      targets: [\"App\"],\n                                                                      settings: Settings(buildSettings: [\"buildSettings\": \"bar\"],\n                                                                                         configSettings: [\"configSettings\": Settings(buildSettings: [:],\n                                                                                                                                     configSettings: [:],\n                                                                                                                                     groups: [])],\n                                                                                         groups: [\"foo\"]),\n                                                                      configFiles: [\"configFiles\": \"bar\"],\n                                                                      buildScripts: [BuildScript(script: .path(\"script\"),\n                                                                                                 name: \"foo\",\n                                                                                                 inputFiles: [\"foo\"],\n                                                                                                 outputFiles: [\"bar\"],\n                                                                                                 inputFileLists: [\"foo.xcfilelist\"],\n                                                                                                 outputFileLists: [\"bar.xcfilelist\"],\n                                                                                                 shell: \"/bin/bash\",\n                                                                                                 runOnlyWhenInstalling: true,\n                                                                                                 showEnvVars: false,\n                                                                                                 basedOnDependencyAnalysis: false)],\n                                                                      scheme: TargetScheme(testTargets: [Scheme.Test.TestTarget(targetReference: \"test target\",\n                                                                                                                                randomExecutionOrder: false,\n                                                                                                                                parallelizable: false)],\n                                                                                           configVariants: [\"foo\"],\n                                                                                           gatherCoverageData: true,\n                                                                                           disableMainThreadChecker: true,\n                                                                                           disableThreadPerformanceChecker: true,\n                                                                                           commandLineArguments: [\"foo\": true],\n                                                                                           environmentVariables: [XCScheme.EnvironmentVariable(variable: \"environmentVariable\",\n                                                                                                                                               value: \"bar\",\n                                                                                                                                               enabled: true)],\n                                                                                           preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                                               script: \"bar\",\n                                                                                                                               settingsTarget: \"foo\")],\n                                                                                           postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                                                script: \"bar\",\n                                                                                                                                settingsTarget: \"foo\")]),\n                                                                      attributes: [\"foo\": \"bar\"])],\n                                   settings: Settings(buildSettings: [\"foo\": \"bar\"],\n                                                      configSettings: [\"foo\": Settings(buildSettings: [\"nested\": \"config\"],\n                                                                                       configSettings: [:],\n                                                                                       groups: [\"config-setting-group\"])],\n                                                      groups: [\"setting-group\"]),\n                                   settingGroups: [\"foo\": Settings(buildSettings: [\"foo\": \"bar\"],\n                                                                   configSettings: [\"foo\": Settings(buildSettings: [\"nested\": \"config\"],\n                                                                                                    configSettings: [:],\n                                                                                                    groups: [\"config-setting-group\"])],\n                                                                   groups: [\"setting-group\"])],\n                                   schemes: [Scheme(name: \"scheme\",\n                                                    build: Scheme.Build(targets: [Scheme.BuildTarget(target: \"foo\",\n                                                                                                     buildTypes: [.archiving, .analyzing])],\n                                                                        parallelizeBuild: false,\n                                                                        buildImplicitDependencies: false,\n                                                                        preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                            script: \"bar\",\n                                                                                                            settingsTarget: \"foo\")],\n                                                                        postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                             script: \"bar\",\n                                                                                                             settingsTarget: \"foo\")]),\n                                                    run: Scheme.Run(config: \"run config\",\n                                                                    commandLineArguments: [\"foo\": true],\n                                                                    preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                        script: \"bar\",\n                                                                                                        settingsTarget: \"foo\")],\n                                                                    postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                         script: \"bar\",\n                                                                                                         settingsTarget: \"foo\")],\n                                                                    environmentVariables: [XCScheme.EnvironmentVariable(variable: \"foo\",\n                                                                                                                        value: \"bar\",\n                                                                                                                        enabled: false)],\n                                                                    enableGPUFrameCaptureMode: .openGL,\n                                                                    enableAddressSanitizer: true,\n                                                                    enableASanStackUseAfterReturn: true,\n                                                                    enableThreadSanitizer: true,\n                                                                    enableUBSanitizer: true,\n                                                                    launchAutomaticallySubstyle: \"2\",\n                                                                    storeKitConfiguration: \"Configuration.storekit\"),\n                                                    test: Scheme.Test(config: \"Config\",\n                                                                      gatherCoverageData: true,\n                                                                      enableAddressSanitizer: true,\n                                                                      enableASanStackUseAfterReturn: true,\n                                                                      enableThreadSanitizer: true,\n                                                                      enableUBSanitizer: true,\n                                                                      disableMainThreadChecker: true,\n                                                                      randomExecutionOrder: false,\n                                                                      parallelizable: false,\n                                                                      commandLineArguments: [\"foo\": true],\n                                                                      targets: [Scheme.Test.TestTarget(targetReference: \"foo\",\n                                                                                                       randomExecutionOrder: false,\n                                                                                                       parallelizable: false)],\n                                                                      preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                          script: \"bar\",\n                                                                                                          settingsTarget: \"foo\")],\n                                                                      postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                           script: \"bar\",\n                                                                                                           settingsTarget: \"foo\")],\n                                                                      environmentVariables: [XCScheme.EnvironmentVariable(variable: \"foo\",\n                                                                                                                          value: \"bar\",\n                                                                                                                          enabled: false)]),\n                                                    profile: Scheme.Profile(config: \"profile config\",\n                                                                            commandLineArguments: [\"foo\": true],\n                                                                            preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                                script: \"bar\",\n                                                                                                                settingsTarget: \"foo\")],\n                                                                            postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                                 script: \"bar\",\n                                                                                                                 settingsTarget: \"foo\")],\n                                                                            environmentVariables: [XCScheme.EnvironmentVariable(variable: \"foo\",\n                                                                                                                                value: \"bar\",\n                                                                                                                                enabled: false)]),\n                                                    analyze: Scheme.Analyze(config: \"analyze config\"),\n                                                    archive: Scheme.Archive(config: \"archive config\",\n                                                                            customArchiveName: \"customArchiveName\",\n                                                                            revealArchiveInOrganizer: true,\n                                                                            preActions: [Scheme.ExecutionAction(name: \"preAction\",\n                                                                                                                script: \"bar\",\n                                                                                                                settingsTarget: \"foo\")],\n                                                                            postActions: [Scheme.ExecutionAction(name: \"postAction\",\n                                                                                                                 script: \"bar\",\n                                                                                                                 settingsTarget: \"foo\")]))],\n                                   packages: [\n                                       \"Yams\": .remote(\n                                           url: \"https://github.com/jpsim/Yams\",\n                                           versionRequirement: .upToNextMajorVersion(\"2.0.0\")\n                                       ),\n                                   ],\n                                   options: SpecOptions(minimumXcodeGenVersion: Version(major: 3, minor: 4, patch: 5),\n                                                        carthageBuildPath: \"carthageBuildPath\",\n                                                        carthageExecutablePath: \"carthageExecutablePath\",\n                                                        createIntermediateGroups: true,\n                                                        bundleIdPrefix: \"bundleIdPrefix\",\n                                                        settingPresets: .project,\n                                                        developmentLanguage: \"developmentLanguage\",\n                                                        indentWidth: 123,\n                                                        tabWidth: 456,\n                                                        usesTabs: true,\n                                                        xcodeVersion: \"xcodeVersion\",\n                                                        deploymentTarget: DeploymentTarget(iOS: Version(major: 1, minor: 2, patch: 3),\n                                                                                           tvOS: nil,\n                                                                                           watchOS: Version(major: 4, minor: 5, patch: 6),\n                                                                                           macOS: nil),\n                                                        disabledValidations: [.missingConfigFiles],\n                                                        defaultConfig: \"defaultConfig\",\n                                                        transitivelyLinkDependencies: true,\n                                                        groupSortPosition: .top,\n                                                        generateEmptyDirectories: true,\n                                                        findCarthageFrameworks: false),\n                                   fileGroups: [\"foo\", \"bar\"],\n                                   configFiles: [\"configFiles\": \"bar\"],\n                                   attributes: [\"attributes\": \"bar\"])\n\n                let json = proj.toJSONDictionary()\n                let restoredProj = try Project(basePath: Path.current, jsonDictionary: json)\n\n                // Examine some properties to make debugging easier\n                try expect(proj.aggregateTargets) == restoredProj.aggregateTargets\n                try expect(proj.configFiles) == restoredProj.configFiles\n                try expect(proj.settings) == restoredProj.settings\n                try expect(proj.basePath) == restoredProj.basePath\n                try expect(proj.fileGroups) == restoredProj.fileGroups\n                try expect(proj.schemes) == restoredProj.schemes\n                try expect(proj.options) == restoredProj.options\n                try expect(proj.settingGroups) == restoredProj.settingGroups\n                try expect(proj.targets) == restoredProj.targets\n                try expect(proj.packages) == restoredProj.packages\n\n                try expect(proj) == restoredProj\n            }\n        }\n    }\n}\n\nprivate func expectValidationErrors(_ project: Project, _ expectedErrors: Set<SpecValidationError.ValidationError>, file: String = #file, line: Int = #line) throws {\n    let expectedErrorString = expectedErrors\n        .map { $0.description }\n        .sorted()\n        .joined(separator: \"\\n\")\n    do {\n        try project.validate()\n        if !expectedErrors.isEmpty {\n            throw failure(\"Supposed to fail with:\\n\\(expectedErrorString)\", file: file, line: line)\n        }\n    } catch let error as SpecValidationError {\n        if Set(error.errors) != expectedErrors {\n            throw failure(\"Supposed to fail with:\\n\\(expectedErrorString)\\nbut got:\\n\\(error.errors.map { $0.description }.sorted().joined(separator: \"\\n\"))\", file: file, line: line)\n        }\n        return\n    } catch {\n        throw failure(\"Supposed to fail with:\\n\\(expectedErrorString)\", file: file, line: line)\n    }\n}\n\nprivate func expectValidationError(_ project: Project, _ expectedError: SpecValidationError.ValidationError, file: String = #file, line: Int = #line) throws {\n    do {\n        try project.validate()\n        throw failure(\"Supposed to fail with \\\"\\(expectedError)\\\"\", file: file, line: line)\n    } catch let error as SpecValidationError {\n        if !error.errors.contains(expectedError) {\n            throw failure(\"Supposed to fail with:\\n\\(expectedError)\\nbut got:\\n\\(error.errors.map { $0.description }.joined(separator: \"\\n\"))\", file: file, line: line)\n        }\n    } catch {\n        throw failure(\"Supposed to fail with \\\"\\(expectedError)\\\"\", file: file, line: line)\n    }\n}\n\nprivate func expectNoValidationError(_ project: Project, _ error: SpecValidationError.ValidationError, file: String = #file, line: Int = #line) throws {\n    do {\n        try project.validate()\n    } catch let validationError as SpecValidationError {\n        if validationError.errors.contains(error) {\n            throw failure(\"Failed with:\\n\\(error.description)\", file: file, line: line)\n        }\n    } catch {\n        throw failure(\"Failed with:\\n\\(error)\", file: file, line: line)\n    }\n}\n"
  },
  {
    "path": "Tests/ProjectSpecTests/SpecLoadingTests.swift",
    "content": "import Foundation\nimport PathKit\nimport ProjectSpec\nimport Spectre\nimport XcodeProj\nimport XCTest\nimport Yams\nimport TestSupport\nimport Version\n\nclass SpecLoadingTests: XCTestCase {\n\n    func testSpecLoaderDuplicateImports() {\n        describe {\n            $0.it(\"merges each file only once\") {\n                let path = fixturePath + \"duplicated_include/duplicated_import_sut.yml\"\n                let project = try loadSpec(path: path)\n\n                try expect(project.fileGroups) == [\"First\", \"Second\", \"Third\"]\n\n                let sutTarget = project.targets.first\n                try expect(sutTarget?.sources) == [TargetSource(path: \"template\")]\n                try expect(sutTarget?.preBuildScripts) == [BuildScript(script: .script(\"swiftlint\"), name: \"Swiftlint\")]\n            }\n        }\n    }\n\n    func testSpecLoader() {\n        describe {\n            $0.it(\"merges includes\") {\n                let path = fixturePath + \"include_test.yml\"\n                let project = try loadSpec(path: path, variables: [:])\n\n                try expect(project.name) == \"NewName\"\n                try expect(project.settingGroups) == [\n                    \"test\": Settings(buildSettings: [\"MY_SETTING1\": \"NEW VALUE\", \"MY_SETTING2\": \"VALUE2\", \"MY_SETTING3\": \"VALUE3\", \"MY_SETTING4\": \"${SETTING4}\"]),\n                    \"new\": Settings(buildSettings: [\"MY_SETTING\": \"VALUE\"]),\n                    \"toReplace\": Settings(buildSettings: [\"MY_SETTING2\": \"VALUE2\"]),\n                ]\n                try expect(project.targets) == [\n                    Target(name: \"IncludedTargetNew\", type: .application, platform: .tvOS, sources: [\"NewSource\"], dependencies: [Dependency(type: .package(products: []), reference: \"Yams\")]),\n                    Target(name: \"NewTarget\", type: .application, platform: .iOS, sources: [\"template\", \"target\"]),\n                ]\n            }\n\n            $0.it(\"merges includes with additional\") {\n                let path = fixturePath + \"include_test.yml\"\n                let project = try loadSpec(path: path, variables: [\"INCLUDE_ADDITIONAL_YAML\": \"YES\"])\n\n                try expect(project.name) == \"NewName\"\n                try expect(project.settingGroups) == [\n                    \"test\": Settings(buildSettings: [\"MY_SETTING1\": \"NEW VALUE\", \"MY_SETTING2\": \"VALUE2\", \"MY_SETTING3\": \"VALUE3\", \"MY_SETTING4\": \"${SETTING4}\", \"MY_SETTING5\": \"ADDITIONAL\"]),\n                    \"new\": Settings(buildSettings: [\"MY_SETTING\": \"VALUE\"]),\n                    \"toReplace\": Settings(buildSettings: [\"MY_SETTING2\": \"VALUE2\"]),\n                ]\n                try expect(project.targets) == [\n                    Target(name: \"IncludedTargetNew\", type: .application, platform: .tvOS, sources: [\"NewSource\"], dependencies: [Dependency(type: .package(products: []), reference: \"SwiftPM\"), Dependency(type: .package(products: []), reference: \"Yams\")]),\n                    Target(name: \"NewTarget\", type: .application, platform: .iOS, sources: [\"template\", \"target\"]),\n                ]\n            }\n\n            $0.it(\"merges includes without additional by environment variable\") {\n                let path = fixturePath + \"include_test.yml\"\n                let project = try loadSpec(path: path, variables: [\"INCLUDE_ADDITIONAL_YAML\": \"NO\"])\n\n                try expect(project.name) == \"NewName\"\n                try expect(project.settingGroups) == [\n                    \"test\": Settings(buildSettings: [\"MY_SETTING1\": \"NEW VALUE\", \"MY_SETTING2\": \"VALUE2\", \"MY_SETTING3\": \"VALUE3\", \"MY_SETTING4\": \"${SETTING4}\"]),\n                    \"new\": Settings(buildSettings: [\"MY_SETTING\": \"VALUE\"]),\n                    \"toReplace\": Settings(buildSettings: [\"MY_SETTING2\": \"VALUE2\"]),\n                ]\n                try expect(project.targets) == [\n                    Target(name: \"IncludedTargetNew\", type: .application, platform: .tvOS, sources: [\"NewSource\"], dependencies: [Dependency(type: .package(products: []), reference: \"Yams\")]),\n                    Target(name: \"NewTarget\", type: .application, platform: .iOS, sources: [\"template\", \"target\"]),\n                ]\n            }\n\n            $0.it(\"expands directories\") {\n                let path = fixturePath + \"paths_test.yml\"\n                let project = try loadSpec(path: path)\n\n                try expect(project.configFiles) == [\n                    \"IncludedConfig\": \"paths_test/config\",\n                    \"NewConfig\": \"config\",\n                    \"RecursiveConfig\": \"paths_test/recursive_test/config\",\n                ]\n\n                try expect(project.options) == SpecOptions(\n                    carthageBuildPath: \"paths_test/recursive_test/carthage_build\",\n                    carthageExecutablePath: \"carthage_executable\"\n                )\n\n                try expect(project.projectReferences) == [\n                    ProjectReference(name: \"ProjX\", path: \"TestProject/Project.xcodeproj\"),\n                ]\n\n                try expect(project.aggregateTargets) == [\n                    AggregateTarget(\n                        name: \"IncludedAggregateTarget\",\n                        targets: [\"IncludedTarget\"],\n                        configFiles: [\"Config\": \"paths_test/config\"],\n                        buildScripts: [BuildScript(script: .path(\"paths_test/buildScript\"))]\n                    ),\n                    AggregateTarget(\n                        name: \"NewAggregateTarget\",\n                        targets: [\"NewTarget\"],\n                        configFiles: [\"Config\": \"config\"],\n                        buildScripts: [BuildScript(script: .path(\"buildScript\"))]\n                    ),\n                    AggregateTarget(\n                        name: \"RecursiveAggregateTarget\",\n                        targets: [\"RecursiveTarget\"],\n                        configFiles: [\"Config\": \"paths_test/recursive_test/config\"],\n                        buildScripts: [BuildScript(script: .path(\"paths_test/recursive_test/buildScript\"))]\n                    ),\n                ]\n\n                try expect(project.targets) == [\n                    Target(\n                        name: \"IncludedTarget\",\n                        type: .application,\n                        platform: .tvOS,\n                        configFiles: [\"Config\": \"paths_test/config\"],\n                        sources: [\n                            \"paths_test/simplesource\",\n                            TargetSource(path: \"paths_test/source\", excludes: [\"file\"]),\n                        ],\n                        dependencies: [Dependency(type: .framework, reference: \"paths_test/Framework\")],\n                        info: Plist(path: \"paths_test/info\"),\n                        entitlements: Plist(path: \"paths_test/entitlements\"),\n                        preBuildScripts: [BuildScript(script: .path(\"paths_test/preBuildScript\"))],\n                        postCompileScripts: [BuildScript(script: .path(\"paths_test/postCompileScript\"))],\n                        postBuildScripts: [BuildScript(script: .path(\"paths_test/postBuildScript\"))],\n                        scheme: TargetScheme(testPlans: [.init(path: \"paths_test/TestPlan.xctestplan\")])\n                    ),\n                    Target(\n                        name: \"NewTarget\",\n                        type: .application,\n                        platform: .iOS,\n                        configFiles: [\"Config\": \"config\"],\n                        sources: [\n                            \"paths_test/template_source\",\n                            \"source\",\n                        ],\n                        dependencies: [Dependency(type: .framework, reference: \"Framework\")],\n                        info: Plist(path: \"info\"),\n                        entitlements: Plist(path: \"entitlements\"),\n                        preBuildScripts: [BuildScript(script: .path(\"preBuildScript\"))],\n                        postCompileScripts: [BuildScript(script: .path(\"postCompileScript\"))],\n                        postBuildScripts: [BuildScript(script: .path(\"postBuildScript\"))]\n                    ),\n                    Target(\n                        name: \"RecursiveTarget\",\n                        type: .application,\n                        platform: .macOS,\n                        configFiles: [\"Config\": \"paths_test/recursive_test/config\"],\n                        sources: [\"paths_test/recursive_test/source\"],\n                        dependencies: [Dependency(type: .framework, reference: \"paths_test/recursive_test/Framework\")],\n                        info: Plist(path: \"paths_test/recursive_test/info\"),\n                        entitlements: Plist(path: \"paths_test/recursive_test/entitlements\"),\n                        preBuildScripts: [BuildScript(script: .path(\"paths_test/recursive_test/prebuildScript\"))],\n                        postCompileScripts: [BuildScript(script: .path(\"paths_test/recursive_test/postCompileScript\"))],\n                        postBuildScripts: [BuildScript(script: .path(\"paths_test/recursive_test/postBuildScript\"))]\n                    ),\n                    Target(\n                        name: \"app\",\n                        type: .application,\n                        platform: .macOS,\n                        sources: [\"paths_test/same_relative_path_test/source\"],\n                        dependencies: [\n                            Dependency(type: .target, reference: \"target1\"),\n                            Dependency(type: .target, reference: \"target2\")\n                        ]\n                    ),\n                    Target(\n                        name: \"target1\",\n                        type: .framework,\n                        platform: .macOS,\n                        sources: [\"paths_test/same_relative_path_test/parent1/same/target1/source\"]\n                    ),\n                    Target(\n                        name: \"target2\",\n                        type: .framework,\n                        platform: .macOS,\n                        sources: [\"paths_test/same_relative_path_test/parent2/same/target2/source\"]\n                    )\n                ]\n\n                try expect(project.schemes) == [\n                    Scheme(\n                        name: \"Scheme\",\n                        build: .init(targets: [.init(target: \"NewTarget\")]),\n                        test: .init(testPlans: [.init(path: \"paths_test/TestPlan.xctestplan\")])\n                    )\n                ]\n\n                try expect(project.packages) == [\n                    \"LocalPackage\": .local(path: \"paths_test/relative_local_package/LocalPackage\", group: nil, excludeFromProject: false),\n                ]\n\n                try expect(project.fileGroups.contains(\"paths_test/relative_file_groups/TestFile.md\")) == true\n            }\n\n            $0.it(\"respects directory expansion preference\") {\n                let path = fixturePath + \"legacy_paths_test.yml\"\n                let project = try loadSpec(path: path)\n\n                try expect(project.configFiles) == [\n                    \"IncludedConfig\": \"config\",\n                ]\n\n                try expect(project.options) == SpecOptions(\n                    carthageBuildPath: \"carthage_build\",\n                    carthageExecutablePath: \"carthage_executable\"\n                )\n\n                try expect(project.aggregateTargets) == [\n                    AggregateTarget(\n                        name: \"IncludedAggregateTarget\",\n                        targets: [\"IncludedTarget\"],\n                        configFiles: [\"Config\": \"config\"],\n                        buildScripts: [BuildScript(script: .path(\"buildScript\"))]\n                    ),\n                ]\n\n                try expect(project.targets) == [\n                    Target(\n                        name: \"IncludedTarget\",\n                        type: .application,\n                        platform: .tvOS,\n                        configFiles: [\"Config\": \"config\"],\n                        sources: [\"source\"],\n                        dependencies: [Dependency(type: .framework, reference: \"Framework\")],\n                        info: Plist(path: \"info\"),\n                        entitlements: Plist(path: \"entitlements\"),\n                        preBuildScripts: [BuildScript(script: .path(\"preBuildScript\"))],\n                        postCompileScripts: [BuildScript(script: .path(\"postCompileScript\"))],\n                        postBuildScripts: [BuildScript(script: .path(\"postBuildScript\"))]\n                    ),\n                ]\n            }\n\n            $0.it(\"parses yaml types\") {\n                let path = fixturePath + \"yaml.yml\"\n                let dictionary = try loadYamlDictionary(path: path)\n                let expectedDictionary: [String: Any] = [\n                    \"true\": true,\n                    \"false\": false,\n                    \"yes\": true,\n                    \"no\": false,\n                    \"yesQuote\": \"YES\",\n                    \"noQuote\": \"NO\",\n                    \"int\": 1,\n                    \"intQuote\": \"1\",\n                    \"float\": 3.2,\n                    \"floatQuote\": \"10.10\",\n                    \"string\": \"hello\",\n                    \"stringQuote\": \"hello\",\n                    \"space\": \" \",\n                    \"empty\": \"\",\n                    \"emptyQuote\": \"\",\n                    \"emptyDictionary\": [String: Any](),\n                    \"arrayLiteral\": [1, 2],\n                    \"arrayList\": [1, 2],\n                ]\n                for (key, expectedValue) in expectedDictionary {\n                    guard let parsedValue = dictionary[key] else {\n                        throw failure(\"\\(key) does not exist\")\n                    }\n                    if String(describing: expectedValue) != String(describing: parsedValue) {\n                        throw failure(\"\\(key): \\(parsedValue) does not equal \\(expectedValue)\")\n                    }\n                }\n                if !(dictionary as NSDictionary).isEqual(expectedDictionary as NSDictionary) {\n                    throw failure(\"parsed yaml types don't match:\\n\\nParsed:\\n\\t\\(dictionary.map { \"\\($0.key): \\($0.value)\" }.joined(separator: \"\\n\\t\"))\\nExpected:\\n\\t\\(expectedDictionary.map { \"\\($0.key): \\($0.value)\" }.joined(separator: \"\\n\\t\"))\")\n                }\n            }\n\n            $0.it(\"expands variables\") {\n                let path = fixturePath + \"variables_test.yml\"\n                let project = try loadSpec(path: path, variables: [\n                    \"SETTING1\": \"ENV VALUE1\",\n                    \"SETTING4\": \"ENV VALUE4\",\n                    \"variable\": \"doesWin\",\n                ])\n\n                try expect(project.name) == \"NewName\"\n                try expect(project.settingGroups) == [\n                    \"test\": Settings(buildSettings: [\"MY_SETTING1\": \"ENV VALUE1\", \"MY_SETTING2\": \"VALUE2\", \"MY_SETTING4\": \"ENV VALUE4\"]),\n                    \"toReplace\": Settings(buildSettings: [\"MY_SETTING1\": \"VALUE1\"]),\n                ]\n                try expect(project.targets.last?.sources) == [\"SomeTarget\", \"doesWin\", \"templateVariable\"]\n            }\n        }\n    }\n\n    func testSpecLoaderLoadingJSON() {\n        describe {\n            $0.it(\"merges includes\") {\n                let path = fixturePath + \"include_test.json\"\n                let project = try loadSpec(path: path)\n\n                try expect(project.name) == \"NewName\"\n                try expect(project.settingGroups) == [\n                    \"test\": Settings(buildSettings: [\"MY_SETTING1\": \"NEW VALUE\", \"MY_SETTING2\": \"VALUE2\", \"MY_SETTING3\": \"VALUE3\", \"MY_SETTING4\": \"${SETTING4}\"]),\n                    \"new\": Settings(buildSettings: [\"MY_SETTING\": \"VALUE\"]),\n                    \"toReplace\": Settings(buildSettings: [\"MY_SETTING2\": \"VALUE2\"]),\n                ]\n                try expect(project.targets) == [\n                    Target(name: \"IncludedTargetNew\", type: .application, platform: .tvOS, sources: [\"NewSource\"]),\n                    Target(name: \"NewTarget\", type: .application, platform: .iOS),\n                ]\n            }\n        }\n    }\n\n    func testSpecWarningValidation() {\n        describe {\n            var path: Path!\n            $0.before {\n                path = Path(components: [NSTemporaryDirectory(), \"\\(NSUUID().uuidString).yaml\"])\n\n            }\n            $0.after {\n                try? FileManager.default.removeItem(atPath: path.string)\n            }\n            $0.it(\"fails validating warnings for deprecated placeholder usage\") {\n                let dictionary: [String: Any] = [\n                    \"name\": \"TestSpecWarningValidation\",\n                    \"templates\": [\n                        \"Framework\": [\n                            \"type\": \"framework\",\n                            \"sources\": [\"${target_name}/${platform}/Sources\"],\n                        ],\n                    ],\n                    \"targets\": [\n                        \"Framework\": [\n                            \"type\": \"framework\",\n                            \"platform\": \"iOS\",\n                            \"templates\": [\"Framework\"],\n                        ],\n                    ],\n                ]\n                try? Yams.dump(object: dictionary).write(toFile: path.string, atomically: true, encoding: .utf8)\n                let specLoader = SpecLoader(version: \"1.1.0\")\n                do {\n                    _ = try specLoader.loadProject(path: path)\n                } catch {\n                    throw failure(\"\\(error)\")\n                }\n            }\n\n            $0.it(\"successfully validates warnings for new placeholder usage\") {\n                let dictionary: [String: Any] = [\n                    \"name\": \"TestSpecWarningValidation\",\n                    \"templates\": [\n                        \"Framework\": [\n                            \"type\": \"framework\",\n                            \"sources\": [\"${target_name}/${platform}/Sources\"],\n                        ],\n                    ],\n                    \"targets\": [\n                        \"Framework\": [\n                            \"type\": \"framework\",\n                            \"platform\": \"iOS\",\n                            \"templates\": [\"Framework\"],\n                        ],\n                    ],\n                ]\n                try? Yams.dump(object: dictionary).write(toFile: path.string, atomically: true, encoding: .utf8)\n                let specLoader = SpecLoader(version: \"1.1.0\")\n                do {\n                    _ = try specLoader.loadProject(path: path)\n                } catch {\n                    throw failure(\"\\(error)\")\n                }\n                do {\n                    try specLoader.validateProjectDictionaryWarnings()\n                } catch {\n                    throw failure(\"Expected to not throw a validation error. Got: \\(error)\")\n                }\n            }\n        }\n    }\n\n    func testProjectSpecParser() {\n        let validTarget: [String: Any] = [\"type\": \"application\", \"platform\": \"iOS\"]\n        let validBreakpoint: [String: Any] = [\"type\": \"Exception\", \"scope\": \"All\", \"stopOnStyle\": \"Catch\"]\n        let invalid = \"invalid\"\n\n        describe {\n\n            $0.it(\"fails with incorrect platform\") {\n                var target = validTarget\n                target[\"platform\"] = invalid\n                try expectTargetError(target, .unknownTargetPlatform(invalid))\n            }\n\n            $0.it(\"fails with incorrect product type\") {\n                var target = validTarget\n                target[\"type\"] = invalid\n                try expectTargetError(target, .unknownTargetType(invalid))\n            }\n\n            $0.it(\"fails with invalid dependency\") {\n                var target = validTarget\n                target[\"dependencies\"] = [[invalid: \"name\"]]\n                try expectTargetError(target, .invalidDependency([invalid: \"name\"]))\n            }\n\n            $0.it(\"fails with incorrect breakpoint type\") {\n                var breakpoint = validBreakpoint\n                breakpoint[\"type\"] = invalid\n                try expectBreakpointError(breakpoint, .unknownBreakpointType(invalid))\n            }\n\n            $0.it(\"fails with incorrect breakpoint scope\") {\n                var target = validBreakpoint\n                target[\"scope\"] = invalid\n                try expectBreakpointError(target, .unknownBreakpointScope(invalid))\n            }\n\n            $0.it(\"fails with incorrect breakpoint stop on style\") {\n                var target = validBreakpoint\n                target[\"stopOnStyle\"] = invalid\n                try expectBreakpointError(target, .unknownBreakpointStopOnStyle(invalid))\n            }\n\n            $0.it(\"fails with incorrect breakpoint action type\") {\n                var breakpoint = validBreakpoint\n                breakpoint[\"actions\"] = [[\"type\": invalid]]\n                try expectBreakpointError(breakpoint, .unknownBreakpointActionType(invalid))\n            }\n\n            $0.it(\"fails with incorrect breakpoint action conveyance type\") {\n                var breakpoint = validBreakpoint\n                breakpoint[\"actions\"] = [[\"type\": \"Log\", \"conveyanceType\": invalid]]\n                try expectBreakpointError(breakpoint, .unknownBreakpointActionConveyanceType(invalid))\n            }\n\n            $0.it(\"fails with incorrect breakpoint action sound name\") {\n                var breakpoint = validBreakpoint\n                breakpoint[\"actions\"] = [[\"type\": \"Sound\", \"sound\": invalid]]\n                try expectBreakpointError(breakpoint, .unknownBreakpointActionSoundName(invalid))\n            }\n\n            $0.it(\"parses breakpoints\") {\n                let breakpointDictionaries = [\n                    [\"type\": \"File\", \"path\": \"Foo.swift\", \"line\": 7, \"column\": 14, \"condition\": \"bar == nil\"],\n                    [\"type\": \"Exception\", \"scope\": \"All\", \"stopOnStyle\": \"Catch\"],\n                    [\"type\": \"SwiftError\", \"enabled\": false],\n                    [\"type\": \"OpenGLError\", \"ignoreCount\": 2],\n                    [\"type\": \"Symbolic\", \"symbol\": \"UIViewAlertForUnsatisfiableConstraints\", \"module\": \"UIKitCore\"],\n                    [\"type\": \"IDEConstraintError\", \"continueAfterRunningActions\": true],\n                    [\"type\": \"IDETestFailure\"],\n                ]\n\n                let project = try getProjectSpec([\"breakpoints\": breakpointDictionaries])\n\n                let expectedBreakpoints = [\n                    Breakpoint(type: .file(path: \"Foo.swift\", line: 7, column: 14), condition: \"bar == nil\"),\n                    Breakpoint(type: .exception(.init(scope: .all, stopOnStyle: .catch))),\n                    Breakpoint(type: .swiftError, enabled: false),\n                    Breakpoint(type: .openGLError, ignoreCount: 2),\n                    Breakpoint(type: .symbolic(symbol: \"UIViewAlertForUnsatisfiableConstraints\", module: \"UIKitCore\")),\n                    Breakpoint(type: .ideConstraintError, continueAfterRunningActions: true),\n                    Breakpoint(type: .ideTestFailure),\n                ]\n\n                try expect(project.breakpoints) == expectedBreakpoints\n            }\n\n            $0.it(\"parses breakpoint actions\") {\n                var breakpointDicationary = validBreakpoint\n                breakpointDicationary[\"actions\"] = [\n                    [\"type\": \"DebuggerCommand\", \"command\": \"po $arg1\"],\n                    [\"type\": \"Log\", \"message\": \"message\", \"conveyanceType\": \"speak\"],\n                    [\"type\": \"ShellCommand\", \"path\": \"script.sh\", \"arguments\": \"argument1, argument2\", \"waitUntilDone\": true],\n                    [\"type\": \"GraphicsTrace\"],\n                    [\"type\": \"AppleScript\", \"script\": #\"display alert \"Hello!\"\"#],\n                    [\"type\": \"Sound\", \"sound\": \"Hero\"],\n                ]\n\n                let breakpoint = try Breakpoint(jsonDictionary: breakpointDicationary)\n\n                let expectedActions: [Breakpoint.Action] = [\n                    .debuggerCommand(\"po $arg1\"),\n                    .log(.init(message: \"message\", conveyanceType: .speak)),\n                    .shellCommand(path: \"script.sh\", arguments: \"argument1, argument2\", waitUntilDone: true),\n                    .graphicsTrace,\n                    .appleScript(#\"display alert \"Hello!\"\"#),\n                    .sound(.hero),\n                ]\n\n                try expect(breakpoint.actions) == expectedActions\n            }\n\n            $0.it(\"parses sources\") {\n                var targetDictionary1 = validTarget\n                targetDictionary1[\"sources\"] = [\n                    \"sourceString\",\n                    [\"path\": \"sourceObject\"],\n                    [\"path\": \"sourceWithFlagsArray\", \"compilerFlags\": [\"-Werror\"]],\n                    [\"path\": \"sourceWithFlagsString\", \"compilerFlags\": \"-Werror -Wextra\"],\n                    [\"path\": \"sourceWithExcludes\", \"excludes\": [\"Foo.swift\"]],\n                    [\"path\": \"sourceWithFileType\", \"type\": \"file\"],\n                    [\"path\": \"sourceWithGroupType\", \"type\": \"group\"],\n                    [\"path\": \"sourceWithFolderType\", \"type\": \"folder\"],\n                    [\"path\": \"sourceWithResourceTags\", \"resourceTags\": [\"tag1\", \"tag2\"]],\n                ]\n                var targetDictionary2 = validTarget\n                targetDictionary2[\"sources\"] = \"source3\"\n\n                let target1 = try Target(name: \"test\", jsonDictionary: targetDictionary1)\n                let target2 = try Target(name: \"test\", jsonDictionary: targetDictionary2)\n\n                let target1SourcesExpect = [\n                    TargetSource(path: \"sourceString\"),\n                    TargetSource(path: \"sourceObject\"),\n                    TargetSource(path: \"sourceWithFlagsArray\", compilerFlags: [\"-Werror\"]),\n                    TargetSource(path: \"sourceWithFlagsString\", compilerFlags: [\"-Werror\", \"-Wextra\"]),\n                    TargetSource(path: \"sourceWithExcludes\", excludes: [\"Foo.swift\"]),\n                    TargetSource(path: \"sourceWithFileType\", type: .file),\n                    TargetSource(path: \"sourceWithGroupType\", type: .group),\n                    TargetSource(path: \"sourceWithFolderType\", type: .folder),\n                    TargetSource(path: \"sourceWithResourceTags\", resourceTags: [\"tag1\", \"tag2\"]),\n                ]\n\n                try expect(target1.sources) == target1SourcesExpect\n                try expect(target2.sources) == [\"source3\"]\n            }\n\n            $0.it(\"parses target dependencies\") {\n                var targetDictionary = validTarget\n                targetDictionary[\"dependencies\"] = [\n                    [\"target\": \"name\", \"embed\": false, \"platformFilter\": \"all\"],\n                    [\"target\": \"project/name\", \"embed\": false, \"platformFilter\": \"macOS\"],\n                    [\"carthage\": \"name\", \"findFrameworks\": true, \"platformFilter\": \"iOS\"],\n                    [\"carthage\": \"name\", \"findFrameworks\": true, \"linkType\": \"static\"],\n                    [\"framework\": \"path\", \"weak\": true],\n                    [\"sdk\": \"Contacts.framework\"],\n                    [\n                        \"sdk\": \"Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework\",\n                        \"root\": \"DEVELOPER_DIR\",\n                    ],\n                    [\"target\": \"conditionalMatch\", \"platforms\": [\"iOS\"]],\n                    [\"target\": \"conditionalMiss\", \"platforms\": [\"watchOS\"]],\n                ]\n                let target = try Target(name: \"test\", jsonDictionary: targetDictionary)\n                try expect(target.dependencies.count) == 8\n                try expect(target.dependencies[0]) == Dependency(type: .target, reference: \"name\", embed: false, platformFilter: .all)\n                try expect(target.dependencies[1]) == Dependency(type: .target, reference: \"project/name\", embed: false, platformFilter: .macOS)\n                try expect(target.dependencies[2]) == Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: \"name\", platformFilter: .iOS)\n                try expect(target.dependencies[3]) == Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: \"name\")\n                try expect(target.dependencies[4]) == Dependency(type: .framework, reference: \"path\", weakLink: true)\n                try expect(target.dependencies[5]) == Dependency(type: .sdk(root: nil), reference: \"Contacts.framework\")\n                try expect(target.dependencies[6]) == Dependency(type: .sdk(root: \"DEVELOPER_DIR\"), reference: \"Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework\")\n                try expect(target.dependencies[7]) == Dependency(type: .target, reference: \"conditionalMatch\", platforms: [.iOS])\n            }\n\n            $0.it(\"parses info plist\") {\n                var targetDictionary = validTarget\n                targetDictionary[\"info\"] = [\n                    \"path\": \"Info.plist\",\n                    \"properties\": [\n                        \"CFBundleName\": \"MyAppName\",\n                        \"UIBackgroundModes\": [\"fetch\"],\n                    ],\n                ]\n\n                let target = try Target(name: \"\", jsonDictionary: targetDictionary)\n                try expect(target.info) == Plist(path: \"Info.plist\", attributes: [\n                    \"CFBundleName\": \"MyAppName\",\n                    \"UIBackgroundModes\": [\"fetch\"],\n                ])\n            }\n\n            $0.it(\"parses entitlement plist\") {\n                var targetDictionary = validTarget\n                targetDictionary[\"entitlements\"] = [\n                    \"path\": \"app.entitlements\",\n                    \"properties\": [\n                        \"com.apple.security.application-groups\": \"com.group\",\n                    ],\n                ]\n\n                let target = try Target(name: \"\", jsonDictionary: targetDictionary)\n                try expect(target.entitlements) == Plist(path: \"app.entitlements\", attributes: [\n                    \"com.apple.security.application-groups\": \"com.group\",\n                ])\n            }\n\n            $0.it(\"parses cross platform targets\") {\n                let targetDictionary: [String: Any] = [\n                    \"platform\": [\"iOS\", \"tvOS\"],\n                    \"deploymentTarget\": [\"iOS\": 9.0, \"tvOS\": \"10.0\"],\n                    \"type\": \"framework\",\n                    \"sources\": [\"Framework\", \"Framework ${platform}\"],\n                    \"settings\": [\"SETTING\": \"value_${platform}\"],\n                ]\n\n                let project = try getProjectSpec([\"targets\": [\"Framework\": targetDictionary]])\n                var target_iOS = Target(name: \"Framework_iOS\", type: .framework, platform: .iOS)\n                var target_tvOS = Target(name: \"Framework_tvOS\", type: .framework, platform: .tvOS)\n\n                target_iOS.sources = [\"Framework\", \"Framework iOS\"]\n                target_tvOS.sources = [\"Framework\", \"Framework tvOS\"]\n                target_iOS.settings = [\"PRODUCT_NAME\": \"Framework\", \"SETTING\": \"value_iOS\"]\n                target_tvOS.settings = [\"PRODUCT_NAME\": \"Framework\", \"SETTING\": \"value_tvOS\"]\n                target_iOS.deploymentTarget = Version(major: 9, minor: 0, patch: 0)\n                target_tvOS.deploymentTarget = Version(major: 10, minor: 0, patch: 0)\n\n                try expect(project.targets) == [target_iOS, target_tvOS]\n            }\n            \n            $0.it(\"parses no platform fallbacks to auto if we are using supported destinations\") {\n                let targetDictionary: [String: Any] = [\n                    \"type\": \"framework\",\n                    \"supportedDestinations\": [\"iOS\", \"tvOS\"]\n                ]\n\n                let project = try getProjectSpec([\"targets\": [\"Framework\": targetDictionary]])\n                let target = Target(name: \"Framework\", type: .framework, platform: .auto)\n                \n                try expect(project.targets) == [target]\n            }\n            \n            $0.it(\"parses no platform fails if we are not using supported destinations\") {\n                let expectedError = SpecParsingError.unknownTargetPlatform(\"\")\n                \n                let projectDictionary: [String: Any] = [\n                    \"name\": \"test\",\n                    \"targets\": [\"target1\": [\n                        \"type\": \"application\"\n                    ] as [String : Any]]\n                ]\n                \n                try expectError(expectedError) {\n                    _ = try Project(jsonDictionary: projectDictionary)\n                }\n            }\n            \n            $0.it(\"parses supported destinations with macCatalyst but not iOS, we add iOS\") {\n                let targetDictionary: [String: Any] = [\n                    \"type\": \"framework\",\n                    \"supportedDestinations\": [\"macCatalyst\"]\n                ]\n                \n                let project = try getProjectSpec([\"targets\": [\"Framework\": targetDictionary]])\n                let target = Target(name: \"Framework\", type: .framework, platform: .auto)\n                \n                try expect(project.targets) == [target]\n                try expect(project.targets.first?.supportedDestinations) == [.macCatalyst, .iOS]\n            }\n            \n            $0.it(\"invalid target platform because platform is an array and supported destinations is in use\") {\n                let expectedError = SpecParsingError.invalidTargetPlatformAsArray\n                \n                let projectDictionary: [String: Any] = [\n                    \"name\": \"test\",\n                    \"targets\": [\"target1\": [\n                        \"type\": \"application\",\n                        \"platform\": [\"iOS\", \"tvOS\"],\n                        \"supportedDestinations\": [\"iOS\", \"tvOS\"]\n                    ] as [String : Any]]\n                ]\n                \n                try expectError(expectedError) {\n                    _ = try Project(jsonDictionary: projectDictionary)\n                }\n            }\n            \n            $0.it(\"parses target templates\") {\n\n                let targetDictionary: [String: Any] = [\n                    \"deploymentTarget\": \"1.2.0\",\n                    \"sources\": [\"targetSource\"],\n                    \"templates\": [\"temp2\", \"temp\"],\n                    \"templateAttributes\": [\n                        \"source\": \"replacedSource\",\n                    ],\n                ]\n\n                let project = try getProjectSpec([\n                    \"targets\": [\"Framework\": targetDictionary],\n                    \"targetTemplates\": [\n                        \"temp\": [\n                            \"platform\": \"iOS\",\n                            \"sources\": [\n                                \"templateSource\",\n                                [\"path\": \"Sources/${target_name}\"],\n                            ],\n                        ],\n                        \"temp2\": [\n                            \"type\": \"framework\",\n                            \"platform\": \"tvOS\",\n                            \"deploymentTarget\": \"1.1.0\",\n                            \"configFiles\": [\n                                \"debug\": \"Configs/${target_name}/debug.xcconfig\",\n                                \"release\": \"Configs/${target_name}/release.xcconfig\",\n                            ],\n                            \"sources\": [\"${source}\"],\n                        ],\n                    ],\n                ])\n\n                let target = project.targets.first!\n                try expect(target.type) == .framework // uses value\n                try expect(target.platform) == .iOS // uses latest value\n                try expect(target.deploymentTarget) == Version(\"1.2.0\") // keeps value\n                try expect(target.sources) == [\"replacedSource\", \"templateSource\", \"Sources/Framework\", \"targetSource\"] // merges array in order and replace ${target_name}\n                try expect(target.configFiles[\"debug\"]) == \"Configs/Framework/debug.xcconfig\" // replaces $target_name\n                try expect(target.configFiles[\"release\"]) == \"Configs/Framework/release.xcconfig\" // replaces ${target_name}\n            }\n\n            $0.it(\"parses nested target templates\") {\n\n                let targetDictionary: [String: Any] = [\n                    \"deploymentTarget\": \"1.2.0\",\n                    \"sources\": [\"targetSource\"],\n                    \"templates\": [\"temp2\"],\n                ]\n\n                let project = try getProjectSpec([\n                    \"targets\": [\"Framework\": targetDictionary],\n                    \"targetTemplates\": [\n                        \"temp\": [\n                            \"type\": \"framework\",\n                            \"platform\": \"iOS\",\n                            \"sources\": [\"nestedTemplateSource1\"],\n                        ],\n                        \"temp1\": [\n                            \"type\": \"application\",\n                            \"sources\": [\"nestedTemplateSource2\"],\n                        ],\n                        \"temp2\": [\n                            \"platform\": \"tvOS\",\n                            \"deploymentTarget\": \"1.1.0\",\n                            \"configFiles\": [\"debug\": \"Configs/${target_name}/debug.xcconfig\"],\n                            \"templates\": [\"temp\", \"temp1\"],\n                            \"sources\": [\"templateSource\"],\n                        ],\n                    ],\n                ])\n\n                let target = project.targets.first!\n                try expect(target.type) == .application // uses value of last nested template\n                try expect(target.platform) == .tvOS // uses latest value\n                try expect(target.deploymentTarget) == Version(\"1.2.0\") // keeps value\n                try expect(target.sources) == [\"nestedTemplateSource1\", \"nestedTemplateSource2\", \"templateSource\", \"targetSource\"] // merges array in order\n                try expect(target.configFiles[\"debug\"]) == \"Configs/Framework/debug.xcconfig\" // replaces $target_name\n            }\n\n            $0.it(\"parses complex nested target templates\") {\n\n                let targetDictionary: [String: Any] = [\n                    \"type\": \"framework\",\n                    \"platform\": \"iOS\",\n                    \"templates\": [\"temp\"],\n                    \"sources\": [\"target\"],\n                    \"templateAttributes\": [\n                        \"temp\": \"temp-by-target\",\n                        \"a\": \"a-by-target\",\n                        \"b\": \"b-by-target\", // This should win over attributes defined in template \"temp\"\n                    ],\n                ]\n\n                let project = try getProjectSpec([\n                    \"targets\": [\"Framework\": targetDictionary],\n                    \"targetTemplates\": [\n                        \"temp\": [\n                            \"templates\": [\"a\", \"d\"],\n                            \"sources\": [\"temp\", \"${temp}\"],\n                            \"templateAttributes\": [\n                                \"b\": \"b-by-temp\",\n                                \"c\": \"c-by-temp\",\n                                \"d\": \"d-by-temp\",\n                            ],\n                        ],\n                        \"a\": [\n                            \"templates\": [\"b\", \"c\"],\n                            \"sources\": [\"a\", \"${a}\"],\n                            \"templateAttributes\": [\n                                \"c\": \"c-by-a\",\n                            ],\n                        ],\n                        \"b\": [\n                            \"sources\": [\"b\", \"${b}\"],\n                        ],\n                        \"c\": [\n                            \"sources\": [\"c\", \"${c}\"],\n                        ],\n                        \"d\": [\n                            \"sources\": [\"d\", \"${d}\"],\n                            \"templates\": [\"e\"],\n                            \"templateAttributes\": [\n                                \"e\": \"e-by-d\",\n                            ],\n                        ],\n                        \"e\": [\n                            \"sources\": [\"e\", \"${e}\"],\n                        ],\n\n                    ],\n                ])\n\n                let target = project.targets.first!\n                try expect(target.type) == .framework // uses value of last nested template\n                try expect(target.platform) == .iOS // uses latest value\n                try expect(target.sources) == [\"b\", \"b-by-target\",\n                                               \"c\", \"c-by-temp\",\n                                               \"a\", \"a-by-target\",\n                                               \"e\", \"e-by-d\",\n                                               \"d\", \"d-by-temp\",\n                                               \"temp\", \"temp-by-target\",\n                                               \"target\"] // merges array in order\n            }\n\n            $0.it(\"parses nested target templates with cycle\") {\n\n                let targetDictionary: [String: Any] = [\n                    \"deploymentTarget\": \"1.2.0\",\n                    \"sources\": [\"targetSource\"],\n                    \"templates\": [\"temp2\"],\n                ]\n\n                let project = try getProjectSpec([\n                    \"targets\": [\"Framework\": targetDictionary],\n                    \"targetTemplates\": [\n                        \"temp\": [\n                            \"type\": \"framework\",\n                            \"platform\": \"iOS\",\n                            \"templates\": [\"temp1\"],\n                            \"sources\": [\"nestedTemplateSource1\"],\n                        ],\n                        \"temp1\": [\n                            \"platform\": \"macOS\",\n                            \"templates\": [\"temp2\"],\n                            \"sources\": [\"nestedTemplateSource2\"],\n                        ],\n                        \"temp2\": [\n                            \"platform\": \"tvOS\",\n                            \"deploymentTarget\": \"1.1.0\",\n                            \"configFiles\": [\"debug\": \"Configs/${target_name}/debug.xcconfig\"],\n                            \"templates\": [\"temp\", \"temp1\"],\n                            \"sources\": [\"templateSource\"],\n                        ],\n                    ],\n                ])\n\n                let target = project.targets.first!\n                try expect(target.type) == .framework // uses value\n                try expect(target.platform) == .tvOS // uses latest value\n                try expect(target.deploymentTarget) == Version(\"1.2.0\") // keeps value\n                try expect(target.sources) == [\"nestedTemplateSource2\", \"nestedTemplateSource1\", \"templateSource\", \"targetSource\"] // merges array in order\n                try expect(target.configFiles[\"debug\"]) == \"Configs/Framework/debug.xcconfig\" // replaces $target_name\n            }\n\n            $0.it(\"parses cross platform target templates\") {\n\n                let project = try getProjectSpec([\n                    \"targets\": [\n                        \"Framework\": [\n                            \"type\": \"framework\",\n                            \"templates\": [\"temp\"],\n                        ],\n                    ],\n                    \"targetTemplates\": [\n                        \"temp\": [\n                            \"platform\": [\"iOS\", \"tvOS\"],\n                        ],\n                    ],\n                ])\n\n                let iOSTarget = project.targets.first { $0.platform == .iOS }\n                let tvOSTarget = project.targets.first { $0.platform == .tvOS }\n                try expect(iOSTarget?.type) == .framework\n                try expect(tvOSTarget?.type) == .framework\n            }\n\n            $0.it(\"parses platform specific templates\") {\n\n                let project = try getProjectSpec([\n                    \"targets\": [\n                        \"Framework\": [\n                            \"type\": \"framework\",\n                            \"platform\": [\"iOS\", \"tvOS\"],\n                            \"templates\": [\"${platform}\"],\n                        ],\n                    ],\n                    \"targetTemplates\": [\n                        \"iOS\": [\n                            \"sources\": \"A\",\n                        ],\n                        \"tvOS\": [\n                            \"sources\": \"B\",\n                        ],\n                    ],\n                ])\n\n                let iOSTarget = project.targets.first { $0.platform == .iOS }\n                let tvOSTarget = project.targets.first { $0.platform == .tvOS }\n                try expect(iOSTarget?.sources) == [\"A\"]\n                try expect(tvOSTarget?.sources) == [\"B\"]\n            }\n\n            $0.it(\"parses aggregate targets\") {\n                let dictionary: [String: Any] = [\n                    \"targets\": [\"target_1\", \"target_2\"],\n                    \"settings\": [\"SETTING\": \"VALUE\"],\n                    \"configFiles\": [\"debug\": \"file.xcconfig\"],\n                ]\n\n                let project = try getProjectSpec([\"aggregateTargets\": [\"AggregateTarget\": dictionary]])\n                let expectedTarget = AggregateTarget(name: \"AggregateTarget\", targets: [\"target_1\", \"target_2\"], settings: [\"SETTING\": \"VALUE\"], configFiles: [\"debug\": \"file.xcconfig\"])\n                try expect(project.aggregateTargets) == [expectedTarget]\n            }\n\n            $0.it(\"parses target schemes\") {\n                var targetDictionary = validTarget\n                targetDictionary[\"scheme\"] = [\n                    \"testTargets\": [\"t1\", [\"name\": \"t2\"]],\n                    \"configVariants\": [\"dev\", \"app-store\"],\n                    \"commandLineArguments\": [\n                        \"ENV1\": true,\n                    ],\n                    \"gatherCoverageData\": true,\n                    \"coverageTargets\": [\"t1\"],\n                    \"storeKitConfiguration\": \"Configuration.storekit\",\n                    \"language\": \"en\",\n                    \"region\": \"US\",\n                    \"disableMainThreadChecker\": true,\n                    \"stopOnEveryMainThreadCheckerIssue\": true,\n                    \"disableThreadPerformanceChecker\": true,\n                    \"environmentVariables\": [\n                        \"TEST_VAR\": \"TEST_VAL\",\n                    ],\n                    \"preActions\": [\n                        [\n                            \"script\": \"dothing\",\n                            \"name\": \"Do Thing\",\n                            \"settingsTarget\": \"test\",\n                        ],\n                    ],\n                    \"postActions\": [\n                        [\n                            \"script\": \"hello\",\n                        ],\n                    ],\n                    \"management\": [\n                        \"shared\": false,\n                        \"isShown\": true,\n                        \"orderHint\": 10\n                    ],\n                ]\n\n                let target = try Target(name: \"test\", jsonDictionary: targetDictionary)\n\n                let scheme = TargetScheme(\n                    testTargets: [\"t1\", \"t2\"],\n                    configVariants: [\"dev\", \"app-store\"],\n                    gatherCoverageData: true,\n                    coverageTargets: [\"t1\"],\n                    storeKitConfiguration: \"Configuration.storekit\",\n                    language: \"en\",\n                    region: \"US\",\n                    disableMainThreadChecker: true,\n                    stopOnEveryMainThreadCheckerIssue: true,\n                    disableThreadPerformanceChecker: true,\n                    commandLineArguments: [\"ENV1\": true],\n                    environmentVariables: [XCScheme.EnvironmentVariable(variable: \"TEST_VAR\", value: \"TEST_VAL\", enabled: true)],\n                    preActions: [.init(name: \"Do Thing\", script: \"dothing\", settingsTarget: \"test\")],\n                    postActions: [.init(name: \"Run Script\", script: \"hello\")],\n                    management: Scheme.Management(shared: false, orderHint: 10, isShown: true)\n                )\n\n                try expect(target.scheme) == scheme\n            }\n\n            $0.it(\"parses schemes\") {\n                let schemeDictionary: [String: Any] = [\n                    \"build\": [\n                        \"parallelizeBuild\": false,\n                        \"buildImplicitDependencies\": false,\n                        \"runPostActionsOnFailure\": true,\n                        \"targets\": [\n                            \"Target1\": \"all\",\n                            \"Target2\": \"testing\",\n                            \"Target3\": \"none\",\n                            \"Target4\": [\"testing\": true],\n                            \"Target5\": [\"testing\": false],\n                            \"Target6\": [\"test\", \"analyze\"],\n                            \"ExternalProject/Target7\": [\"run\"],\n                        ],\n                        \"preActions\": [\n                            [\n                                \"script\": \"echo Before Build\",\n                                \"name\": \"Before Build\",\n                                \"settingsTarget\": \"Target1\",\n                            ],\n                        ],\n                    ],\n                    \"run\": [\n                        \"config\": \"debug\",\n                        \"launchAutomaticallySubstyle\": 2,\n                        \"enableGPUFrameCaptureMode\": \"disabled\",\n                        \"storeKitConfiguration\": \"Configuration.storekit\",\n                        \"disableThreadPerformanceChecker\": true,\n                    ],\n                    \"test\": [\n                        \"config\": \"debug\",\n                        \"targets\": [\n                            \"Target1\",\n                            [\n                                \"name\": \"ExternalProject/Target2\",\n                                \"parallelizable\": true,\n                                \"skipped\": true,\n                                \"location\": \"test.gpx\",\n                                \"randomExecutionOrder\": true,\n                                \"skippedTests\": [\"Test/testExample()\"],\n                            ],\n                        ],\n                        \"gatherCoverageData\": true,\n                        \"disableMainThreadChecker\": true,\n                        \"stopOnEveryMainThreadCheckerIssue\": true,\n                        \"testPlans\": [\n                            [\n                                \"path\": \"Path/Plan.xctestplan\"\n                            ],\n                            [\n                                \"path\": \"Path/Plan2.xctestplan\"\n                            ]\n                        ],\n                        \"preferredScreenCaptureFormat\": \"screenshots\",\n                    ],\n                    \"management\": [\n                        \"isShown\": false,\n                        \"orderHint\": 4\n                    ],\n                ]\n                let scheme = try Scheme(name: \"Scheme\", jsonDictionary: schemeDictionary)\n                let expectedTargets: [Scheme.BuildTarget] = [\n                    Scheme.BuildTarget(target: \"Target1\", buildTypes: BuildType.all),\n                    Scheme.BuildTarget(target: \"Target2\", buildTypes: [.testing, .analyzing]),\n                    Scheme.BuildTarget(target: \"Target3\", buildTypes: []),\n                    Scheme.BuildTarget(target: \"Target4\", buildTypes: [.testing]),\n                    Scheme.BuildTarget(target: \"Target5\", buildTypes: []),\n                    Scheme.BuildTarget(target: \"Target6\", buildTypes: [.testing, .analyzing]),\n                    Scheme.BuildTarget(target: \"ExternalProject/Target7\", buildTypes: [.running]),\n                ]\n                try expect(scheme.name) == \"Scheme\"\n                try expect(scheme.build.targets) == expectedTargets\n                try expect(scheme.build.preActions.first?.script) == \"echo Before Build\"\n                try expect(scheme.build.preActions.first?.name) == \"Before Build\"\n                try expect(scheme.build.preActions.first?.settingsTarget) == \"Target1\"\n\n                try expect(scheme.build.parallelizeBuild) == false\n                try expect(scheme.build.buildImplicitDependencies) == false\n                try expect(scheme.build.runPostActionsOnFailure) == true\n\n                let expectedRun = Scheme.Run(\n                    config: \"debug\",\n                    enableGPUFrameCaptureMode: .disabled,\n                    disableThreadPerformanceChecker: true,\n                    launchAutomaticallySubstyle: \"2\",\n                    storeKitConfiguration: \"Configuration.storekit\"\n                )\n                try expect(scheme.run) == expectedRun\n\n                let expectedTest = Scheme.Test(\n                    config: \"debug\",\n                    gatherCoverageData: true,\n                    disableMainThreadChecker: true,\n                    targets: [\n                        \"Target1\",\n                        Scheme.Test.TestTarget(\n                            targetReference: \"ExternalProject/Target2\",\n                            randomExecutionOrder: true,\n                            parallelizable: true,\n                            location: \"test.gpx\",\n                            skipped: true,\n                            skippedTests: [\"Test/testExample()\"]\n                        ),\n                    ],\n                    testPlans: [\n                        .init(path: \"Path/Plan.xctestplan\"),\n                        .init(path: \"Path/Plan2.xctestplan\")\n                    ],\n                    preferredScreenCaptureFormat: .screenshots\n                )\n                try expect(scheme.test) == expectedTest\n\n                let expectedManagement = Scheme.Management(shared: true, orderHint: 4, isShown: false)\n                try expect(scheme.management) == expectedManagement\n            }\n\n            $0.it(\"parses alternate test schemes\") {\n                let schemeDictionary: [String: Any] = [\n                    \"build\": [\n                        \"targets\": [\"Target1\": \"all\"],\n                    ],\n                    \"test\": [\n                        \"config\": \"debug\",\n                        \"targets\": [\n                            \"Target1\",\n                            [\n                                \"name\": \"ExternalProject/Target2\",\n                                \"parallelizable\": true,\n                                \"location\": \"New York, NY, USA\",\n                                \"randomExecutionOrder\": true,\n                                \"selectedTests\": [\"Test/testExample()\"],\n                            ],\n                        ],\n                        \"gatherCoverageData\": true,\n                        \"disableMainThreadChecker\": true,\n                        \"stopOnEveryMainThreadCheckerIssue\": true,\n                    ],\n                    \"management\": [\n                        \"isShown\": false\n                    ],\n                ]\n                let scheme = try Scheme(name: \"Scheme\", jsonDictionary: schemeDictionary)\n\n                let expectedTest = Scheme.Test(\n                    config: \"debug\",\n                    gatherCoverageData: true,\n                    disableMainThreadChecker: true,\n                    targets: [\n                        \"Target1\",\n                        Scheme.Test.TestTarget(\n                            targetReference: \"ExternalProject/Target2\",\n                            randomExecutionOrder: true,\n                            parallelizable: true,\n                            location: \"New York, NY, USA\",\n                            selectedTests: [\"Test/testExample()\"]\n                        ),\n                    ]\n                )\n                try expect(scheme.test) == expectedTest\n\n                let expectedManagement = Scheme.Management(shared: true, orderHint: nil, isShown: false)\n                try expect(scheme.management) == expectedManagement\n            }\n\n            $0.it(\"parses schemes variables\") {\n                let schemeDictionary: [String: Any] = [\n                    \"build\": [\n                        \"targets\": [\"Target1\": \"all\"],\n                    ],\n                    \"run\": [\n                        \"environmentVariables\": [\n                            [\"variable\": \"BOOL_TRUE\", \"value\": true],\n                            [\"variable\": \"BOOL_YES\", \"value\": \"YES\"],\n                            [\"variable\": \"ENVIRONMENT\", \"value\": \"VARIABLE\"],\n                            [\"variable\": \"OTHER_ENV_VAR\", \"value\": \"VAL\", \"isEnabled\": false],\n                        ],\n                        \"launchAutomaticallySubstyle\": \"2\",\n                        \"storeKitConfiguration\": \"Configuration.storekit\",\n                    ],\n                    \"test\": [\n                        \"environmentVariables\": [\n                            \"BOOL_TRUE\": true,\n                            \"BOOL_YES\": \"YES\",\n                            \"TEST\": \"VARIABLE\",\n                        ],\n                    ],\n                    \"profile\": [\n                        \"config\": \"Release\",\n                    ],\n                ]\n\n                let scheme = try Scheme(name: \"Scheme\", jsonDictionary: schemeDictionary)\n\n                let expectedRunVariables = [\n                    XCScheme.EnvironmentVariable(variable: \"BOOL_TRUE\", value: \"YES\", enabled: true),\n                    XCScheme.EnvironmentVariable(variable: \"BOOL_YES\", value: \"YES\", enabled: true),\n                    XCScheme.EnvironmentVariable(variable: \"ENVIRONMENT\", value: \"VARIABLE\", enabled: true),\n                    XCScheme.EnvironmentVariable(variable: \"OTHER_ENV_VAR\", value: \"VAL\", enabled: false),\n                ]\n\n                let expectedTestVariables = [\n                    XCScheme.EnvironmentVariable(variable: \"BOOL_TRUE\", value: \"YES\", enabled: true),\n                    XCScheme.EnvironmentVariable(variable: \"BOOL_YES\", value: \"YES\", enabled: true),\n                    XCScheme.EnvironmentVariable(variable: \"TEST\", value: \"VARIABLE\", enabled: true),\n                ]\n\n                try expect(scheme.run?.environmentVariables) == expectedRunVariables\n                try expect(scheme.run?.launchAutomaticallySubstyle) == \"2\"\n                try expect(scheme.run?.storeKitConfiguration) == \"Configuration.storekit\"\n                try expect(scheme.test?.environmentVariables) == expectedTestVariables\n                try expect(scheme.profile?.config) == \"Release\"\n                try expect(scheme.profile?.environmentVariables.isEmpty) == true\n            }\n\n            $0.it(\"parses alternate schemes variables\") {\n                let schemeDictionary: [String: Any] = [\n                    \"build\": [\n                        \"targets\": [\"Target1\": \"all\"],\n                    ],\n                    \"run\": [\n                        \"launchAutomaticallySubstyle\": 2, // Both integer and string supported\n                        \"storeKitConfiguration\": \"Configuration.storekit\",\n                    ],\n                ]\n\n                let scheme = try Scheme(name: \"Scheme\", jsonDictionary: schemeDictionary)\n                try expect(scheme.run?.launchAutomaticallySubstyle) == \"2\"\n                try expect(scheme.run?.storeKitConfiguration) == \"Configuration.storekit\"\n            }\n\n            $0.it(\"parses scheme templates\") {\n                let targetDictionary: [String: Any] = [\n                    \"deploymentTarget\": \"1.2.0\",\n                    \"sources\": [\"targetSource\"],\n                    \"templates\": [\"temp2\", \"temp\"],\n                    \"templateAttributes\": [\n                        \"source\": \"replacedSource\",\n                    ],\n                ]\n\n                let project = try getProjectSpec([\n                    \"targets\": [\"Framework\": targetDictionary],\n                    \"targetTemplates\": [\n                        \"temp\": [\n                            \"platform\": \"iOS\",\n                            \"sources\": [\n                                \"templateSource\",\n                                [\"path\": \"Sources/${target_name}\"],\n                            ],\n                        ],\n                        \"temp2\": [\n                            \"type\": \"framework\",\n                            \"platform\": \"tvOS\",\n                            \"deploymentTarget\": \"1.1.0\",\n                            \"configFiles\": [\n                                \"debug\": \"Configs/${target_name}/debug.xcconfig\",\n                                \"release\": \"Configs/${target_name}/release.xcconfig\",\n                            ],\n                            \"sources\": [\"${source}\"],\n                        ],\n                    ],\n                    \"schemeTemplates\": [\n                        \"base_scheme\": [\n                            \"build\": [\n                                \"parallelizeBuild\": false,\n                                \"buildImplicitDependencies\": false,\n                                \"runPostActionsOnFailure\": true,\n                                \"targets\": [\n                                    \"Target${name_1}\": \"all\",\n                                    \"Target2\": \"testing\",\n                                    \"Target${name_3}\": \"none\",\n                                    \"Target4\": [\"testing\": true],\n                                    \"Target5\": [\"testing\": false],\n                                    \"Target6\": [\"test\", \"analyze\"],\n                                ],\n                                \"preActions\": [\n                                    [\n                                        \"script\": \"${pre-action-name}\",\n                                        \"name\": \"Before Build ${scheme_name}\",\n                                        \"settingsTarget\": \"Target${name_1}\",\n                                    ],\n                                ],\n                            ],\n                            \"run\": [\n                                \"storeKitConfiguration\": \"Configuration.storekit\",\n                            ],\n                            \"test\": [\n                                \"config\": \"debug\",\n                                \"targets\": [\n                                    \"Target${name_1}\",\n                                    [\n                                        \"name\": \"Target2\",\n                                        \"parallelizable\": true,\n                                        \"randomExecutionOrder\": true,\n                                        \"skippedTests\": [\"Test/testExample()\"],\n                                    ],\n                                ],\n                                \"gatherCoverageData\": true,\n                                \"disableMainThreadChecker\": true,\n                                \"stopOnEveryMainThreadCheckerIssue\": false,\n                            ],\n                            \"management\": [\n                                \"shared\": false,\n                                \"orderHint\": 8\n                            ],\n                        ],\n                    ],\n                    \"schemes\": [\n                        \"temp2\": [\n                            \"templates\": [\"base_scheme\"],\n                            \"templateAttributes\": [\n                                \"pre-action-name\": \"modified-name\",\n                                \"name_1\": \"FirstTarget\",\n                                \"name_3\": \"ThirdTarget\",\n                            ],\n                        ],\n                    ],\n                ])\n\n                let scheme = project.schemes.first!\n                let expectedTargets: [Scheme.BuildTarget] = [\n                    Scheme.BuildTarget(target: \"TargetFirstTarget\", buildTypes: BuildType.all),\n                    Scheme.BuildTarget(target: \"Target2\", buildTypes: [.testing, .analyzing]),\n                    Scheme.BuildTarget(target: \"TargetThirdTarget\", buildTypes: []),\n                    Scheme.BuildTarget(target: \"Target4\", buildTypes: [.testing]),\n                    Scheme.BuildTarget(target: \"Target5\", buildTypes: []),\n                    Scheme.BuildTarget(target: \"Target6\", buildTypes: [.testing, .analyzing]),\n                ]\n                try expect(scheme.name) == \"temp2\"\n                try expect(Set(scheme.build.targets)) == Set(expectedTargets)\n                try expect(scheme.build.preActions.first?.script) == \"modified-name\"\n                try expect(scheme.build.preActions.first?.name) == \"Before Build temp2\"\n                try expect(scheme.build.preActions.first?.settingsTarget) == \"TargetFirstTarget\"\n\n                try expect(scheme.build.parallelizeBuild) == false\n                try expect(scheme.build.buildImplicitDependencies) == false\n                try expect(scheme.build.runPostActionsOnFailure) == true\n\n                try expect(scheme.run?.storeKitConfiguration) == \"Configuration.storekit\"\n\n                let expectedTest = Scheme.Test(\n                    config: \"debug\",\n                    gatherCoverageData: true,\n                    disableMainThreadChecker: true,\n                    targets: [\n                        \"TargetFirstTarget\",\n                        Scheme.Test.TestTarget(\n                            targetReference: \"Target2\",\n                            randomExecutionOrder: true,\n                            parallelizable: true,\n                            skippedTests: [\"Test/testExample()\"]\n                        ),\n                    ]\n                )\n                try expect(scheme.test) == expectedTest\n\n                let expectedManagement = Scheme.Management(shared: false, orderHint: 8, isShown: nil)\n                try expect(scheme.management) == expectedManagement\n            }\n\n            $0.it(\"parses copy files on install\") {\n                var targetSource = validTarget\n                targetSource[\"onlyCopyFilesOnInstall\"] = true\n                let target = try Target(name: \"Embed Frameworks\", jsonDictionary: targetSource)\n                try expect(target.onlyCopyFilesOnInstall) == true\n            }\n\n            $0.it(\"parses put resources before Sources Build Phase\") {\n                var targetSource = validTarget\n                targetSource[\"putResourcesBeforeSourcesBuildPhase\"] = true\n                let target = try Target(name: \"Embed Frameworks\", jsonDictionary: targetSource)\n                try expect(target.putResourcesBeforeSourcesBuildPhase) == true\n            }\n\n            $0.it(\"parses settings\") {\n                let project = try Project(path: fixturePath + \"settings_test.yml\")\n                let buildSettings: BuildSettings = [\"SETTING\": \"value\"]\n                let configSettings: [String: Settings] = [\"config1\": Settings(buildSettings: [\"SETTING1\": \"value\"])]\n                let groups = [\"preset1\"]\n\n                let preset1 = Settings(buildSettings: buildSettings, configSettings: [:], groups: [])\n                let preset2 = Settings(buildSettings: [:], configSettings: configSettings, groups: [])\n                let preset3 = Settings(buildSettings: buildSettings, configSettings: configSettings, groups: [])\n                let preset4 = Settings(buildSettings: buildSettings, configSettings: [:], groups: [])\n                let preset5 = Settings(buildSettings: buildSettings, configSettings: [:], groups: groups)\n                let preset6 = Settings(buildSettings: buildSettings, configSettings: configSettings, groups: groups)\n                let preset7 = Settings(buildSettings: buildSettings, configSettings: [\"config1\": Settings(buildSettings: buildSettings, groups: groups)])\n                let preset8 = Settings(buildSettings: [:], configSettings: [\"config1\": Settings(configSettings: configSettings)])\n\n                try expect(project.settingGroups.count) == 8\n                try expect(project.settingGroups[\"preset1\"]) == preset1\n                try expect(project.settingGroups[\"preset2\"]) == preset2\n                try expect(project.settingGroups[\"preset3\"]) == preset3\n                try expect(project.settingGroups[\"preset4\"]) == preset4\n                try expect(project.settingGroups[\"preset5\"]) == preset5\n                try expect(project.settingGroups[\"preset6\"]) == preset6\n                try expect(project.settingGroups[\"preset7\"]) == preset7\n                try expect(project.settingGroups[\"preset8\"]) == preset8\n            }\n\n            $0.it(\"parses run scripts\") {\n                var target = validTarget\n                let scripts: [[String: Any]] = [\n                    [\"path\": \"script.sh\"],\n                    [\"script\": \"shell script\\ndo thing\", \"name\": \"myscript\", \"inputFiles\": [\"file\", \"file2\"], \"outputFiles\": [\"file\", \"file2\"], \"shell\": \"bin/customshell\", \"runOnlyWhenInstalling\": true],\n                    [\"script\": \"shell script\\ndo thing\", \"name\": \"myscript\", \"inputFiles\": [\"file\", \"file2\"], \"outputFiles\": [\"file\", \"file2\"], \"shell\": \"bin/customshell\", \"showEnvVars\": false],\n                    [\"script\": \"shell script\\ndo thing\", \"name\": \"myscript\", \"inputFiles\": [\"file\", \"file2\"], \"outputFiles\": [\"file\", \"file2\"], \"shell\": \"bin/customshell\", \"basedOnDependencyAnalysis\": false],\n                    [\"script\": \"shell script\\nwith file lists\", \"name\": \"myscript\", \"inputFileLists\": [\"inputList.xcfilelist\"], \"outputFileLists\": [\"outputList.xcfilelist\"], \"shell\": \"bin/customshell\", \"runOnlyWhenInstalling\": true],\n                    [\"script\": \"shell script\\nwith file lists\", \"name\": \"myscript\", \"inputFileLists\": [\"inputList.xcfilelist\"], \"outputFileLists\": [\"outputList.xcfilelist\"], \"shell\": \"bin/customshell\", \"showEnvVars\": false],\n                    [\"script\": \"shell script\\nwith file lists\", \"name\": \"myscript\", \"inputFileLists\": [\"inputList.xcfilelist\"], \"outputFileLists\": [\"outputList.xcfilelist\"], \"shell\": \"bin/customshell\", \"basedOnDependencyAnalysis\": false],\n                ]\n                target[\"preBuildScripts\"] = scripts\n                target[\"postCompileScripts\"] = scripts\n                target[\"postBuildScripts\"] = scripts\n\n                let expectedScripts = [\n                    BuildScript(script: .path(\"script.sh\")),\n                    BuildScript(script: .script(\"shell script\\ndo thing\"), name: \"myscript\", inputFiles: [\"file\", \"file2\"], outputFiles: [\"file\", \"file2\"], shell: \"bin/customshell\", runOnlyWhenInstalling: true, showEnvVars: true, basedOnDependencyAnalysis: true),\n                    BuildScript(script: .script(\"shell script\\ndo thing\"), name: \"myscript\", inputFiles: [\"file\", \"file2\"], outputFiles: [\"file\", \"file2\"], shell: \"bin/customshell\", runOnlyWhenInstalling: false, showEnvVars: false, basedOnDependencyAnalysis: true),\n                    BuildScript(script: .script(\"shell script\\ndo thing\"), name: \"myscript\", inputFiles: [\"file\", \"file2\"], outputFiles: [\"file\", \"file2\"], shell: \"bin/customshell\", runOnlyWhenInstalling: false, showEnvVars: true, basedOnDependencyAnalysis: false),\n                    BuildScript(script: .script(\"shell script\\nwith file lists\"), name: \"myscript\", inputFileLists: [\"inputList.xcfilelist\"], outputFileLists: [\"outputList.xcfilelist\"], shell: \"bin/customshell\", runOnlyWhenInstalling: true, showEnvVars: true, basedOnDependencyAnalysis: true),\n                    BuildScript(script: .script(\"shell script\\nwith file lists\"), name: \"myscript\", inputFileLists: [\"inputList.xcfilelist\"], outputFileLists: [\"outputList.xcfilelist\"], shell: \"bin/customshell\", runOnlyWhenInstalling: false, showEnvVars: false, basedOnDependencyAnalysis: true),\n                    BuildScript(script: .script(\"shell script\\nwith file lists\"), name: \"myscript\", inputFileLists: [\"inputList.xcfilelist\"], outputFileLists: [\"outputList.xcfilelist\"], shell: \"bin/customshell\", runOnlyWhenInstalling: false, showEnvVars: true, basedOnDependencyAnalysis: false),\n                ]\n\n                let parsedTarget = try Target(name: \"test\", jsonDictionary: target)\n                try expect(parsedTarget.preBuildScripts) == expectedScripts\n                try expect(parsedTarget.postCompileScripts) == expectedScripts\n                try expect(parsedTarget.postBuildScripts) == expectedScripts\n            }\n\n            $0.it(\"parses build rules\") {\n                var target = validTarget\n                let buildRules: [[String: Any]] = [\n                    [\n                        \"name\": \"My Rule\",\n                        \"script\": \"my script\",\n                        \"filePattern\": \"*.swift\",\n                        \"outputFiles\": [\"file1\", \"file2\"],\n                        \"outputFilesCompilerFlags\": [\"-a\", \"-b\"],\n                    ],\n                    [\n                        \"compilerSpec\": \"apple.tool\",\n                        \"fileType\": \"sourcecode.swift\",\n                    ],\n                ]\n                target[\"buildRules\"] = buildRules\n\n                let expectedBuildRules = [\n                    BuildRule(fileType: .pattern(\"*.swift\"), action: .script(\"my script\"), name: \"My Rule\", outputFiles: [\"file1\", \"file2\"], outputFilesCompilerFlags: [\"-a\", \"-b\"]),\n                    BuildRule(fileType: .type(\"sourcecode.swift\"), action: .compilerSpec(\"apple.tool\")),\n                ]\n\n                let parsedTarget = try Target(name: \"test\", jsonDictionary: target)\n                try expect(parsedTarget.buildRules) == expectedBuildRules\n            }\n\n            $0.it(\"parses options\") {\n                let options = SpecOptions(\n                    carthageBuildPath: \"../Carthage/Build\",\n                    carthageExecutablePath: \"../bin/carthage\",\n                    createIntermediateGroups: true,\n                    bundleIdPrefix: \"com.test\",\n                    developmentLanguage: \"ja\",\n                    deploymentTarget: DeploymentTarget(\n                        iOS: \"11.1\",\n                        tvOS: \"10.0\",\n                        watchOS: \"3.0\",\n                        macOS: \"10.12.1\"\n                    ),\n                    fileTypes: [\"abc\": FileType(\n                        file: false,\n                        buildPhase: .sources,\n                        attributes: [\"a1\", \"a2\"],\n                        resourceTags: [\"r1\", \"r2\"],\n                        compilerFlags: [\"c1\", \"c2\"])],\n                    findCarthageFrameworks: true,\n                    preGenCommand: \"swiftgen\",\n                    postGenCommand: \"pod install\",\n                    schemePathPrefix: \"../\"\n                )\n                let expected = Project(name: \"test\", options: options)\n                let dictionary: [String: Any] = [\"options\": [\n                    \"carthageBuildPath\": \"../Carthage/Build\",\n                    \"carthageExecutablePath\": \"../bin/carthage\",\n                    \"bundleIdPrefix\": \"com.test\",\n                    \"createIntermediateGroups\": true,\n                    \"developmentLanguage\": \"ja\",\n                    \"deploymentTarget\": [\"iOS\": 11.1, \"tvOS\": 10.0, \"watchOS\": \"3\", \"macOS\": \"10.12.1\"],\n                    \"findCarthageFrameworks\": true,\n                    \"preGenCommand\": \"swiftgen\",\n                    \"postGenCommand\": \"pod install\",\n                    \"fileTypes\": [\"abc\": [\n                        \"file\": false,\n                        \"buildPhase\": \"sources\",\n                        \"attributes\": [\"a1\", \"a2\"],\n                        \"resourceTags\": [\"r1\", \"r2\"],\n                        \"compilerFlags\": [\"c1\", \"c2\"],\n                        ]],\n                    \"schemePathPrefix\": \"../\",\n                ]]\n                let parsedSpec = try getProjectSpec(dictionary)\n                try expect(parsedSpec) == expected\n            }\n\n            $0.it(\"parses packages\") {\n                let project = Project(name: \"spm\", packages: [\n                    \"package1\": .remote(url: \"package.git\", versionRequirement: .exact(\"1.2.2\")),\n                    \"package2\": .remote(url: \"package.git\", versionRequirement: .upToNextMajorVersion(\"1.2.2\")),\n                    \"package3\": .remote(url: \"package.git\", versionRequirement: .upToNextMinorVersion(\"1.2.2\")),\n                    \"package4\": .remote(url: \"package.git\", versionRequirement: .branch(\"master\")),\n                    \"package5\": .remote(url: \"package.git\", versionRequirement: .revision(\"x\")),\n                    \"package6\": .remote(url: \"package.git\", versionRequirement: .range(from: \"1.2.0\", to: \"1.2.5\")),\n                    \"package7\": .remote(url: \"package.git\", versionRequirement: .exact(\"1.2.2\")),\n                    \"package8\": .remote(url: \"package.git\", versionRequirement: .upToNextMajorVersion(\"4.0.0-beta.5\")),\n                    \"package9\": .local(path: \"package/package\", group: nil, excludeFromProject: false),\n                    \"package10\": .remote(url: \"https://github.com/yonaskolb/XcodeGen\", versionRequirement: .exact(\"1.2.2\")),\n                    \"XcodeGen\": .local(path: \"../XcodeGen\", group: nil, excludeFromProject: false),\n                    \"package11\": .local(path: \"../XcodeGen\", group: \"Packages/Feature\", excludeFromProject: false),\n                ], options: .init(localPackagesGroup: \"MyPackages\"))\n\n                let dictionary: [String: Any] = [\n                    \"name\": \"spm\",\n                    \"options\": [\n                        \"localPackagesGroup\": \"MyPackages\",\n                    ],\n                    \"packages\": [\n                        \"package1\": [\"url\": \"package.git\", \"exactVersion\": \"1.2.2\"],\n                        \"package2\": [\"url\": \"package.git\", \"majorVersion\": \"1.2.2\"],\n                        \"package3\": [\"url\": \"package.git\", \"minorVersion\": \"1.2.2\"],\n                        \"package4\": [\"url\": \"package.git\", \"branch\": \"master\"],\n                        \"package5\": [\"url\": \"package.git\", \"revision\": \"x\"],\n                        \"package6\": [\"url\": \"package.git\", \"minVersion\": \"1.2.0\", \"maxVersion\": \"1.2.5\"],\n                        \"package7\": [\"url\": \"package.git\", \"version\": \"1.2.2\"],\n                        \"package8\": [\"url\": \"package.git\", \"majorVersion\": \"4.0.0-beta.5\"],\n                        \"package9\": [\"path\": \"package/package\"],\n                        \"package10\": [\"github\": \"yonaskolb/XcodeGen\", \"exactVersion\": \"1.2.2\"],\n                        \"package11\": [\"path\": \"../XcodeGen\", \"group\": \"Packages/Feature\"],\n                    ],\n                    \"localPackages\": [\"../XcodeGen\"],\n                ]\n                let parsedSpec = try getProjectSpec(dictionary)\n                try expect(parsedSpec) == project\n            }\n\n            $0.it(\"parses old local package format\") {\n                let project = Project(name: \"spm\", packages: [\n                    \"XcodeGen\": .local(path: \"../XcodeGen\", group: nil, excludeFromProject: false),\n                    \"Yams\": .local(path: \"Yams\", group: nil, excludeFromProject: false),\n                ], options: .init(localPackagesGroup: \"MyPackages\"))\n\n                let dictionary: [String: Any] = [\n                    \"name\": \"spm\",\n                    \"options\": [\n                        \"localPackagesGroup\": \"MyPackages\",\n                    ],\n                    \"localPackages\": [\"../XcodeGen\", \"Yams\"],\n                ]\n                let parsedSpec = try getProjectSpec(dictionary)\n                try expect(parsedSpec) == project\n            }\n\n            $0.it(\"parses TargetScheme storeKitConfiguration as string\") {\n                var targetDictionary = validTarget\n                targetDictionary[\"scheme\"] = [\n                    \"storeKitConfiguration\": \"Configuration.storekit\",\n                ]\n\n                let target = try Target(name: \"test\", jsonDictionary: targetDictionary)\n\n                let scheme = TargetScheme(\n                    storeKitConfiguration: \"Configuration.storekit\"\n                )\n\n                try expect(target.scheme) == scheme\n            }\n\n            $0.it(\"parses Scheme.Run storeKitConfiguration as string\") {\n                let schemeDictionary: [String: Any] = [\n                    \"build\": [\n                        \"targets\": [:],\n                    ],\n                    \"run\": [\n                        \"config\": \"debug\",\n                        \"storeKitConfiguration\": \"Configuration.storekit\",\n                    ],\n                ]\n                let scheme = try Scheme(name: \"Scheme\", jsonDictionary: schemeDictionary)\n\n                let runAction = Scheme.Run(\n                    config: \"debug\",\n                    storeKitConfiguration: \"Configuration.storekit\"\n                )\n\n                try expect(scheme.run) == runAction\n            }\n\n            $0.it(\"parses buildToolPlugins\") {\n                var target = validTarget\n                let buildToolPlugins: [[String: Any]] = [\n                    [\n                        \"plugin\": \"FirstPlugin\",\n                        \"package\": \"FirstPackage\"\n                    ],\n                    [\n                        \"plugin\": \"SecondPlugin\",\n                        \"package\": \"SecondPackage\"\n                    ]\n                ]\n                target[\"buildToolPlugins\"] = buildToolPlugins\n\n                let expectedBuildToolPlugins = [\n                    BuildToolPlugin(plugin: \"FirstPlugin\", package: \"FirstPackage\"),\n                    BuildToolPlugin(plugin: \"SecondPlugin\", package: \"SecondPackage\")\n                ]\n\n                let parsedTarget = try Target(name: \"test\", jsonDictionary: target)\n                try expect(parsedTarget.buildToolPlugins) == expectedBuildToolPlugins\n            }\n        }\n    }\n\n    func testPackagesVersion() {\n        describe {\n            let invalidPackages = [\n                [\"url\": \"package.git\", \"majorVersion\": \"master\"],\n                [\"url\": \"package.git\", \"from\": \"develop\"],\n                [\"url\": \"package.git\", \"minVersion\": \"feature/swift5.2\", \"maxVersion\": \"9.1.0\"],\n                [\"url\": \"package.git\", \"minorVersion\": \"x.1.2\"],\n                [\"url\": \"package.git\", \"exactVersion\": \"1.2.3.1\"],\n                [\"url\": \"package.git\", \"version\": \"foo-bar\"],\n            ]\n\n            $0.it(\"is an invalid package version\") {\n                for dictionary in invalidPackages {\n                    try expect(expression: { _ = try SwiftPackage(jsonDictionary: dictionary) }).toThrow()\n                }\n            }\n        }\n    }\n\n    func testDecoding() throws {\n        describe {\n            $0.it(\"decodes dots in dictionary keys\") {\n                let dictionary: [String: Any] = [\n                    \"test\": [\n                        \"one.two\": true,\n                    ],\n                ]\n\n                let booleans: [String: Bool] = try dictionary.json(atKeyPath: \"test\")\n                try expect(booleans) == [\"one.two\": true]\n            }\n        }\n    }\n}\n\n@discardableResult\nprivate func getProjectSpec(_ project: [String: Any], file: String = #file, line: Int = #line) throws -> Project {\n    var projectDictionary: [String: Any] = [\"name\": \"test\"]\n    for (key, value) in project {\n        projectDictionary[key] = value\n    }\n    do {\n        return try Project(jsonDictionary: projectDictionary)\n    } catch {\n        throw failure(\"\\(error)\", file: file, line: line)\n    }\n}\n\nprivate func loadSpec(path: Path, variables: [String: String] = [:], file: String = #file, line: Int = #line) throws -> Project {\n    do {\n        let specLoader = SpecLoader(version: \"1.1.0\")\n        return try specLoader.loadProject(path: path, variables: variables)\n    } catch {\n        throw failure(\"\\(error)\", file: file, line: line)\n    }\n}\n\nprivate func expectSpecError(_ project: [String: Any], _ expectedError: SpecParsingError, file: String = #file, line: Int = #line) throws {\n    try expectError(expectedError, file: file, line: line) {\n        try getProjectSpec(project)\n    }\n}\n\nprivate func expectTargetError(_ target: [String: Any], _ expectedError: SpecParsingError, file: String = #file, line: Int = #line) throws {\n    try expectError(expectedError, file: file, line: line) {\n        _ = try Target(name: \"test\", jsonDictionary: target)\n    }\n}\n\nprivate func expectBreakpointError(_ breakpoint: [String: Any], _ expectedError: SpecParsingError, file: String = #file, line: Int = #line) throws {\n    try expectError(expectedError, file: file, line: line) {\n        _ = try Breakpoint(jsonDictionary: breakpoint)\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenCoreTests/ArrayExtensionsTests.swift",
    "content": "import XCTest\n@testable import XcodeGenCore\n\nclass ArrayExtensionsTests: XCTestCase {\n    \n    func testSearchingForFirstIndex() {\n        let array = SortedArray([1, 2, 3, 4 ,5])\n        XCTAssertEqual(array.firstIndex(where: { $0 > 2 }), 2)\n    }\n    \n    func testIndexCannotBeFound() {\n        let array = SortedArray([1, 2, 3, 4, 5])\n        XCTAssertEqual(array.firstIndex(where: { $0 > 10 }), nil)\n    }\n\n    func testEmptyArray() {\n        let array = SortedArray([Int]())\n        XCTAssertEqual(array.firstIndex(where: { $0 > 0 }), nil)\n    }\n    \n    func testSearchingReturnsFirstIndexWhenMultipleElementsHaveSameValue() {\n        let array = SortedArray([1, 2, 3, 3 ,3])\n        XCTAssertEqual(array.firstIndex(where: { $0 == 3 }), 2)\n    }\n}\n\n\nclass SortedArrayTests: XCTestCase {\n    \n    func testSortingOnInitialization() {\n        let array = [1, 5, 4, 2]\n        let sortedArray = SortedArray(array)\n        XCTAssertEqual([1, 2, 4, 5], sortedArray.value)\n    }\n    \n    func testEmpty() {\n        XCTAssertEqual([Int](), SortedArray([Int]()).value)\n    }\n\n}\n"
  },
  {
    "path": "Tests/XcodeGenCoreTests/AtomicTests.swift",
    "content": "//\n//  AtomicTests.swift\n//  \n//\n//  Created by Vladislav Lisianskii on 27.03.2022.\n//\n\nimport XCTest\n@testable import XcodeGenCore\n\nfinal class AtomicTests: XCTestCase {\n\n    @Atomic private var atomicDictionary = [String: Int]()\n\n    func testSimultaneousWriteOrder() {\n        let group = DispatchGroup()\n\n        for index in (0..<100) {\n            group.enter()\n            DispatchQueue.global().async {\n                self.$atomicDictionary.with { atomicDictionary in\n                    atomicDictionary[\"\\(index)\"] = index\n                }\n                group.leave()\n            }\n        }\n\n        group.notify(queue: .main, execute: {\n            var expectedValue = [String: Int]()\n            for index in (0..<100) {\n                expectedValue[\"\\(index)\"] = index\n            }\n            XCTAssertEqual(\n                self.atomicDictionary,\n                expectedValue\n            )\n        })\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenCoreTests/GlobTests.swift",
    "content": "//\n//  Created by Eric Firestone on 3/22/16.\n//  Copyright © 2016 Square, Inc. All rights reserved.\n//  Released under the Apache v2 License.\n//\n//  Adapted from https://gist.github.com/blakemerryman/76312e1cbf8aec248167\n//  Adapted from https://gist.github.com/efirestone/ce01ae109e08772647eb061b3bb387c3\n\nimport XCTest\n@testable import XcodeGenCore\n\nclass GlobTests: XCTestCase {\n\n    let tmpFiles = [\"foo\", \"bar\", \"baz\", \"dir1/file1.ext\", \"dir1/dir2/dir3/file2.ext\", \"dir1/file1.extfoo\"]\n    var tmpDir = \"\"\n\n    override func setUp() {\n        super.setUp()\n\n        tmpDir = newTmpDir()\n\n        let flags = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH\n        mkdir(\"\\(tmpDir)/dir1/\", flags)\n        mkdir(\"\\(tmpDir)/dir1/dir2\", flags)\n        mkdir(\"\\(tmpDir)/dir1/dir2/dir3\", flags)\n\n        for file in tmpFiles {\n            close(open(\"\\(tmpDir)/\\(file)\", O_CREAT))\n        }\n    }\n\n    override func tearDown() {\n        for file in tmpFiles {\n            unlink(\"\\(tmpDir)/\\(file)\")\n        }\n        rmdir(\"\\(tmpDir)/dir1/dir2/dir3\")\n        rmdir(\"\\(tmpDir)/dir1/dir2\")\n        rmdir(\"\\(tmpDir)/dir1\")\n        rmdir(tmpDir)\n\n        super.tearDown()\n    }\n\n    private func newTmpDir() -> String {\n        var tmpDirTmpl = \"/tmp/glob-test.XXXXXX\".cString(using: .utf8)!\n        return String(validatingUTF8: mkdtemp(&tmpDirTmpl))!\n    }\n\n    func testBraces() {\n        let pattern = \"\\(tmpDir)/ba{r,y,z}\"\n        let glob = Glob(pattern: pattern)\n        var contents = [String]()\n        for file in glob {\n            contents.append(file)\n        }\n        XCTAssertEqual(contents, [\"\\(tmpDir)/bar\", \"\\(tmpDir)/baz\"], \"matching with braces failed\")\n    }\n\n    func testNothingMatches() {\n        let pattern = \"\\(tmpDir)/nothing\"\n        let glob = Glob(pattern: pattern)\n        var contents = [String]()\n        for file in glob {\n            contents.append(file)\n        }\n        XCTAssertEqual(contents, [], \"expected empty list of files\")\n    }\n\n    func testDirectAccess() {\n        let pattern = \"\\(tmpDir)/ba{r,y,z}\"\n        let glob = Glob(pattern: pattern)\n        XCTAssertEqual(glob.paths, [\"\\(tmpDir)/bar\", \"\\(tmpDir)/baz\"], \"matching with braces failed\")\n    }\n\n    func testIterateTwice() {\n        let pattern = \"\\(tmpDir)/ba{r,y,z}\"\n        let glob = Glob(pattern: pattern)\n        var contents1 = [String]()\n        var contents2 = [String]()\n        for file in glob {\n            contents1.append(file)\n        }\n        let filesAfterOnce = glob.paths\n        for file in glob {\n            contents2.append(file)\n        }\n        XCTAssertEqual(contents1, contents2, \"results for calling for-in twice are the same\")\n        XCTAssertEqual(glob.paths, filesAfterOnce, \"calling for-in twice doesn't only memoizes once\")\n    }\n\n    func testIndexing() {\n        let pattern = \"\\(tmpDir)/ba{r,y,z}\"\n        let glob = Glob(pattern: pattern)\n        XCTAssertEqual(glob[0], \"\\(tmpDir)/bar\", \"indexing\")\n    }\n\n    // MARK: - Globstar - Bash v3\n\n    func testGlobstarBashV3NoSlash() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**\"\n        let pattern = \"\\(tmpDir)/**\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV3)\n        XCTAssertEqual(glob.paths, [\"\\(tmpDir)/bar\", \"\\(tmpDir)/baz\", \"\\(tmpDir)/dir1/\", \"\\(tmpDir)/foo\"])\n    }\n\n    func testGlobstarBashV3WithSlash() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**/\"\n        let pattern = \"\\(tmpDir)/**/\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV3)\n        XCTAssertEqual(glob.paths, [\"\\(tmpDir)/dir1/\"])\n    }\n\n    func testGlobstarBashV3WithSlashAndWildcard() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**/*\"\n        let pattern = \"\\(tmpDir)/**/*\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV3)\n        XCTAssertEqual(glob.paths, [\"\\(tmpDir)/dir1/dir2/\", \"\\(tmpDir)/dir1/file1.ext\", \"\\(tmpDir)/dir1/file1.extfoo\"])\n    }\n\n    func testDoubleGlobstarBashV3() {\n        let pattern = \"\\(tmpDir)/**/dir2/**/*\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV3)\n        XCTAssertEqual(glob.paths, [\"\\(tmpDir)/dir1/dir2/dir3/file2.ext\"])\n    }\n\n    // MARK: - Globstar - Bash v4\n\n    func testGlobstarBashV4NoSlash() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**\"\n        let pattern = \"\\(tmpDir)/**\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV4)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/\",\n            \"\\(tmpDir)/bar\",\n            \"\\(tmpDir)/baz\",\n            \"\\(tmpDir)/dir1/\",\n            \"\\(tmpDir)/dir1/dir2/\",\n            \"\\(tmpDir)/dir1/dir2/dir3/\",\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n            \"\\(tmpDir)/dir1/file1.ext\",\n            \"\\(tmpDir)/dir1/file1.extfoo\",\n            \"\\(tmpDir)/foo\",\n        ])\n    }\n\n    func testGlobstarBashV4WithSlash() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**/\"\n        let pattern = \"\\(tmpDir)/**/\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV4)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/\",\n            \"\\(tmpDir)/dir1/\",\n            \"\\(tmpDir)/dir1/dir2/\",\n            \"\\(tmpDir)/dir1/dir2/dir3/\",\n        ])\n    }\n\n    func testGlobstarBashV4WithSlashAndWildcard() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**/*\"\n        let pattern = \"\\(tmpDir)/**/*\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV4)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/bar\",\n            \"\\(tmpDir)/baz\",\n            \"\\(tmpDir)/dir1/\",\n            \"\\(tmpDir)/dir1/dir2/\",\n            \"\\(tmpDir)/dir1/dir2/dir3/\",\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n            \"\\(tmpDir)/dir1/file1.ext\",\n            \"\\(tmpDir)/dir1/file1.extfoo\",\n            \"\\(tmpDir)/foo\",\n        ])\n    }\n\n    func testDoubleGlobstarBashV4() {\n        let pattern = \"\\(tmpDir)/**/dir2/**/*\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV4)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/dir1/dir2/dir3/\",\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n        ])\n    }\n\n    func testDoubleGlobstarBashV4WithFileExtension() {\n        // Should be the equivalent of \"ls -d -1 /(tmpdir)/**/*.ext\"\n        // Should not find \"\\(tmpDir)/dir1/file1.extfoo\" which the file extension prefix is .ext\n        let pattern = \"\\(tmpDir)/**/*.ext\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorBashV4)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n            \"\\(tmpDir)/dir1/file1.ext\",\n        ])\n    }\n\n    // MARK: - Globstar - Gradle\n\n    func testGlobstarGradleNoSlash() {\n        // Should be the equivalent of\n        // FileTree tree = project.fileTree((Object)'/tmp') {\n        //   include 'glob-test.7m0Lp/**'\n        // }\n        //\n        // Note that the sort order currently matches Bash and not Gradle\n        let pattern = \"\\(tmpDir)/**\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorGradle)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/bar\",\n            \"\\(tmpDir)/baz\",\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n            \"\\(tmpDir)/dir1/file1.ext\",\n            \"\\(tmpDir)/dir1/file1.extfoo\",\n            \"\\(tmpDir)/foo\",\n        ])\n    }\n\n    func testGlobstarGradleWithSlash() {\n        // Should be the equivalent of\n        // FileTree tree = project.fileTree((Object)'/tmp') {\n        //   include 'glob-test.7m0Lp/**/'\n        // }\n        //\n        // Note that the sort order currently matches Bash and not Gradle\n        let pattern = \"\\(tmpDir)/**/\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorGradle)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/bar\",\n            \"\\(tmpDir)/baz\",\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n            \"\\(tmpDir)/dir1/file1.ext\",\n            \"\\(tmpDir)/dir1/file1.extfoo\",\n            \"\\(tmpDir)/foo\",\n        ])\n    }\n\n    func testGlobstarGradleWithSlashAndWildcard() {\n        // Should be the equivalent of\n        // FileTree tree = project.fileTree((Object)'/tmp') {\n        //   include 'glob-test.7m0Lp/**/*'\n        // }\n        //\n        // Note that the sort order currently matches Bash and not Gradle\n        let pattern = \"\\(tmpDir)/**/*\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorGradle)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/bar\",\n            \"\\(tmpDir)/baz\",\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n            \"\\(tmpDir)/dir1/file1.ext\",\n            \"\\(tmpDir)/dir1/file1.extfoo\",\n            \"\\(tmpDir)/foo\",\n        ])\n    }\n\n    func testDoubleGlobstarGradle() {\n        // Should be the equivalent of\n        // FileTree tree = project.fileTree((Object)'/tmp') {\n        //   include 'glob-test.7m0Lp/**/dir2/**/*'\n        // }\n        //\n        // Note that the sort order currently matches Bash and not Gradle\n        let pattern = \"\\(tmpDir)/**/dir2/**/*\"\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorGradle)\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/dir1/dir2/dir3/file2.ext\",\n        ])\n    }\n\n    func testBlacklistedDirectories() {\n        let pattern = \"\\(tmpDir)/**/*\"\n\n        let glob = Glob(pattern: pattern, behavior: GlobBehaviorGradle, blacklistedDirectories: [\"dir1\"])\n\n        XCTAssertEqual(glob.paths, [\n            \"\\(tmpDir)/bar\",\n            \"\\(tmpDir)/baz\",\n            \"\\(tmpDir)/foo\",\n        ])\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenCoreTests/PathExtensionsTests.swift",
    "content": "import Spectre\nimport PathKit\nimport XCTest\nimport XcodeGenCore\nimport TestSupport\n\nclass PathExtensionsTests: XCTestCase {\n\n    func testPathRelativeToPath() {\n        func relativePath(to path: String, from base: String) throws -> String {\n            try Path(path).relativePath(from: Path(base)).string\n        }\n\n        // These are based on ruby's tests for Pathname#relative_path_from:\n        // https://github.com/ruby/ruby/blob/7c2bbd1c7d40a30583844d649045824161772e36/test/pathname/test_pathname.rb#L297\n        describe {\n            $0.it(\"resolves single-level paths\") {\n                try expect(relativePath(to: \"a\", from: \"b\")) == \"../a\"\n                try expect(relativePath(to: \"a\", from: \"b/\")) == \"../a\"\n                try expect(relativePath(to: \"a/\", from: \"b\")) == \"../a\"\n                try expect(relativePath(to: \"a/\", from: \"b/\")) == \"../a\"\n                try expect(relativePath(to: \"/a\", from: \"/b\")) == \"../a\"\n                try expect(relativePath(to: \"/a\", from: \"/b/\")) == \"../a\"\n                try expect(relativePath(to: \"/a/\", from: \"/b\")) == \"../a\"\n                try expect(relativePath(to: \"/a/\", from: \"/b/\")) == \"../a\"\n            }\n\n            $0.it(\"resolves paths with a common parent\") {\n                try expect(relativePath(to: \"a/b\", from: \"a/c\")) == \"../b\"\n                try expect(relativePath(to: \"../a\", from: \"../b\")) == \"../a\"\n            }\n\n            $0.it(\"resolves dot paths\") {\n                try expect(relativePath(to: \"a\", from: \".\")) == \"a\"\n                try expect(relativePath(to: \".\", from: \"a\")) == \"..\"\n                try expect(relativePath(to: \".\", from: \".\")) == \".\"\n                try expect(relativePath(to: \"..\", from: \"..\")) == \".\"\n                try expect(relativePath(to: \"..\", from: \".\")) == \"..\"\n            }\n\n            $0.it(\"resolves multi-level paths\") {\n                try expect(relativePath(to: \"/a/b/c/d\", from: \"/a/b\")) == \"c/d\"\n                try expect(relativePath(to: \"/a/b\", from: \"/a/b/c/d\")) == \"../..\"\n                try expect(relativePath(to: \"/e\", from: \"/a/b/c/d\")) == \"../../../../e\"\n                try expect(relativePath(to: \"a/b/c\", from: \"a/d\")) == \"../b/c\"\n                try expect(relativePath(to: \"/../a\", from: \"/b\")) == \"../a\"\n                try expect(relativePath(to: \"../a\", from: \"b\")) == \"../../a\"\n                try expect(relativePath(to: \"/a/../../b\", from: \"/b\")) == \".\"\n                try expect(relativePath(to: \"a/..\", from: \"a\")) == \"..\"\n                try expect(relativePath(to: \"a/../b\", from: \"b\")) == \".\"\n                try expect(relativePath(to: \"/a/c\", from: \"/a/b/c\")) == \"../../c\"\n            }\n\n            $0.it(\"backtracks on a non-normalized base path\") {\n                try expect(relativePath(to: \"a\", from: \"b/..\")) == \"a\"\n                try expect(relativePath(to: \"b/c\", from: \"b/..\")) == \"b/c\"\n            }\n\n            $0.it(\"throws when given unresolvable paths\") {\n                try expect(relativePath(to: \"/\", from: \".\")).toThrow()\n                try expect(relativePath(to: \".\", from: \"/\")).toThrow()\n                try expect(relativePath(to: \"a\", from: \"..\")).toThrow()\n                try expect(relativePath(to: \".\", from: \"..\")).toThrow()\n                try expect(relativePath(to: \"a\", from: \"b/../..\")).toThrow()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenKitTests/BreakpointGeneratorTests.swift",
    "content": "import ProjectSpec\nimport Spectre\nimport TestSupport\nimport XCTest\n\nclass BreakpointGeneratorTests: XCTestCase {\n\n    func testBreakpoints() {\n        describe {\n\n            $0.it(\"generates breakpoint\") {\n                let breakpoint = Breakpoint(type: .exception(.init()))\n                let project = Project(basePath: \"\", name: \"test\", targets: [], breakpoints: [breakpoint])\n                let xcodeProject = try project.generateXcodeProject()\n                let xcbreakpoint = try unwrap(xcodeProject.sharedData?.breakpoints?.breakpoints.first)\n                try expect(xcbreakpoint.breakpointExtensionID.rawValue) == \"Xcode.Breakpoint.ExceptionBreakpoint\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenKitTests/CarthageDependencyResolverTests.swift",
    "content": "import ProjectSpec\nimport Spectre\nimport XCTest\nimport PathKit\n@testable import XcodeGenKit\nimport TestSupport\n\nclass CarthageDependencyResolverTests: XCTestCase {\n\n    override func setUp() {}\n\n    func testBaseBuildPath() {\n        describe {\n            $0.it(\"provides the default base build path\") {\n                let resolver = CarthageDependencyResolver(project: makeTestProject())\n\n                try expect(resolver.buildPath) == \"Carthage/Build\"\n            }\n\n            $0.it(\"provides the base build path specified by the project specs\") {\n                let customPath = \"MyCustomBuildPath/Test\"\n                let options = SpecOptions(carthageBuildPath: customPath)\n                let resolver = CarthageDependencyResolver(project: makeTestProject(options: options))\n\n                try expect(resolver.buildPath) == customPath\n            }\n        }\n    }\n\n    func testExecutablePath() {\n        describe {\n            $0.it(\"provides the default executable path for carthage\") {\n                let resolver = CarthageDependencyResolver(project: makeTestProject())\n\n                try expect(resolver.executable) == \"carthage\"\n            }\n\n            $0.it(\"provides the executable path for carthage as specified by the project specs\") {\n                let customPath = \"MyCustomBuildPath/Test/carthage\"\n                let options = SpecOptions(carthageExecutablePath: customPath)\n                let resolver = CarthageDependencyResolver(project: makeTestProject(options: options))\n\n                try expect(resolver.executable) == customPath\n            }\n        }\n    }\n\n    func testBuildPathForPlatform() {\n        describe {\n            $0.it(\"generates the build path for a given platform\") {\n                let resolver = CarthageDependencyResolver(project: makeTestProject())\n                let allPlatforms = Platform.allCases\n                let expectedByPlatform: [Platform: String] = allPlatforms.reduce(into: [:]) { result, next in\n                    result[next] = \"\\(resolver.buildPath)/\\(next.carthageName)\"\n                }\n\n                try allPlatforms.forEach { platform in\n                    try expect(expectedByPlatform[platform]) == resolver.buildPath(for: platform, linkType: .dynamic)\n                }\n            }\n        }\n    }\n\n    func testRelatedDependenciesForPlatform() {\n\n        let carthageBuildPath = fixturePath + \"CarthageProject/Carthage/Build\"\n\n        describe {\n            $0.it(\"fetches related dependencies for a given platform, sorted alphabetically\") {\n\n                let options = SpecOptions(carthageBuildPath: carthageBuildPath.string)\n                let resolver = CarthageDependencyResolver(project: makeTestProject(options: options))\n                let dependency = Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: \"CarthageTestFixture\")\n                let expectedDependencies: [Platform: [String]] = [\n                    .macOS: [\"DependencyFixtureB\", \"DependencyFixtureA\", \"CarthageTestFixture\"],\n                    .watchOS: [\"DependencyFixtureA\", \"DependencyFixtureB\", \"CarthageTestFixture\"],\n                    .tvOS: [\"CarthageTestFixture\", \"DependencyFixtureA\", \"DependencyFixtureB\"],\n                    .iOS: [\"CarthageTestFixture\", \"DependencyFixtureA\", \"DependencyFixtureB\"],\n                ]\n\n                try Platform.allCases.forEach { platform in\n                    let expected = expectedDependencies[platform] ?? []\n                    let related = resolver.relatedDependencies(for: dependency, in: platform)\n                    try expect(related.map { $0.reference }) == expected.sorted(by: { $0 < $1 })\n                }\n            }\n\n            $0.it(\"returns the main dependency when no related dependencies are found\") {\n                let resolver = CarthageDependencyResolver(project: makeTestProject())\n                let dependency = Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: \"RandomDependency\")\n\n                let related = resolver.relatedDependencies(for: dependency, in: .iOS)\n\n                try expect(related.map { $0.reference }) == [\"RandomDependency\"]\n            }\n\n            $0.it(\"de-duplicates dependencies\") {\n                let resolver = CarthageDependencyResolver(project: makeTestProject())\n                let dependency = Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: \"ReactiveSwift\")\n\n                let related = resolver.relatedDependencies(for: dependency, in: .iOS)\n\n                try expect(related.map { $0.reference }) == [\"ReactiveSwift\"]\n            }\n        }\n    }\n\n    func testDependenciesForTopLevelTarget() {\n\n        let dependencyFixtureName = \"CarthageTestFixture\"\n        let carthageBuildPath = fixturePath + \"TestProject/Carthage/Build\"\n\n        describe {\n\n            $0.it(\"overrides the findFrameworks dependency global flag when specified\") {\n                let options = SpecOptions(carthageBuildPath: carthageBuildPath.string, findCarthageFrameworks: true)\n                let dependency = Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: dependencyFixtureName)\n\n                let resolver = CarthageDependencyResolver(project: makeTestProject(options: options))\n                let target = Target(name: \"1\", type: .application, platform: .iOS, dependencies: [dependency])\n                let dependencies = resolver.dependencies(for: target)\n\n                let expectedDependencies = [dependency].map {\n                    ResolvedCarthageDependency(dependency: $0, isFromTopLevelTarget: true)\n                }\n\n                try expect(dependencies) == expectedDependencies\n            }\n\n            $0.it(\"fetches all carthage dependencies for a given target, sorted alphabetically\") {\n                let unsortedDependencyReferences = [\"RxSwift\", \"RxCocoa\", \"RxBlocking\", \"RxTest\", \"RxAtomic\"]\n                let dependencies = unsortedDependencyReferences.map {\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: $0)\n                }\n                let nonCarthageDependencies = unsortedDependencyReferences.map { Dependency(type: .target, reference: $0) }\n                let target = Target(name: \"1\", type: .application, platform: .iOS, dependencies: dependencies + nonCarthageDependencies)\n                let resolver = CarthageDependencyResolver(project: makeTestProject(with: [target]))\n\n                let related = resolver.dependencies(for: target)\n\n                let expectedDependencies = dependencies\n                    .sorted(by: { $0.reference < $1.reference })\n                    .map {\n                        ResolvedCarthageDependency(dependency: $0, isFromTopLevelTarget: true)\n                    }\n\n                try expect(related) == expectedDependencies\n            }\n\n            $0.it(\"skips dependencies which are not embedded\") {\n                let resolver = CarthageDependencyResolver(project: makeTestProject())\n\n                let target = Target(name: \"1\", type: .application, platform: .iOS, dependencies: [\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: dependencyFixtureName, embed: false, link: false)\n                ])\n                try expect(resolver.dependencies(for: target)) == []\n            }\n\n            $0.it(\"skips dependencies nested in targets which are not embedded\") {\n                let nestedTarget = Target(name: \"1\", type: .framework, platform: .iOS, dependencies: [\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: dependencyFixtureName)\n                ])\n\n                let resolver = CarthageDependencyResolver(project: makeTestProject(with: [nestedTarget]))\n\n                let target = Target(name: \"2\", type: .application, platform: .iOS, dependencies: [\n                    Dependency(type: .target, reference: \"1\", embed: false, link: false)\n                ])\n                try expect(resolver.dependencies(for: target)) == []\n\n            }\n        }\n    }\n\n}\n\nprivate func makeTestProject(with targets: [Target] = [], options: SpecOptions = SpecOptions()) -> Project {\n    Project(name: \"Test Project\", targets: targets, options: options)\n\n}\n"
  },
  {
    "path": "Tests/XcodeGenKitTests/PBXProjGeneratorTests.swift",
    "content": "import Yams\nimport XCTest\nimport Spectre\nimport PathKit\nimport XcodeProj\nimport ProjectSpec\nimport XcodeGenKit\nimport TestSupport\n\nextension Project {\n\n    func generateXcodeProject(validate: Bool = true, file: String = #file, line: Int = #line) throws -> XcodeProj {\n        try doThrowing(file: file, line: line) {\n            if validate {\n                try self.validate()\n            }\n            let generator = ProjectGenerator(project: self)\n            return try generator.generateXcodeProject(userName: \"someUser\")\n        }\n    }\n\n    func generatePbxProj(specValidate: Bool = true, projectValidate: Bool = true, file: String = #file, line: Int = #line) throws -> PBXProj {\n        try doThrowing(file: file, line: line) {\n            let xcodeProject = try generateXcodeProject(validate: specValidate).pbxproj\n            if projectValidate {\n                try xcodeProject.validate()\n            }\n            return xcodeProject\n        }\n    }\n\n}\n\nextension PBXProj {\n\n    // validates that a PBXProj is correct\n    // TODO: Use xclint?\n    func validate() throws {\n        let mainGroup = try getMainGroup()\n\n        func validateGroup(_ group: PBXGroup) throws {\n\n            // check for duplicte children\n            let dictionary = Dictionary(grouping: group.children) { $0.hashValue }\n            let mostChildren = dictionary.sorted { $0.value.count > $1.value.count }\n            if let first = mostChildren.first, first.value.count > 1 {\n                throw failure(\"Group \\\"\\(group.nameOrPath)\\\" has duplicated children:\\n - \\(group.children.map { $0.nameOrPath }.joined(separator: \"\\n - \"))\")\n            }\n            for child in group.children {\n                if let group = child as? PBXGroup {\n                    try validateGroup(group)\n                }\n            }\n        }\n        try validateGroup(mainGroup)\n    }\n\n    func getMainGroup(function: String = #function, file: String = #file, line: Int = #line) throws -> PBXGroup {\n        guard let mainGroup = projects.first?.mainGroup else {\n            throw failure(\"Couldn't find main group\", file: file, line: line)\n        }\n        return mainGroup\n    }\n\n}\n\nclass PBXProjGeneratorTests: XCTestCase {\n\n    func testGroupOrdering() {\n        describe {\n            let directoryPath = Path(\"TestDirectory\")\n\n            func createDirectories(_ directories: String) throws {\n                let yaml = try Yams.load(yaml: directories)!\n\n                func getFiles(_ file: Any, path: Path) -> [Path] {\n                    if let array = file as? [Any] {\n                        return array.flatMap { getFiles($0, path: path) }\n                    } else if let string = file as? String {\n                        return [path + string]\n                    } else if let dictionary = file as? [String: Any] {\n                        var array: [Path] = []\n                        for (key, value) in dictionary {\n                            array += getFiles(value, path: path + key)\n                        }\n                        return array\n                    } else {\n                        return []\n                    }\n                }\n\n                let files = getFiles(yaml, path: directoryPath).filter { $0.extension != nil }\n                for file in files {\n                    try file.parent().mkpath()\n                    try file.write(\"\")\n                }\n            }\n\n            func removeDirectories() {\n                try? directoryPath.delete()\n            }\n\n            $0.before {\n                removeDirectories()\n            }\n\n            $0.after {\n                removeDirectories()\n            }\n\n            $0.it(\"setups group ordering with groupSortPosition = .top\") {\n                var options = SpecOptions()\n                options.groupSortPosition = .top\n                options.groupOrdering = [\n                    GroupOrdering(\n                        order: [\n                            \"Sources\",\n                            \"Resources\",\n                            \"Tests\",\n                            \"Support files\",\n                            \"Configurations\",\n                        ]\n                    ),\n                    GroupOrdering(\n                        pattern: \"^.*Screen$\",\n                        order: [\n                            \"View\",\n                            \"Presenter\",\n                            \"Interactor\",\n                            \"Entities\",\n                            \"Assembly\",\n                        ]\n                    ),\n                ]\n\n                let directories = \"\"\"\n                    Configurations:\n                      - file.swift\n                    Resources:\n                      - file.swift\n                    Sources:\n                      - MainScreen:\n                        - mainScreen1.swift\n                        - mainScreen2.swift\n                        - Assembly:\n                            - file.swift\n                        - Entities:\n                            - file.swift\n                        - Interactor:\n                            - file.swift\n                        - Presenter:\n                            - file.swift\n                        - View:\n                            - file.swift\n                    Support files:\n                      - file.swift\n                    Tests:\n                      - file.swift\n                    UITests:\n                      - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Configurations\", \"Resources\", \"Sources\", \"Support files\", \"Tests\", \"UITests\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n                let projGenerator = PBXProjGenerator(project: project)\n\n                let pbxProj = try project.generatePbxProj()\n                let group = try pbxProj.getMainGroup()\n\n                projGenerator.setupGroupOrdering(group: group)\n\n                let mainGroups = group.children.map { $0.nameOrPath }\n                try expect(mainGroups) == [\"Sources\", \"Resources\", \"Tests\", \"Support files\", \"Configurations\", \"UITests\", \"Products\"]\n\n                let screenGroups = group.children\n                    .first { $0.nameOrPath == \"Sources\" }\n                    .flatMap { $0 as? PBXGroup }?\n                    .children\n                    .first { $0.nameOrPath == \"MainScreen\" }\n                    .flatMap { $0 as? PBXGroup }?\n                    .children\n                    .map { $0.nameOrPath }\n                try expect(screenGroups) == [\"View\", \"Presenter\", \"Interactor\", \"Entities\", \"Assembly\", \"mainScreen1.swift\", \"mainScreen2.swift\"]\n            }\n\n            $0.it(\"setups group ordering with groupSortPosition = .bottom\") {\n                var options = SpecOptions()\n                options.groupSortPosition = .bottom\n                options.groupOrdering = [\n                    GroupOrdering(\n                        order: [\n                            \"Sources\",\n                            \"Resources\",\n                            \"Tests\",\n                            \"Support files\",\n                            \"Configurations\",\n                        ]\n                    ),\n                    GroupOrdering(\n                        pattern: \"^.*Screen$\",\n                        order: [\n                            \"View\",\n                            \"Presenter\",\n                            \"Interactor\",\n                            \"Entities\",\n                            \"Assembly\",\n                        ]\n                    ),\n                ]\n\n                let directories = \"\"\"\n                    Configurations:\n                      - file.swift\n                    Resources:\n                      - file.swift\n                    Sources:\n                      - MainScreen:\n                        - mainScreen1.swift\n                        - mainScreen2.swift\n                        - Assembly:\n                            - file.swift\n                        - Entities:\n                            - file.swift\n                        - Interactor:\n                            - file.swift\n                        - Presenter:\n                            - file.swift\n                        - View:\n                            - file.swift\n                    Support files:\n                      - file.swift\n                    Tests:\n                      - file.swift\n                    UITests:\n                      - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Configurations\", \"Resources\", \"Sources\", \"Support files\", \"Tests\", \"UITests\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n                let projGenerator = PBXProjGenerator(project: project)\n\n                let pbxProj = try project.generatePbxProj()\n                let group = try pbxProj.getMainGroup()\n\n                projGenerator.setupGroupOrdering(group: group)\n\n                let mainGroups = group.children.map { $0.nameOrPath }\n                try expect(mainGroups) == [\"Sources\", \"Resources\", \"Tests\", \"Support files\", \"Configurations\", \"UITests\", \"Products\"]\n\n                let screenGroups = group.children\n                    .first { $0.nameOrPath == \"Sources\" }\n                    .flatMap { $0 as? PBXGroup }?\n                    .children\n                    .first { $0.nameOrPath == \"MainScreen\" }\n                    .flatMap { $0 as? PBXGroup }?\n                    .children\n                    .map { $0.nameOrPath }\n                try expect(screenGroups) == [\"mainScreen1.swift\", \"mainScreen2.swift\", \"View\", \"Presenter\", \"Interactor\", \"Entities\", \"Assembly\"]\n            }\n            \n            $0.it(\"sorts SPM packages\") {\n                var options = SpecOptions()\n                options.groupSortPosition = .top\n                options.groupOrdering = [\n                    GroupOrdering(\n                        order: [\n                            \"Sources\",\n                            \"Resources\",\n                            \"Tests\",\n                            \"Packages\",\n                            \"Support files\",\n                            \"Configurations\",\n                        ]\n                    ),\n                    GroupOrdering(\n                        pattern: \"Packages\",\n                        order: [\n                            \"FeatureA\",\n                            \"FeatureB\",\n                            \"Common\",\n                        ]\n                    ),\n                ]\n\n                let directories = \"\"\"\n                    Configurations:\n                      - file.swift\n                    Resources:\n                      - file.swift\n                    Sources:\n                      - MainScreen:\n                        - mainScreen1.swift\n                        - mainScreen2.swift\n                        - Assembly:\n                            - file.swift\n                        - Entities:\n                            - file.swift\n                        - Interactor:\n                            - file.swift\n                        - Presenter:\n                            - file.swift\n                        - View:\n                            - file.swift\n                    Support files:\n                      - file.swift\n                    Packages:\n                      - Common:\n                        - Package.swift\n                      - FeatureA:\n                        - Package.swift\n                      - FeatureB:\n                        - Package.swift\n                    Tests:\n                      - file.swift\n                    UITests:\n                      - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Configurations\", \"Resources\", \"Sources\", \"Support files\", \"Tests\", \"UITests\"])\n                let project = Project(\n                    basePath: directoryPath,\n                    name: \"Test\",\n                    targets: [target],\n                    packages: [\n                        \"Common\": .local(path: \"Packages/Common\", group: nil, excludeFromProject: false),\n                        \"FeatureA\": .local(path: \"Packages/FeatureA\", group: nil, excludeFromProject: false),\n                        \"FeatureB\": .local(path: \"Packages/FeatureB\", group: nil, excludeFromProject: false),\n                    ],\n                    options: options\n                )\n                let projGenerator = PBXProjGenerator(project: project)\n\n                let pbxProj = try project.generatePbxProj()\n                let group = try pbxProj.getMainGroup()\n\n                projGenerator.setupGroupOrdering(group: group)\n\n                let mainGroups = group.children.map { $0.nameOrPath }\n                try expect(mainGroups) == [\"Sources\", \"Resources\", \"Tests\", \"Packages\", \"Support files\", \"Configurations\", \"UITests\", \"Products\"]\n\n                let packages = group.children\n                    .first { $0.nameOrPath == \"Packages\" }\n                    .flatMap { $0 as? PBXGroup }?\n                    .children\n                    .map(\\.nameOrPath)\n\n                try expect(packages) == [\"FeatureA\", \"FeatureB\", \"Common\"]\n            }\n\n            $0.it(\"sorts synced folders alongside groups\") {\n                var options = SpecOptions()\n                options.groupSortPosition = .top\n                options.groupOrdering = [\n                    GroupOrdering(\n                        order: [\n                            \"Sources\",\n                            \"SyncedSources\",\n                            \"Resources\",\n                        ]\n                    ),\n                ]\n\n                let directories = \"\"\"\n                    Resources:\n                      - file.swift\n                    Sources:\n                      - file.swift\n                    SyncedSources:\n                      - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(\n                    name: \"Test\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [\n                        \"Sources\",\n                        .init(path: \"SyncedSources\", type: .syncedFolder),\n                        \"Resources\",\n                    ]\n                )\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n                let projGenerator = PBXProjGenerator(project: project)\n\n                let pbxProj = try project.generatePbxProj()\n                let group = try pbxProj.getMainGroup()\n\n                projGenerator.setupGroupOrdering(group: group)\n\n                let mainGroups = group.children.map { $0.nameOrPath }\n                try expect(mainGroups) == [\"Sources\", \"SyncedSources\", \"Resources\", \"Products\"]\n            }\n        }\n    }\n    \n    func testDefaultLastUpgradeCheckWhenUserDidSpecifyInvalidValue() throws {\n        let lastUpgradeKey = \"LastUpgradeCheck\"\n        let attributes: [String: Any] = [lastUpgradeKey: 1234]\n        let project = Project(name: \"Test\", attributes: attributes)\n        let projGenerator = PBXProjGenerator(project: project)\n        \n        let pbxProj = try projGenerator.generate()\n        \n        for pbxProject in pbxProj.projects {\n            XCTAssertEqual(pbxProject.attributes[lastUpgradeKey]?.stringValue, project.xcodeVersion)\n        }\n    }\n    \n    func testOverrideLastUpgradeCheckWhenUserDidSpecifyValue() throws {\n        let lastUpgradeKey = \"LastUpgradeCheck\"\n        let lastUpgradeValue = \"1234\"\n        let attributes: [String: Any] = [lastUpgradeKey: lastUpgradeValue]\n        let project = Project(name: \"Test\", attributes: attributes)\n        let projGenerator = PBXProjGenerator(project: project)\n        \n        let pbxProj = try projGenerator.generate()\n        \n        for pbxProject in pbxProj.projects {\n            XCTAssertEqual(pbxProject.attributes[lastUpgradeKey]?.stringValue, lastUpgradeValue)\n        }\n    }\n    \n    func testDefaultLastUpgradeCheckWhenUserDidNotSpecifyValue() throws {\n        let lastUpgradeKey = \"LastUpgradeCheck\"\n        let project = Project(name: \"Test\")\n        let projGenerator = PBXProjGenerator(project: project)\n        \n        let pbxProj = try projGenerator.generate()\n        \n        for pbxProject in pbxProj.projects {\n            XCTAssertEqual(pbxProject.attributes[lastUpgradeKey]?.stringValue, project.xcodeVersion)\n        }\n    }\n\n    func testProductsGroupIsSet() throws {\n        let target = Target(name: \"TestApp\", type: .application, platform: .iOS)\n        let project = Project(name: \"Test\", targets: [target])\n        let projGenerator = PBXProjGenerator(project: project)\n\n        let pbxProj = try projGenerator.generate()\n\n        let pbxProject = try XCTUnwrap(pbxProj.projects.first)\n        let productsGroup = try XCTUnwrap(pbxProject.productsGroup)\n\n        XCTAssertEqual(productsGroup.name, \"Products\")\n        XCTAssertEqual(productsGroup.children.count, 1)\n\n        let productReference = try XCTUnwrap(productsGroup.children.first as? PBXFileReference)\n        XCTAssertEqual(productReference.path, \"TestApp.app\")\n    }\n\n    func testProductsGroupIsSetWithMultipleTargets() throws {\n        let appTarget = Target(name: \"TestApp\", type: .application, platform: .iOS)\n        let frameworkTarget = Target(name: \"TestFramework\", type: .framework, platform: .iOS)\n        let project = Project(name: \"Test\", targets: [appTarget, frameworkTarget])\n        let projGenerator = PBXProjGenerator(project: project)\n\n        let pbxProj = try projGenerator.generate()\n\n        let pbxProject = try XCTUnwrap(pbxProj.projects.first)\n        let productsGroup = try XCTUnwrap(pbxProject.productsGroup)\n\n        XCTAssertEqual(productsGroup.name, \"Products\")\n        XCTAssertEqual(productsGroup.children.count, 2)\n\n        let productNames = productsGroup.children\n            .compactMap { $0 as? PBXFileReference }\n            .compactMap { $0.path }\n            .sorted()\n        XCTAssertEqual(productNames, [\"TestApp.app\", \"TestFramework.framework\"])\n    }\n\n    func testProductsGroupIsSetWithNoTargets() throws {\n        let project = Project(name: \"Test\")\n        let projGenerator = PBXProjGenerator(project: project)\n\n        let pbxProj = try projGenerator.generate()\n\n        let pbxProject = try XCTUnwrap(pbxProj.projects.first)\n        let productsGroup = try XCTUnwrap(pbxProject.productsGroup)\n\n        XCTAssertEqual(productsGroup.name, \"Products\")\n        XCTAssertEqual(productsGroup.children.count, 0)\n    }\n\n    func testPlatformDependencies() {\n        describe {\n            let directoryPath = Path(\"TestDirectory\")\n\n            func createDirectories(_ directories: String) throws {\n                let yaml = try Yams.load(yaml: directories)!\n\n                func getFiles(_ file: Any, path: Path) -> [Path] {\n                    if let array = file as? [Any] {\n                        return array.flatMap { getFiles($0, path: path) }\n                    } else if let string = file as? String {\n                        return [path + string]\n                    } else if let dictionary = file as? [String: Any] {\n                        var array: [Path] = []\n                        for (key, value) in dictionary {\n                            array += getFiles(value, path: path + key)\n                        }\n                        return array\n                    } else {\n                        return []\n                    }\n                }\n\n                let files = getFiles(yaml, path: directoryPath).filter { $0.extension != nil }\n                for file in files {\n                    try file.parent().mkpath()\n                    try file.write(\"\")\n                }\n            }\n\n            func removeDirectories() {\n                try? directoryPath.delete()\n            }\n\n            $0.before {\n                removeDirectories()\n            }\n\n            $0.after {\n                removeDirectories()\n            }\n\n            $0.it(\"setups target with different dependencies\") {\n                let directories = \"\"\"\n                    Sources:\n                      - MainScreen:\n                        - Entities:\n                            - file.swift\n                \"\"\"\n                try createDirectories(directories)\n                let target1 = Target(name: \"TestAll\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let target2 = Target(name: \"TestiOS\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let target3 = Target(name: \"TestmacOS\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let dependency1 = Dependency(type: .target, reference: \"TestAll\", platformFilter: .all)\n                let dependency2 = Dependency(type: .target, reference: \"TestiOS\", platformFilter: .iOS)\n                let dependency3 = Dependency(type: .target, reference: \"TestmacOS\", platformFilter: .macOS)\n                let dependency4 = Dependency(type: .package(products: [\"Swinject\"]), reference: \"Swinject\", platformFilter: .iOS)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"], dependencies: [dependency1, dependency2, dependency3, dependency4])\n                let swinjectPackage = SwiftPackage.remote(url: \"https://github.com/Swinject/Swinject\", versionRequirement: .exact(\"2.8.0\"))\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target, target1, target2, target3], packages: [\"Swinject\": swinjectPackage])\n\n                let pbxProj = try project.generatePbxProj()\n\n                let targets = pbxProj.projects.first?.targets\n                let testTarget = pbxProj.projects.first?.targets.first(where: { $0.name == \"Test\" })\n                let testTargetDependencies = testTarget?.dependencies\n                try expect(targets?.count) == 4\n                try expect(testTargetDependencies?.count) == 3\n                try expect(testTargetDependencies?[0].platformFilter).beNil()\n                try expect(testTargetDependencies?[1].platformFilter) == \"ios\"\n                try expect(testTargetDependencies?[2].platformFilter) == \"maccatalyst\"\n                try expect(testTarget?.frameworksBuildPhase()?.files?.count) == 1\n                try expect(testTarget?.frameworksBuildPhase()?.files?[0].platformFilter) == \"ios\"\n            }\n\n            $0.it(\"places resources before sources buildPhase\") {\n                let directories = \"\"\"\n                    Sources:\n                      - MainScreen:\n                        - Entities:\n                            - file.swift\n                            - image.jpg\n                \"\"\"\n                try createDirectories(directories)\n                let target1 = Target(\n                    name: \"TestAll\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [\"Sources\"],\n                    putResourcesBeforeSourcesBuildPhase: true\n                )\n                let target2 = Target(\n                    name: \"TestiOS\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [\"Sources\"],\n                    putResourcesBeforeSourcesBuildPhase: false\n                )\n\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target1, target2])\n\n                let pbxProj = try project.generatePbxProj()\n\n                let targets = pbxProj.projects.first?.targets\n                try expect(targets?.count) == 2\n                try expect(targets?.first?.buildPhases.first).to.beOfType(PBXResourcesBuildPhase.self)\n                try expect(targets?.first?.buildPhases.last).to.beOfType(PBXSourcesBuildPhase.self)\n\n                try expect(targets?.last?.buildPhases.first).to.beOfType(PBXSourcesBuildPhase.self)\n                try expect(targets?.last?.buildPhases.last).to.beOfType(PBXResourcesBuildPhase.self)\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Tests/XcodeGenKitTests/ProjectGeneratorTests.swift",
    "content": "import PathKit\nimport ProjectSpec\nimport Spectre\nimport XcodeGenKit\nimport XcodeProj\nimport XCTest\nimport Yams\nimport TestSupport\n\nprivate let app = Target(\n    name: \"MyApp\",\n    type: .application,\n    platform: .iOS,\n    settings: Settings(buildSettings: [\"SETTING_1\": \"VALUE\"]),\n    dependencies: [Dependency(type: .target, reference: \"MyFramework\")]\n)\n\nprivate let framework = Target(\n    name: \"MyFramework\",\n    type: .framework,\n    platform: .iOS,\n    settings: Settings(buildSettings: [\"SETTING_2\": \"VALUE\"])\n)\n\nprivate let optionalFramework = Target(\n    name: \"MyOptionalFramework\",\n    type: .framework,\n    platform: .iOS\n)\n\nprivate let uiTest = Target(\n    name: \"MyAppUITests\",\n    type: .uiTestBundle,\n    platform: .iOS,\n    settings: Settings(buildSettings: [\"SETTING_3\": \"VALUE\"]),\n    dependencies: [Dependency(type: .target, reference: \"MyApp\")]\n)\n\nprivate let targets = [app, framework, optionalFramework, uiTest]\n\nclass ProjectGeneratorTests: XCTestCase {\n\n    func testOptions() throws {\n\n        describe {\n\n            $0.it(\"generates bundle id\") {\n                let options = SpecOptions(bundleIdPrefix: \"com.test\")\n                let project = Project(name: \"test\", targets: [framework], options: options)\n                let pbxProj = try project.generatePbxProj()\n\n                guard let target = pbxProj.nativeTargets.first,\n                    let buildConfigList = target.buildConfigurationList,\n                    let buildConfig = buildConfigList.buildConfigurations.first else {\n                    throw failure(\"Build Config not found\")\n                }\n                try expect(buildConfig.buildSettings[\"PRODUCT_BUNDLE_IDENTIFIER\"]?.stringValue) == \"com.test.MyFramework\"\n            }\n\n            $0.it(\"clears setting presets\") {\n                let options = SpecOptions(settingPresets: .none)\n                let project = Project(name: \"test\", targets: [framework], options: options)\n                let pbxProj = try project.generatePbxProj()\n                let allSettings = pbxProj.buildConfigurations.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted()\n                try expect(allSettings) == [\"SDKROOT\", \"SETTING_2\"]\n            }\n\n            $0.it(\"generates development language\") {\n                let options = SpecOptions(developmentLanguage: \"de\")\n                let project = Project(name: \"test\", options: options)\n                let pbxProj = try project.generatePbxProj()\n                let pbxProject = try unwrap(pbxProj.projects.first)\n                try expect(pbxProject.developmentRegion) == \"de\"\n            }\n\n            $0.it(\"formats xcode version\") {\n                let versions: [String: String] = [\n                    \"0900\": \"0900\",\n                    \"1010\": \"1010\",\n                    \"9\": \"0900\",\n                    \"9.0\": \"0900\",\n                    \"9.1\": \"0910\",\n                    \"9.1.1\": \"0911\",\n                    \"10\": \"1000\",\n                    \"10.1\": \"1010\",\n                    \"10.1.2\": \"1012\",\n                ]\n\n                for (version, expected) in versions {\n                    try expect(XCodeVersion.parse(version)) == expected\n                }\n            }\n\n            $0.it(\"uses the default configuration name\") {\n                let options = SpecOptions(defaultConfig: \"Bconfig\")\n                let project = Project(name: \"test\", configs: [Config(name: \"Aconfig\"), Config(name: \"Bconfig\")], targets: [framework], options: options)\n                let pbxProject = try project.generatePbxProj()\n\n                guard let projectConfigList = pbxProject.projects.first?.buildConfigurationList,\n                    let defaultConfigurationName = projectConfigList.defaultConfigurationName\n                else {\n                    throw failure(\"Default configuration name not found\")\n                }\n\n                try expect(defaultConfigurationName) == \"Bconfig\"\n            }\n\n            $0.it(\"uses the default configuration name for every target in a project\") {\n                let options = SpecOptions(defaultConfig: \"Bconfig\")\n                let project = Project(\n                    name: \"test\",\n                    configs: [\n                        Config(name: \"Aconfig\"),\n                        Config(name: \"Bconfig\"),\n                    ],\n                    targets: [\n                        Target(name: \"1\", type: .framework, platform: .iOS),\n                        Target(name: \"2\", type: .framework, platform: .iOS),\n                    ],\n                    options: options\n                )\n                let pbxProject = try project.generatePbxProj()\n\n                try pbxProject.projects.first?.targets.forEach { target in\n\n                    guard\n                        let buildConfigurationList = target.buildConfigurationList,\n                        let defaultConfigurationName = buildConfigurationList.defaultConfigurationName else {\n                        throw failure(\"Default configuration name not found\")\n                    }\n\n                    try expect(defaultConfigurationName) == \"Bconfig\"\n                }\n            }\n        }\n    }\n\n    func testConfigGenerator() {\n        describe {\n\n            $0.it(\"generates config defaults\") {\n                let project = Project(name: \"test\")\n                let pbxProj = try project.generatePbxProj()\n                let configs = pbxProj.buildConfigurations\n                try expect(configs.count) == 2\n                try expect(configs).contains(name: \"Debug\")\n                try expect(configs).contains(name: \"Release\")\n            }\n\n            $0.it(\"generates configs\") {\n                let project = Project(\n                    name: \"test\",\n                    configs: [Config(name: \"config1\"), Config(name: \"config2\")]\n                )\n                let pbxProj = try project.generatePbxProj()\n                let configs = pbxProj.buildConfigurations\n                try expect(configs.count) == 2\n                try expect(configs).contains(name: \"config1\")\n                try expect(configs).contains(name: \"config2\")\n            }\n\n            $0.it(\"clears config settings when missing type\") {\n                let project = Project(\n                    name: \"test\",\n                    configs: [Config(name: \"config\")]\n                )\n                let pbxProj = try project.generatePbxProj()\n                let config = try unwrap(pbxProj.buildConfigurations.first)\n\n                try expect(config.buildSettings.isEmpty).to.beTrue()\n            }\n\n            $0.it(\"merges settings\") {\n                let project = try Project(path: fixturePath + \"settings_test.yml\")\n                let config = try unwrap(project.getConfig(\"config1\"))\n                let debugProjectSettings = project.getProjectBuildSettings(config: config)\n\n                let target = try unwrap(project.getTarget(\"Target\"))\n                let targetDebugSettings = project.getTargetBuildSettings(target: target, config: config)\n\n                var buildSettings = BuildSettings()\n                buildSettings += [\"SDKROOT\": \"iphoneos\"]\n                buildSettings += SettingsPresetFile.base.getBuildSettings()\n                buildSettings += SettingsPresetFile.config(.debug).getBuildSettings()\n\n                buildSettings += [\n                    \"SETTING\": \"value\",\n                    \"SETTING 5\": \"value 5\",\n                    \"SETTING 6\": \"value 6\",\n                ]\n                try expect(debugProjectSettings == buildSettings).beTrue()\n\n                var expectedTargetDebugSettings = BuildSettings()\n                expectedTargetDebugSettings += SettingsPresetFile.platform(.iOS).getBuildSettings()\n                expectedTargetDebugSettings += SettingsPresetFile.product(.application).getBuildSettings()\n                expectedTargetDebugSettings += SettingsPresetFile.productPlatform(.application, .iOS).getBuildSettings()\n                expectedTargetDebugSettings += [\"SETTING 2\": \"value 2\", \"SETTING 3\": \"value 3\", \"SETTING\": \"value\"]\n\n                try expect(targetDebugSettings == expectedTargetDebugSettings).beTrue()\n            }\n\n            $0.it(\"applies partial config settings\") {\n                let project = Project(\n                    name: \"test\",\n                    configs: [\n                        Config(name: \"Release\", type: .release),\n                        Config(name: \"Staging Debug\", type: .debug),\n                        Config(name: \"Staging Release\", type: .release),\n                    ],\n                    settings: Settings(configSettings: [\n                        \"staging\": [\"SETTING1\": \"VALUE1\"],\n                        \"debug\": [\"SETTING2\": \"VALUE2\"],\n                        \"Release\": [\"SETTING3\": \"VALUE3\"],\n                    ])\n                )\n\n                var buildSettings = project.getProjectBuildSettings(config: project.configs[1])\n                try expect(buildSettings[\"SETTING1\"]?.stringValue) == \"VALUE1\"\n                try expect(buildSettings[\"SETTING2\"]?.stringValue) == \"VALUE2\"\n\n                // don't apply partial when exact match\n                buildSettings = project.getProjectBuildSettings(config: project.configs[2])\n                try expect(buildSettings[\"SETTING3\"]).beNil()\n            }\n\n            $0.it(\"sets project SDKROOT if there is only a single platform\") {\n                var project = Project(\n                    name: \"test\",\n                    targets: [\n                        Target(name: \"1\", type: .application, platform: .iOS),\n                        Target(name: \"2\", type: .framework, platform: .iOS),\n                    ]\n                )\n                var buildSettings = project.getProjectBuildSettings(config: project.configs.first!)\n                try expect(buildSettings[\"SDKROOT\"]?.stringValue) == \"iphoneos\"\n\n                project.targets.append(Target(name: \"3\", type: .application, platform: .tvOS))\n                buildSettings = project.getProjectBuildSettings(config: project.configs.first!)\n                try expect(buildSettings[\"SDKROOT\"]).beNil()\n            }\n        }\n    }\n\n    func testAggregateTargets() {\n        describe {\n\n            let otherTarget = Target(name: \"Other\", type: .framework, platform: .iOS, dependencies: [Dependency(type: .target, reference: \"AggregateTarget\")])\n            let otherTarget2 = Target(name: \"Other2\", type: .framework, platform: .iOS, dependencies: [Dependency(type: .target, reference: \"Other\")], transitivelyLinkDependencies: true)\n            let aggregateTarget = AggregateTarget(name: \"AggregateTarget\", targets: [\"MyApp\", \"MyFramework\"])\n            let aggregateTarget2 = AggregateTarget(name: \"AggregateTarget2\", targets: [\"AggregateTarget\"])\n            let project = Project(name: \"test\", targets: [app, framework, otherTarget, otherTarget2], aggregateTargets: [aggregateTarget, aggregateTarget2])\n\n            $0.it(\"generates aggregate targets\") {\n                let pbxProject = try project.generatePbxProj()\n                let nativeTargets = pbxProject.nativeTargets.sorted { $0.name < $1.name }\n                let aggregateTargets = pbxProject.aggregateTargets.sorted { $0.name < $1.name }\n\n                try expect(nativeTargets.count) == 4\n                try expect(aggregateTargets.count) == 2\n\n                let aggregateTarget1 = aggregateTargets.first { $0.name == \"AggregateTarget\" }\n                try expect(aggregateTarget1?.dependencies.count) == 2\n\n                let aggregateTarget2 = aggregateTargets.first { $0.name == \"AggregateTarget2\" }\n                try expect(aggregateTarget2?.dependencies.count) == 1\n\n                let target1 = nativeTargets.first { $0.name == \"Other\" }\n                try expect(target1?.dependencies.count) == 1\n\n                let target2 = nativeTargets.first { $0.name == \"Other2\" }\n                try expect(target2?.dependencies.count) == 2\n\n                try expect(pbxProject.targetDependencies.count) == 7\n            }\n        }\n    }\n\n    func testTargets() throws {\n        try skipIfNecessary()\n        describe {\n\n            let project = Project(name: \"test\", targets: targets)\n\n            $0.it(\"generates targets\") {\n                let pbxProject = try project.generatePbxProj()\n                let nativeTargets = pbxProject.nativeTargets\n                try expect(nativeTargets.count) == 4\n                try expect(nativeTargets.contains { $0.name == app.name }).beTrue()\n                try expect(nativeTargets.contains { $0.name == framework.name }).beTrue()\n                try expect(nativeTargets.contains { $0.name == uiTest.name }).beTrue()\n                try expect(nativeTargets.contains { $0.name == optionalFramework.name }).beTrue()\n            }\n\n            $0.it(\"generates legacy target\") {\n                let target = Target(name: \"target\", type: .application, platform: .iOS, dependencies: [.init(type: .target, reference: \"legacy\")])\n                let legacyTarget = Target(name: \"legacy\", type: .none, platform: .iOS, legacy: .init(toolPath: \"path\"))\n                let project = Project(name: \"test\", targets: [target, legacyTarget])\n\n                let pbxProject = try project.generatePbxProj()\n                try expect(pbxProject.legacyTargets.count) == 1\n            }\n\n            $0.it(\"generates target attributes\") {\n                var appTargetWithAttributes = app\n                appTargetWithAttributes.settings.buildSettings[\"DEVELOPMENT_TEAM\"] = \"123\"\n                appTargetWithAttributes.attributes = [\"ProvisioningStyle\": \"Automatic\"]\n\n                var testTargetWithAttributes = uiTest\n                testTargetWithAttributes.settings.buildSettings[\"CODE_SIGN_STYLE\"] = \"Manual\"\n                let project = Project(name: \"test\", targets: [appTargetWithAttributes, framework, optionalFramework, testTargetWithAttributes])\n                let pbxProject = try project.generatePbxProj()\n\n                let targetAttributes = try unwrap(pbxProject.projects.first?.targetAttributes)\n                let appTarget = try unwrap(pbxProject.targets(named: app.name).first)\n                let uiTestTarget = try unwrap(pbxProject.targets(named: uiTest.name).first)\n\n                if case let .targetReference(object) = targetAttributes[uiTestTarget]?[\"TestTargetID\"] {\n                    try expect((object as? PBXNativeTarget)?.name) == app.name\n                } else {\n                    throw failure(\"Expected TestTargetID to be a target reference\")\n                }\n                try expect(targetAttributes[uiTestTarget]?[\"ProvisioningStyle\"]?.stringValue) == \"Manual\"\n                try expect(targetAttributes[appTarget]?[\"ProvisioningStyle\"]?.stringValue) == \"Automatic\"\n                try expect(targetAttributes[appTarget]?[\"DevelopmentTeam\"]?.stringValue) == \"123\"\n            }\n\n            $0.it(\"generates platform version\") {\n                let target = Target(name: \"Target\", type: .application, platform: .watchOS, deploymentTarget: \"2.0\")\n                let project = Project(name: \"\", targets: [target], options: .init(deploymentTarget: DeploymentTarget(iOS: \"10.0\", watchOS: \"3.0\")))\n\n                let pbxProject = try project.generatePbxProj()\n                let projectConfig = try unwrap(pbxProject.projects.first?.buildConfigurationList?.buildConfigurations.first)\n                let targetConfig = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n\n                try expect(projectConfig.buildSettings[\"IPHONEOS_DEPLOYMENT_TARGET\"]?.stringValue) == \"10.0\"\n                try expect(projectConfig.buildSettings[\"WATCHOS_DEPLOYMENT_TARGET\"]?.stringValue) == \"3.0\"\n                try expect(projectConfig.buildSettings[\"TVOS_DEPLOYMENT_TARGET\"]).beNil()\n\n                try expect(targetConfig.buildSettings[\"IPHONEOS_DEPLOYMENT_TARGET\"]).beNil()\n                try expect(targetConfig.buildSettings[\"WATCHOS_DEPLOYMENT_TARGET\"]?.stringValue) == \"2.0\"\n                try expect(targetConfig.buildSettings[\"TVOS_DEPLOYMENT_TARGET\"]).beNil()\n            }\n            \n            $0.it(\"supportedDestinations merges settings - iOS, tvOS\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.tvOS, .iOS])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator appletvos appletvsimulator\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2,3\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n                try expect(targetConfig1.buildSettings[\"CODE_SIGN_IDENTITY\"]?.stringValue) == \"iPhone Developer\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - iOS, visionOS\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.visionOS, .iOS])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator xros xrsimulator\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2,7\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n                try expect(targetConfig1.buildSettings[\"CODE_SIGN_IDENTITY\"]?.stringValue) == \"iPhone Developer\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - iOS, tvOS, macOS\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.iOS, .tvOS, .macOS])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator appletvos appletvsimulator macosx\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2,3\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n                try expect(targetConfig1.buildSettings[\"CODE_SIGN_IDENTITY\"]?.stringValue) == \"iPhone Developer\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - iOS, tvOS, macCatalyst\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.iOS, .tvOS, .macCatalyst])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator appletvos appletvsimulator\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2,3\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == true\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n                try expect(targetConfig1.buildSettings[\"CODE_SIGN_IDENTITY\"]?.stringValue) == \"iPhone Developer\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - iOS, macOS\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.iOS, .macOS])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator macosx\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n                try expect(targetConfig1.buildSettings[\"CODE_SIGN_IDENTITY\"]?.stringValue) == \"iPhone Developer\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - tvOS, macOS\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.tvOS, .macOS])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"appletvos appletvsimulator macosx\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"3\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"App Icon & Top Shelf Image\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME\"]?.stringValue) == \"LaunchImage\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - visionOS, macOS\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.visionOS, .macOS])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"xros xrsimulator macosx\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"7\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                \n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n            }\n            \n            $0.it(\"supportedDestinations merges settings - iOS, macCatalyst\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.iOS, .macCatalyst])\n                let project = Project(name: \"\", targets: [target])\n                \n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                \n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == true\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                \n                try expect(targetConfig1.buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"@executable_path/Frameworks\"]\n                try expect(targetConfig1.buildSettings[\"SDKROOT\"]?.stringValue) == \"auto\"\n                try expect(targetConfig1.buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"]?.stringValue) == \"AppIcon\"\n                try expect(targetConfig1.buildSettings[\"CODE_SIGN_IDENTITY\"]?.stringValue) == \"iPhone Developer\"\n            }\n\n            $0.it(\"supportedDestinations merges settings - iOS, watchOS (framework)\") {\n                let target = Target(name: \"Target\", type: .framework, platform: .auto, supportedDestinations: [.iOS, .watchOS])\n                let project = Project(name: \"\", targets: [target])\n\n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n\n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"iphoneos iphonesimulator watchos watchsimulator\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"1,2,4\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MACCATALYST\"]?.boolValue) == false\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == true\n            }\n\n            $0.it(\"supportedDestinations merges settings - visionOS, watchOS (framework)\") {\n                let target = Target(name: \"Target\", type: .framework, platform: .auto, supportedDestinations: [.visionOS, .watchOS])\n                let project = Project(name: \"\", targets: [target])\n\n                let pbxProject = try project.generatePbxProj()\n                let targetConfig1 = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n\n                try expect(targetConfig1.buildSettings[\"SUPPORTED_PLATFORMS\"]?.stringValue) == \"watchos watchsimulator xros xrsimulator\"\n                try expect(targetConfig1.buildSettings[\"TARGETED_DEVICE_FAMILY\"]?.stringValue) == \"4,7\"\n                try expect(targetConfig1.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]?.boolValue) == false\n            }\n\n            $0.it(\"supportedDestinations respects settingPresets none\") {\n                let target = Target(name: \"Target\", type: .application, platform: .auto, supportedDestinations: [.iOS, .macOS])\n                let options = SpecOptions(settingPresets: .none)\n                let project = Project(name: \"\", targets: [target], options: options)\n\n                let pbxProject = try project.generatePbxProj()\n                let targetConfig = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n\n                try expect(targetConfig.buildSettings[\"SUPPORTS_MACCATALYST\"]).beNil()\n                try expect(targetConfig.buildSettings[\"SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD\"]).beNil()\n                try expect(targetConfig.buildSettings[\"SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD\"]).beNil()\n                try expect(targetConfig.buildSettings[\"SUPPORTED_PLATFORMS\"]).beNil()\n                try expect(targetConfig.buildSettings[\"TARGETED_DEVICE_FAMILY\"]).beNil()\n            }\n\n            $0.it(\"generates dependencies\") {\n                let pbxProject = try project.generatePbxProj()\n\n                let nativeTargets = pbxProject.nativeTargets\n                let dependencies = pbxProject.targetDependencies.sorted { $0.target?.name ?? \"\" < $1.target?.name ?? \"\" }\n                try expect(dependencies.count) == 2\n                let appTarget = nativeTargets.first { $0.name == app.name }\n                let frameworkTarget = nativeTargets.first { $0.name == framework.name }\n\n                try expect(dependencies).contains { $0.target == appTarget }\n                try expect(dependencies).contains { $0.target == frameworkTarget }\n            }\n\n            $0.it(\"generates dependency from external project file\") {\n                let subproject: PBXProj\n                prepareXcodeProj: do {\n                    let project = try! Project(path: fixturePath + \"TestProject/AnotherProject/project.yml\")\n                    let generator = ProjectGenerator(project: project)\n                    let writer = FileWriter(project: project)\n                    let xcodeProject = try! generator.generateXcodeProject(userName: \"someUser\")\n                    try! writer.writeXcodeProject(xcodeProject)\n                    try! writer.writePlists()\n                    subproject = xcodeProject.pbxproj\n                }\n                let externalProjectPath = fixturePath + \"TestProject/AnotherProject/AnotherProject.xcodeproj\"\n                let projectReference = ProjectReference(name: \"AnotherProject\", path: externalProjectPath.string)\n                var target = app\n                target.dependencies = [\n                    Dependency(type: .target, reference: \"AnotherProject/ExternalTarget\"),\n                ]\n                let project = Project(\n                    name: \"test\",\n                    targets: [target],\n                    schemes: [],\n                    projectReferences: [projectReference]\n                )\n                let pbxProject = try project.generatePbxProj()\n\n                let projectReferences = pbxProject.rootObject?.projects ?? []\n                try expect(projectReferences.count) == 1\n                try expect((projectReferences.first?[\"ProjectRef\"])?.name) == \"AnotherProject\"\n\n                let dependencies = pbxProject.targetDependencies\n                let targetUuid = subproject.targets(named: \"ExternalTarget\").first?.uuid\n                try expect(dependencies.count) == 1\n                try expect(dependencies).contains { dependency in\n                    guard let id = dependency.targetProxy?.remoteGlobalID else { return false }\n\n                    switch id {\n                    case .object(let object):\n                        return object.uuid == targetUuid\n                    case .string(let value):\n                        return value == targetUuid\n                    }\n                }\n\n            }\n\n            $0.it(\"generates targets with correct transitive embeds\") {\n                // App # Embeds it's frameworks, so shouldn't embed in tests\n                //   dependencies:\n                //     - framework: FrameworkA.framework\n                //     - framework: FrameworkB.framework\n                //       embed: false\n                // iOSFrameworkZ:\n                //   dependencies: []\n                // iOSFrameworkX:\n                //   dependencies: []\n                // StaticLibrary:\n                //   dependencies:\n                //     - target: iOSFrameworkZ\n                //     - framework: FrameworkZ.framework\n                //     - carthage: CarthageZ\n                // ResourceBundle\n                //   dependencies: []\n                // iOSFrameworkA\n                //   dependencies:\n                //     - target: StaticLibrary\n                //     - target: ResourceBundle\n                //     # Won't embed FrameworkC.framework, so should embed in tests\n                //     - framework: FrameworkC.framework\n                //     - carthage: CarthageA\n                //     - carthage: CarthageB\n                //       embed: false\n                //     - package: RxSwift\n                //       product: RxSwift\n                //     - package: RxSwift\n                //       product: RxCocoa\n                //     - package: RxSwift\n                //       product: RxRelay\n                // iOSFrameworkB\n                //   dependencies:\n                //     - target: iOSFrameworkA\n                //     # Won't embed FrameworkD.framework, so should embed in tests\n                //     - framework: FrameworkD.framework\n                //     - framework: FrameworkE.framework\n                //       embed: true\n                //     - framework: FrameworkF.framework\n                //       embed: false\n                //     - carthage: CarthageC\n                //       embed: true\n                // AppTest\n                //   dependencies:\n                //     # Being an app, shouldn't be embedded\n                //     - target: App\n                //     - target: iOSFrameworkB\n                //     - carthage: CarthageD\n                //     # should be implicitly added\n                //     # - target: iOSFrameworkA\n                //     #   embed: true\n                //     # - target: StaticLibrary\n                //     #   embed: false\n                //     # - framework: FrameworkZ.framework\n                //     # - target: iOSFrameworkZ\n                //     #   embed: true\n                //     # - carthage: CarthageZ\n                //     #   embed: false\n                //     # - carthage: CarthageA\n                //     #   embed: true\n                //     # - framework: FrameworkC.framework\n                //     #   embed: true\n                //     # - framework: FrameworkD.framework\n                //     #   embed: true\n                //\n                // AppTestWithoutTransitive\n                //   dependencies:\n                //     # Being an app, shouldn't be embedded\n                //     - target: App\n                //     - target: iOSFrameworkB\n                //     - carthage: CarthageD\n                //\n                // packages:\n                //   RxSwift:\n                //     url: https://github.com/ReactiveX/RxSwift\n                //     majorVersion: 5.1.0\n\n                var expectedResourceFiles: [String: Set<String>] = [:]\n                var expectedBundlesFiles: [String: Set<String>] = [:]\n                var expectedLinkedFiles: [String: Set<String>] = [:]\n                var expectedEmbeddedFrameworks: [String: Set<String>] = [:]\n\n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .iOS,\n                    // Embeds it's frameworks, so they shouldn't embed in AppTest\n                    dependencies: [\n                        Dependency(type: .framework, reference: \"FrameworkA.framework\"),\n                        Dependency(type: .framework, reference: \"FrameworkB.framework\", embed: false),\n                    ]\n                )\n                expectedResourceFiles[app.name] = Set()\n                expectedLinkedFiles[app.name] = Set([\n                    \"FrameworkA.framework\",\n                    \"FrameworkB.framework\",\n                ])\n                expectedEmbeddedFrameworks[app.name] = Set([\n                    \"FrameworkA.framework\",\n                ])\n\n                let iosFrameworkZ = Target(\n                    name: \"iOSFrameworkZ\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: []\n                )\n                expectedResourceFiles[iosFrameworkZ.name] = Set()\n                expectedLinkedFiles[iosFrameworkZ.name] = Set()\n                expectedEmbeddedFrameworks[iosFrameworkZ.name] = Set()\n\n                let iosFrameworkX = Target(\n                    name: \"iOSFrameworkX\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: []\n                )\n                expectedResourceFiles[iosFrameworkX.name] = Set()\n                expectedLinkedFiles[iosFrameworkX.name] = Set()\n                expectedEmbeddedFrameworks[iosFrameworkX.name] = Set()\n\n                let staticLibrary = Target(\n                    name: \"StaticLibrary\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: iosFrameworkZ.name, link: true),\n                        Dependency(type: .framework, reference: \"FrameworkZ.framework\", link: true),\n                        Dependency(type: .target, reference: iosFrameworkX.name /* , link: false */ ),\n                        Dependency(type: .framework, reference: \"FrameworkX.framework\" /* , link: false */ ),\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"CarthageZ\"),\n                        Dependency(type: .bundle, reference: \"BundleA.bundle\"),\n                    ]\n                )\n                expectedResourceFiles[staticLibrary.name] = Set()\n                expectedBundlesFiles[staticLibrary.name] = Set()\n                expectedLinkedFiles[staticLibrary.name] = Set([\n                    iosFrameworkZ.filename,\n                    \"FrameworkZ.framework\",\n                ])\n                expectedEmbeddedFrameworks[staticLibrary.name] = Set()\n\n                let resourceBundle = Target(\n                    name: \"ResourceBundle\",\n                    type: .bundle,\n                    platform: .iOS,\n                    dependencies: []\n                )\n                expectedResourceFiles[resourceBundle.name] = Set()\n                expectedLinkedFiles[resourceBundle.name] = Set()\n                expectedEmbeddedFrameworks[resourceBundle.name] = Set()\n\n                let iosFrameworkA = Target(\n                    name: \"iOSFrameworkA\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: resourceBundle.name),\n                        Dependency(type: .framework, reference: \"FrameworkC.framework\"),\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"CarthageA\"),\n                        Dependency(type: .package(products: [\"RxSwift\"]), reference: \"RxSwift\"),\n                        Dependency(type: .package(products: [\"RxCocoa\"]), reference: \"RxSwift\"),\n                        Dependency(type: .package(products: [\"RxRelay\"]), reference: \"RxSwift\"),\n\n                        // Validate - Do not link package\n                        Dependency(type: .package(products: [\"KeychainAccess\"]), reference: \"KeychainAccess\", link: false),\n\n                        // Statically linked, so don't embed into test\n                        Dependency(type: .target, reference: staticLibrary.name),\n\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"CarthageB\", embed: false),\n                        Dependency(type: .bundle, reference: \"BundleA.bundle\"),\n                    ]\n                )\n                expectedResourceFiles[iosFrameworkA.name] = Set()\n                expectedBundlesFiles[iosFrameworkA.name] = Set([\n                    \"BundleA.bundle\",\n                ])\n                expectedLinkedFiles[iosFrameworkA.name] = Set([\n                    \"FrameworkC.framework\",\n                    iosFrameworkZ.filename,\n                    iosFrameworkX.filename,\n                    \"FrameworkZ.framework\",\n                    \"FrameworkX.framework\",\n                    \"CarthageZ.framework\",\n                    \"CarthageA.framework\",\n                    \"CarthageB.framework\",\n                    \"RxSwift\",\n                    \"RxCocoa\",\n                    \"RxRelay\",\n                ])\n                expectedEmbeddedFrameworks[iosFrameworkA.name] = Set()\n\n                let iosFrameworkB = Target(\n                    name: \"iOSFrameworkB\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: iosFrameworkA.name),\n                        Dependency(type: .framework, reference: \"FrameworkD.framework\"),\n                        // Embedded into framework, so don't embed into test\n                        Dependency(type: .framework, reference: \"FrameworkE.framework\", embed: true),\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"CarthageC\", embed: true),\n                        // Statically linked, so don't embed into test\n                        Dependency(type: .framework, reference: \"FrameworkF.framework\", embed: false),\n                    ]\n                )\n                expectedResourceFiles[iosFrameworkB.name] = Set()\n                expectedLinkedFiles[iosFrameworkB.name] = Set([\n                    iosFrameworkA.filename,\n                    iosFrameworkZ.filename,\n                    iosFrameworkX.filename,\n                    \"FrameworkZ.framework\",\n                    \"FrameworkX.framework\",\n                    \"CarthageZ.framework\",\n                    \"FrameworkC.framework\",\n                    \"FrameworkD.framework\",\n                    \"FrameworkE.framework\",\n                    \"FrameworkF.framework\",\n                    \"CarthageA.framework\",\n                    \"CarthageB.framework\",\n                    \"CarthageC.framework\",\n                    \"RxSwift\",\n                    \"RxCocoa\",\n                    \"RxRelay\",\n                ])\n                expectedEmbeddedFrameworks[iosFrameworkB.name] = Set([\n                    \"FrameworkE.framework\",\n                    \"CarthageC.framework\",\n                ])\n\n                let appTest = Target(\n                    name: \"AppTest\",\n                    type: .unitTestBundle,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: app.name),\n                        Dependency(type: .target, reference: iosFrameworkB.name),\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"CarthageD\"),\n                    ],\n                    directlyEmbedCarthageDependencies: false\n                )\n                expectedResourceFiles[appTest.name] = Set([\n                    resourceBundle.filename,\n                ])\n                expectedLinkedFiles[appTest.name] = Set([\n                    iosFrameworkA.filename,\n                    staticLibrary.filename,\n                    iosFrameworkZ.filename,\n                    iosFrameworkX.filename,\n                    \"FrameworkZ.framework\",\n                    \"FrameworkX.framework\",\n                    \"CarthageZ.framework\",\n                    \"FrameworkF.framework\",\n                    \"FrameworkC.framework\",\n                    iosFrameworkB.filename,\n                    \"FrameworkD.framework\",\n                    \"CarthageA.framework\",\n                    \"CarthageB.framework\",\n                    \"CarthageD.framework\",\n                    \"RxSwift\",\n                    \"RxCocoa\",\n                    \"RxRelay\",\n                ])\n                expectedEmbeddedFrameworks[appTest.name] = Set([\n                    iosFrameworkA.filename,\n                    iosFrameworkZ.filename,\n                    iosFrameworkX.filename,\n                    \"FrameworkZ.framework\",\n                    \"FrameworkX.framework\",\n                    \"FrameworkC.framework\",\n                    iosFrameworkB.filename,\n                    \"FrameworkD.framework\",\n                ])\n\n                var appTestWithoutTransitive = appTest\n                appTestWithoutTransitive.name = \"AppTestWithoutTransitive\"\n                appTestWithoutTransitive.transitivelyLinkDependencies = false\n                expectedResourceFiles[appTestWithoutTransitive.name] = Set([])\n                expectedLinkedFiles[appTestWithoutTransitive.name] = Set([\n                    iosFrameworkB.filename,\n                    \"CarthageD.framework\",\n                ])\n                expectedEmbeddedFrameworks[appTestWithoutTransitive.name] = Set([\n                    iosFrameworkB.filename,\n                ])\n\n                let XCTestPath = \"Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework\"\n                let GXToolsPath = \"Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/GXTools.framework\"\n                let XCTAutomationPath = \"Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework\"\n                let stickerPack = Target(\n                    name: \"MyStickerApp\",\n                    type: .stickerPack,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .sdk(root: nil), reference: \"NotificationCenter.framework\"),\n                        Dependency(type: .sdk(root: \"DEVELOPER_DIR\"), reference: XCTestPath),\n                        Dependency(type: .sdk(root: \"DEVELOPER_DIR\"), reference: GXToolsPath, embed: true),\n                        Dependency(type: .sdk(root: \"DEVELOPER_DIR\"), reference: XCTAutomationPath, embed: true, codeSign: true),\n                    ]\n                )\n                expectedResourceFiles[stickerPack.name] = nil\n                expectedLinkedFiles[stickerPack.name] = Set([\n                    \"XCTest.framework\",\n                    \"NotificationCenter.framework\",\n                    \"GXTools.framework\",\n                    \"XCTAutomationSupport.framework\"\n                ])\n                expectedEmbeddedFrameworks[stickerPack.name] = Set([\n                    \"GXTools.framework\",\n                    \"XCTAutomationSupport.framework\"\n                ])\n\n                let targets = [app, iosFrameworkZ, iosFrameworkX, staticLibrary, resourceBundle, iosFrameworkA, iosFrameworkB, appTest, appTestWithoutTransitive, stickerPack]\n\n                let packages: [String: SwiftPackage] = [\n                    \"RxSwift\": .remote(url: \"https://github.com/ReactiveX/RxSwift\", versionRequirement: .upToNextMajorVersion(\"5.1.1\")),\n                    \"KeychainAccess\": .remote(url: \"https://github.com/kishikawakatsumi/KeychainAccess\", versionRequirement: .upToNextMajorVersion(\"4.2.0\"))\n                ]\n\n                let project = Project(\n                    name: \"test\",\n                    targets: targets,\n                    packages: packages,\n                    options: SpecOptions(transitivelyLinkDependencies: true)\n                )\n                let pbxProject = try project.generatePbxProj()\n\n                for target in targets {\n                    let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == target.name }))\n\n                    let buildPhases = nativeTarget.buildPhases\n                    let resourcesPhases = pbxProject.resourcesBuildPhases.filter { buildPhases.contains($0) }\n                    let frameworkPhases = pbxProject.frameworksBuildPhases.filter { buildPhases.contains($0) }\n                    let copyFilesPhases = pbxProject.copyFilesBuildPhases.filter { buildPhases.contains($0) }\n                    let embedFrameworkPhase = copyFilesPhases.first { $0.dstSubfolderSpec == .frameworks }\n                    let copyBundlesPhase = copyFilesPhases.first { $0.dstSubfolderSpec == .resources }\n\n                    // All targets should have a compile sources phase,\n                    // except for the resourceBundle and sticker pack one\n                    let targetsGeneratingSourcePhases = targets\n                        .filter { ![.bundle, .stickerPack].contains($0.type) }\n                    let sourcesPhases = pbxProject.sourcesBuildPhases\n                    try expect(sourcesPhases.count) == targetsGeneratingSourcePhases.count\n\n                    // ensure only the right resources are copied, no more, no less\n                    if let expectedResourceFiles = expectedResourceFiles[target.name] {\n                        try expect(resourcesPhases.count) == (expectedResourceFiles.isEmpty ? 0 : 1)\n                        if !expectedResourceFiles.isEmpty {\n                            let resourceFiles = (resourcesPhases[0].files ?? [])\n                                .compactMap { $0.file }\n                                .map { $0.nameOrPath }\n                            try expect(Set(resourceFiles)) == expectedResourceFiles\n                        }\n                    } else {\n                        try expect(resourcesPhases.count) == 0\n                    }\n\n                    // ensure only the right things are linked, no more, no less\n                    let expectedLinkedFiles = expectedLinkedFiles[target.name]!\n                    try expect(frameworkPhases.count) == (expectedLinkedFiles.isEmpty ? 0 : 1)\n\n                    if !expectedLinkedFiles.isEmpty {\n                        let linkFrameworks = (frameworkPhases[0].files ?? [])\n                            .compactMap { $0.file?.nameOrPath }\n\n                        let linkPackages = (frameworkPhases[0].files ?? [])\n                            .compactMap { $0.product?.productName }\n\n                        try expect(Array(Set(linkFrameworks + linkPackages)).sorted()) == Array(expectedLinkedFiles).sorted()\n                    }\n\n                    var expectedCopyFilesPhasesCount = 0\n                    // ensure only the right things are embedded, no more, no less\n                    if let expectedEmbeddedFrameworks = expectedEmbeddedFrameworks[target.name], !expectedEmbeddedFrameworks.isEmpty {\n                        expectedCopyFilesPhasesCount += 1\n                        let copyFiles = (embedFrameworkPhase?.files ?? [])\n                            .compactMap { $0.file?.nameOrPath }\n                        try expect(Set(copyFiles)) == expectedEmbeddedFrameworks\n                    }\n\n                    if let expectedBundlesFiles = expectedBundlesFiles[target.name],\n                        target.type != .staticLibrary && target.type != .dynamicLibrary {\n                        expectedCopyFilesPhasesCount += 1\n                        let copyBundles = (copyBundlesPhase?.files ?? [])\n                            .compactMap { $0.file?.nameOrPath }\n                        try expect(Set(copyBundles)) == expectedBundlesFiles\n                    }\n                    try expect(copyFilesPhases.count) == expectedCopyFilesPhasesCount\n                }\n            }\n            \n            $0.it(\"ensures static frameworks are not embedded by default\") {\n                \n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: \"DynamicFramework\"),\n                        Dependency(type: .target, reference: \"DynamicFrameworkNotEmbedded\", embed: false),\n                        Dependency(type: .target, reference: \"StaticFramework\"),\n                        Dependency(type: .target, reference: \"StaticFrameworkExplicitlyEmbedded\", embed: true),\n                        Dependency(type: .target, reference: \"StaticFramework2\"),\n                        Dependency(type: .target, reference: \"StaticFramework2ExplicitlyEmbedded\", embed: true),\n                        Dependency(type: .target, reference: \"StaticLibrary\"),\n                    ]\n                )\n\n                let targets = [\n                    app,\n                    Target(\n                        name: \"DynamicFramework\",\n                        type: .framework,\n                        platform: .iOS\n                    ),\n                    Target(\n                        name: \"DynamicFrameworkNotEmbedded\",\n                        type: .framework,\n                        platform: .iOS\n                    ),\n                    Target(\n                        name: \"StaticFramework\",\n                        type: .framework,\n                        platform: .iOS,\n                        settings: Settings(buildSettings: [\"MACH_O_TYPE\": \"staticlib\"])\n                    ),\n                    Target(\n                        name: \"StaticFrameworkExplicitlyEmbedded\",\n                        type: .framework,\n                        platform: .iOS,\n                        settings: Settings(buildSettings: [\"MACH_O_TYPE\": \"staticlib\"])\n                    ),\n                    Target(\n                        name: \"StaticFramework2\",\n                        type: .staticFramework,\n                        platform: .iOS\n                    ),\n                    Target(\n                        name: \"StaticFramework2ExplicitlyEmbedded\",\n                        type: .staticFramework,\n                        platform: .iOS\n                    ),\n                    Target(\n                        name: \"StaticLibrary\",\n                        type: .staticLibrary,\n                        platform: .iOS\n                    ),\n                ]\n                                \n                let expectedLinkedFiles = Set([\n                    \"DynamicFramework.framework\",\n                    \"DynamicFrameworkNotEmbedded.framework\",\n                    \"StaticFramework.framework\",\n                    \"StaticFrameworkExplicitlyEmbedded.framework\",\n                    \"StaticFramework2.framework\",\n                    \"StaticFramework2ExplicitlyEmbedded.framework\",\n                    \"libStaticLibrary.a\",\n                ])\n                \n                let expectedEmbeddedFrameworks = Set([\n                    \"DynamicFramework.framework\",\n                    \"StaticFrameworkExplicitlyEmbedded.framework\",\n                    \"StaticFramework2ExplicitlyEmbedded.framework\"\n                ])\n                                \n                let project = Project(\n                    name: \"test\",\n                    targets: targets\n                )\n                let pbxProject = try project.generatePbxProj()\n\n                let appTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let buildPhases = appTarget.buildPhases\n                let frameworkPhases = pbxProject.frameworksBuildPhases.filter { buildPhases.contains($0) }\n                let copyFilesPhases = pbxProject.copyFilesBuildPhases.filter { buildPhases.contains($0) }\n                let embedFrameworkPhase = copyFilesPhases.first { $0.dstSubfolderSpec == .frameworks }\n\n                // Ensure all targets are linked\n                let linkFrameworks = (frameworkPhases[0].files ?? []).compactMap { $0.file?.nameOrPath }\n                let linkPackages = (frameworkPhases[0].files ?? []).compactMap { $0.product?.productName }\n                try expect(Set(linkFrameworks + linkPackages)) == expectedLinkedFiles\n\n                // Ensure only dynamic frameworks are embedded (unless there's an explicit override)\n                let embeddedFrameworks = Set((embedFrameworkPhase?.files ?? []).compactMap { $0.file?.nameOrPath })\n                try expect(embeddedFrameworks) == expectedEmbeddedFrameworks\n            }\n\n            $0.it(\"copies files only on install in the Embed Frameworks step\") {\n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .iOS,\n                    // Embeds it's frameworks, so they shouldn't embed in AppTest\n                    dependencies: [\n                        Dependency(type: .framework, reference: \"FrameworkA.framework\"),\n                        Dependency(type: .framework, reference: \"FrameworkB.framework\", embed: false),\n                    ],\n                    onlyCopyFilesOnInstall: true\n                )\n                \n                let project = Project(name: \"test\",targets: [app])\n                let pbxProject = try project.generatePbxProj()\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let buildPhases = nativeTarget.buildPhases\n\n                let embedFrameworksPhase = pbxProject\n                    .copyFilesBuildPhases\n                    .filter { buildPhases.contains($0) }\n                    .first { $0.dstSubfolderSpec == .frameworks }\n\n                let phase = try unwrap(embedFrameworksPhase)\n                try expect(phase.buildActionMask) == PBXProjGenerator.copyFilesActionMask\n                try expect(phase.runOnlyForDeploymentPostprocessing) == true\n            }\n\n            $0.it(\"copies files only on install in the Embed App Extensions step\") {\n                let appExtension = Target(\n                    name: \"AppExtension\",\n                    type: .appExtension,\n                    platform: .tvOS\n                )\n\n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .tvOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: \"AppExtension\")\n                    ],\n                    onlyCopyFilesOnInstall: true\n                )\n\n                let project = Project(name: \"test\", targets: [app, appExtension])\n                let pbxProject = try project.generatePbxProj()\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let buildPhases = nativeTarget.buildPhases\n\n                let embedAppExtensionsPhase = pbxProject\n                    .copyFilesBuildPhases\n                    .filter { buildPhases.contains($0) }\n                    .first { $0.dstSubfolderSpec == .plugins }\n\n                let phase = try unwrap(embedAppExtensionsPhase)\n                try expect(phase.buildActionMask) == PBXProjGenerator.copyFilesActionMask\n                try expect(phase.runOnlyForDeploymentPostprocessing) == true\n            }\n\n            $0.it(\"copies files only on install in the Embed Frameworks and Embed App Extensions steps\") {\n                let appExtension = Target(\n                    name: \"AppExtension\",\n                    type: .appExtension,\n                    platform: .tvOS\n                )\n\n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .tvOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: \"AppExtension\"),\n                        Dependency(type: .framework, reference: \"FrameworkA.framework\"),\n                        Dependency(type: .framework, reference: \"FrameworkB.framework\", embed: false),\n                    ],\n                    onlyCopyFilesOnInstall: true\n                )\n\n                let project = Project(name: \"test\", targets: [app, appExtension])\n                let pbxProject = try project.generatePbxProj()\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let buildPhases = nativeTarget.buildPhases\n\n                let embedFrameworksPhase = pbxProject\n                    .copyFilesBuildPhases\n                    .filter { buildPhases.contains($0) }\n                    .first { $0.dstSubfolderSpec == .frameworks }\n\n                let embedFrameworksPhaseValue = try unwrap(embedFrameworksPhase)\n                try expect(embedFrameworksPhaseValue.buildActionMask) == PBXProjGenerator.copyFilesActionMask\n                try expect(embedFrameworksPhaseValue.runOnlyForDeploymentPostprocessing) == true\n                \n                let embedAppExtensionsPhase = pbxProject\n                    .copyFilesBuildPhases\n                    .filter { buildPhases.contains($0) }\n                    .first { $0.dstSubfolderSpec == .plugins }\n\n                let embedAppExtensionsPhaseValue = try unwrap(embedAppExtensionsPhase)\n                try expect(embedAppExtensionsPhaseValue.buildActionMask) == PBXProjGenerator.copyFilesActionMask\n                try expect(embedAppExtensionsPhaseValue.runOnlyForDeploymentPostprocessing) == true\n            }\n            \n            $0.it(\"sets -ObjC for targets that depend on requiresObjCLinking targets\") {\n                let requiresObjCLinking = Target(\n                    name: \"requiresObjCLinking\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    dependencies: [],\n                    requiresObjCLinking: true\n                )\n                let doesntRequireObjCLinking = Target(\n                    name: \"doesntRequireObjCLinking\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    dependencies: [],\n                    requiresObjCLinking: false\n                )\n                let implicitlyRequiresObjCLinking = Target(\n                    name: \"implicitlyRequiresObjCLinking\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    sources: [TargetSource(path: \"StaticLibrary_ObjC/StaticLibrary_ObjC.m\")],\n                    dependencies: []\n                )\n\n                let framework = Target(\n                    name: \"framework\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: requiresObjCLinking.name, link: false)]\n                )\n\n                let app1 = Target(\n                    name: \"app1\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: requiresObjCLinking.name)]\n                )\n                let app2 = Target(\n                    name: \"app2\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: doesntRequireObjCLinking.name)]\n                )\n                let app3 = Target(\n                    name: \"app3\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: implicitlyRequiresObjCLinking.name)]\n                )\n\n                let targets = [requiresObjCLinking, doesntRequireObjCLinking, implicitlyRequiresObjCLinking, framework, app1, app2, app3]\n\n                let project = Project(\n                    basePath: fixturePath + \"TestProject\",\n                    name: \"test\",\n                    targets: targets,\n                    options: SpecOptions()\n                )\n\n                let pbxProj = try project.generatePbxProj()\n\n                func buildSettings(for target: Target) throws -> BuildSettings {\n                    guard let nativeTarget = pbxProj.targets(named: target.name).first,\n                        let buildConfigList = nativeTarget.buildConfigurationList,\n                        let buildConfig = buildConfigList.buildConfigurations.first else {\n                        throw failure(\"XCBuildConfiguration not found for Target \\(target.name.quoted)\")\n                    }\n\n                    return buildConfig.buildSettings\n                }\n\n                let frameworkOtherLinkerSettings = try buildSettings(for: framework)[\"OTHER_LDFLAGS\"]?.arrayValue ?? []\n                let app1OtherLinkerSettings = try buildSettings(for: app1)[\"OTHER_LDFLAGS\"]?.arrayValue ?? []\n                let app2OtherLinkerSettings = try buildSettings(for: app2)[\"OTHER_LDFLAGS\"]?.arrayValue ?? []\n                let app3OtherLinkerSettings = try buildSettings(for: app3)[\"OTHER_LDFLAGS\"]?.arrayValue ?? []\n\n                try expect(frameworkOtherLinkerSettings.contains(\"-ObjC\")) == false\n                try expect(app1OtherLinkerSettings.contains(\"-ObjC\")) == true\n                try expect(app2OtherLinkerSettings.contains(\"-ObjC\")) == false\n                try expect(app3OtherLinkerSettings.contains(\"-ObjC\")) == true\n            }\n            \n            $0.it(\"filter sources with inferDestinationFiltersByPath\") {\n                let sourceFiles = TargetSource(path: \"App_supportedDestinations/TestResources\", inferDestinationFiltersByPath: true)\n                \n                let target = Target(\n                    name: \"test\",\n                    type: .application,\n                    platform: .auto,\n                    sources: [sourceFiles],\n                    dependencies: []\n                )\n                \n                let project = Project(\n                    basePath: fixturePath + \"TestProject\",\n                    name: \"test\",\n                    targets: [target]\n                )\n                \n                let pbxProject = try project.generatePbxProj()\n                let buildFiles = pbxProject.buildFiles\n                \n                try expect(buildFiles.count) == 8\n                \n                for buildFile in buildFiles {\n                    let name = buildFile.file?.nameOrPath\n                    \n                    if buildFile.platformFilters == [SupportedDestination.iOS.string] &&\n                        (name == \"File_ios.swift\" || name == \"File_A.swift\") {\n                        continue\n                    } else if buildFile.platformFilters == [SupportedDestination.tvOS.string] &&\n                                (name == \"File_tvOs.swift\" || name == \"File_B.swift\") {\n                        continue\n                    } else if buildFile.platformFilters == [SupportedDestination.macOS.string] &&\n                                (name == \"File_macOS.swift\" || name == \"File_C.swift\") {\n                        continue\n                    } else if buildFile.platformFilters == [SupportedDestination.macCatalyst.string] &&\n                                (name == \"File_MACCATALYST.swift\" || name == \"File_D.swift\") {\n                        continue\n                    }\n                    \n                    throw failure(\"Unexpected source file / destinationFilters\")\n                }\n            }\n            \n            $0.it(\"filter sources with destinationFilters\") {\n                let sourceFile1 = TargetSource(path: \"App_supportedDestinations/TestResources/iOs\",\n                                               destinationFilters: [.iOS])\n                let sourceFile2 = TargetSource(path: \"App_supportedDestinations/TestResources/TVOS\",\n                                               destinationFilters: [.tvOS])\n                let sourceFile3 = TargetSource(path: \"App_supportedDestinations/TestResources/macos\",\n                                               destinationFilters: [.macOS, .macCatalyst])\n                let sourceFile4 = TargetSource(path: \"App_supportedDestinations/TestResources/macCatalyst\",\n                                               destinationFilters: [.macOS, .macCatalyst])\n                let sourceFile5 = TargetSource(path: \"App_supportedDestinations/TestResources/File_ios.swift\",\n                                               destinationFilters: [.iOS])\n                let sourceFile6 = TargetSource(path: \"App_supportedDestinations/TestResources/File_tvOs.swift\",\n                                               destinationFilters: [.tvOS])\n                let sourceFile7 = TargetSource(path: \"App_supportedDestinations/TestResources/File_macOS.swift\",\n                                               destinationFilters: [.macOS, .macCatalyst])\n                let sourceFile8 = TargetSource(path: \"App_supportedDestinations/TestResources/File_MACCATALYST.swift\",\n                                               destinationFilters: [.macOS, .macCatalyst])\n                \n                let target = Target(\n                    name: \"test\",\n                    type: .application,\n                    platform: .auto,\n                    sources: [sourceFile1, sourceFile2, sourceFile3, sourceFile4, sourceFile5, sourceFile6, sourceFile7, sourceFile8],\n                    dependencies: []\n                )\n                \n                let project = Project(\n                    basePath: fixturePath + \"TestProject\",\n                    name: \"test\",\n                    targets: [target]\n                )\n                \n                let pbxProject = try project.generatePbxProj()\n                let buildFiles = pbxProject.buildFiles\n                \n                try expect(buildFiles.count) == 8\n                \n                for buildFile in buildFiles {\n                    let name = buildFile.file?.nameOrPath\n                    \n                    if buildFile.platformFilters == [SupportedDestination.iOS.string] &&\n                        (name == \"File_ios.swift\" || name == \"File_A.swift\") {\n                        continue\n                    } else if buildFile.platformFilters == [SupportedDestination.tvOS.string] &&\n                                (name == \"File_tvOs.swift\" || name == \"File_B.swift\") {\n                        continue\n                    } else if buildFile.platformFilters == [SupportedDestination.macOS.string, SupportedDestination.macCatalyst.string] &&\n                                (name == \"File_C.swift\" || name == \"File_D.swift\") {\n                        continue\n                    } else if buildFile.platformFilters == [SupportedDestination.macOS.string, SupportedDestination.macCatalyst.string] &&\n                                (name == \"File_macOS.swift\" || name == \"File_MACCATALYST.swift\") {\n                        continue\n                    }\n                    \n                    throw failure(\"Unexpected source file / destinationFilters\")\n                }\n            }\n            \n            $0.it(\"copies Swift Objective-C Interface Header\") {\n                let swiftStaticLibraryWithHeader = Target(\n                    name: \"swiftStaticLibraryWithHeader\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    sources: [TargetSource(path: \"StaticLibrary_Swift/StaticLibrary.swift\")],\n                    dependencies: []\n                )\n                let swiftStaticLibraryWithoutHeader1 = Target(\n                    name: \"swiftStaticLibraryWithoutHeader1\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    settings: Settings(buildSettings: [\"SWIFT_OBJC_INTERFACE_HEADER_NAME\": \"\"]),\n                    sources: [TargetSource(path: \"StaticLibrary_Swift/StaticLibrary.swift\")],\n                    dependencies: []\n                )\n                let swiftStaticLibraryWithoutHeader2 = Target(\n                    name: \"swiftStaticLibraryWithoutHeader2\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    settings: Settings(buildSettings: [\"SWIFT_INSTALL_OBJC_HEADER\": false]),\n                    sources: [TargetSource(path: \"StaticLibrary_Swift/StaticLibrary.swift\")],\n                    dependencies: []\n                )\n                let swiftStaticLibraryWithoutHeader3 = Target(\n                    name: \"swiftStaticLibraryWithoutHeader3\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    settings: Settings(buildSettings: [\"SWIFT_INSTALL_OBJC_HEADER\": \"NO\"]),\n                    sources: [TargetSource(path: \"StaticLibrary_Swift/StaticLibrary.swift\")],\n                    dependencies: []\n                )\n                let objCStaticLibrary = Target(\n                    name: \"objCStaticLibrary\",\n                    type: .staticLibrary,\n                    platform: .iOS,\n                    sources: [TargetSource(path: \"StaticLibrary_ObjC/StaticLibrary_ObjC.m\")],\n                    dependencies: []\n                )\n\n                let targets = [swiftStaticLibraryWithHeader, swiftStaticLibraryWithoutHeader1, swiftStaticLibraryWithoutHeader2, swiftStaticLibraryWithoutHeader3, objCStaticLibrary]\n\n                let project = Project(\n                    basePath: fixturePath + \"TestProject\",\n                    name: \"test\",\n                    targets: targets,\n                    options: SpecOptions()\n                )\n\n                let pbxProject = try project.generatePbxProj()\n\n                func scriptBuildPhases(target: Target) throws -> [PBXShellScriptBuildPhase] {\n\n                    let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == target.name }))\n                    let buildPhases = nativeTarget.buildPhases\n                    let scriptPhases = buildPhases.compactMap { $0 as? PBXShellScriptBuildPhase }\n                    return scriptPhases\n                }\n\n                let expectedScriptPhase = PBXShellScriptBuildPhase(\n                    name: \"Copy Swift Objective-C Interface Header\",\n                    inputPaths: [\"$(DERIVED_SOURCES_DIR)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\"],\n                    outputPaths: [\"$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_MODULE_NAME)/$(SWIFT_OBJC_INTERFACE_HEADER_NAME)\"],\n                    shellPath: \"/bin/sh\",\n                    shellScript: \"ditto \\\"${SCRIPT_INPUT_FILE_0}\\\" \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\"\n                )\n\n                try expect(scriptBuildPhases(target: swiftStaticLibraryWithHeader)) == [expectedScriptPhase]\n                try expect(scriptBuildPhases(target: swiftStaticLibraryWithoutHeader1)) == []\n                try expect(scriptBuildPhases(target: swiftStaticLibraryWithoutHeader2)) == []\n                try expect(scriptBuildPhases(target: swiftStaticLibraryWithoutHeader3)) == []\n                try expect(scriptBuildPhases(target: objCStaticLibrary)) == []\n            }\n\n            $0.it(\"generates run scripts\") {\n                var scriptSpec = project\n                scriptSpec.targets[0].preBuildScripts = [BuildScript(script: .script(\"script1\"))]\n                scriptSpec.targets[0].postCompileScripts = [BuildScript(script: .script(\"script2\"))]\n                scriptSpec.targets[0].postBuildScripts = [\n                    BuildScript(script: .script(\"script3\")),\n                    BuildScript(script: .script(\"script4\"), discoveredDependencyFile: \"$(DERIVED_FILE_DIR)/target.d\")\n                ]\n                let pbxProject = try scriptSpec.generatePbxProj()\n\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.buildPhases.count >= 4 }))\n                let buildPhases = nativeTarget.buildPhases\n\n                let scripts = pbxProject.shellScriptBuildPhases\n                try expect(scripts.count) == 4\n                let script1 = scripts.first { $0.shellScript == \"script1\" }!\n                let script2 = scripts.first { $0.shellScript == \"script2\" }!\n                let script3 = scripts.first { $0.shellScript == \"script3\" }!\n                let script4 = scripts.first { $0.shellScript == \"script4\" }!\n                try expect(buildPhases.contains(script1)) == true\n                try expect(buildPhases.contains(script2)) == true\n                try expect(buildPhases.contains(script3)) == true\n                try expect(buildPhases.contains(script4)) == true\n                try expect(script1.dependencyFile).beNil()\n                try expect(script2.dependencyFile).beNil()\n                try expect(script3.dependencyFile).beNil()\n                try expect(script4.dependencyFile) == \"$(DERIVED_FILE_DIR)/target.d\"\n            }\n\n            $0.it(\"generates targets with cylical dependencies\") {\n                let target1 = Target(\n                    name: \"target1\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: \"target2\")]\n                )\n                let target2 = Target(\n                    name: \"target2\",\n                    type: .framework,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: \"target1\")]\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [target1, target2]\n                )\n\n                _ = try project.generatePbxProj()\n            }\n\n            $0.it(\"generates build rules\") {\n                var scriptSpec = project\n                scriptSpec.targets[0].buildRules = [\n                    BuildRule(\n                        fileType: .type(\"sourcecode.swift\"),\n                        action: .script(\"do thing\"),\n                        name: \"My Rule\",\n                        outputFiles: [\"file1.swift\", \"file2.swift\"],\n                        outputFilesCompilerFlags: [\"--zee\", \"--bee\"]\n                    ),\n                    BuildRule(\n                        fileType: .pattern(\"*.plist\"),\n                        action: .compilerSpec(\"com.apple.build-tasks.copy-plist-file\")\n                    ),\n                ]\n                let pbxProject = try scriptSpec.generatePbxProj()\n\n                let buildRules = pbxProject.buildRules\n                try expect(buildRules.count) == 2\n                let first = buildRules.first { $0.name == \"My Rule\" }!\n                let second = buildRules.first { $0.name != \"My Rule\" }!\n\n                try expect(first.name) == \"My Rule\"\n                try expect(first.isEditable) == true\n                try expect(first.outputFiles) == [\"file1.swift\", \"file2.swift\"]\n                try expect(first.outputFilesCompilerFlags) == [\"--zee\", \"--bee\"]\n                try expect(first.script) == \"do thing\"\n                try expect(first.fileType) == \"sourcecode.swift\"\n                try expect(first.compilerSpec) == \"com.apple.compilers.proxy.script\"\n                try expect(first.filePatterns).beNil()\n\n                try expect(second.name) == \"Build Rule\"\n                try expect(second.fileType) == \"pattern.proxy\"\n                try expect(second.filePatterns) == \"*.plist\"\n                try expect(second.compilerSpec) == \"com.apple.build-tasks.copy-plist-file\"\n                try expect(second.script).beNil()\n                try expect(second.outputFiles) == []\n                try expect(second.outputFilesCompilerFlags) == []\n            }\n\n            $0.it(\"generates dependency build file settings\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .target, reference: \"MyFramework\"),\n                        Dependency(type: .target, reference: \"MyOptionalFramework\", weakLink: true),\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [app, framework, optionalFramework, uiTest])\n                let pbxProject = try project.generatePbxProj()\n\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                let frameworkBuildFiles = frameworkPhases[0].files ?? []\n                let buildFileSettings = frameworkBuildFiles.map { $0.settings }\n\n                try expect(frameworkBuildFiles.count) == 2\n                try expect(buildFileSettings.compactMap { $0 }.count) == 1\n                try expect(buildFileSettings.compactMap { $0?[\"ATTRIBUTES\"] }.count) == 1\n                try expect(buildFileSettings.compactMap { $0?[\"ATTRIBUTES\"]?.arrayValue }.first) == [\"Weak\"]\n            }\n\n            $0.it(\"generates swift packages\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: [\"ProjectSpec\"]), reference: \"XcodeGen\"),\n                        Dependency(type: .package(products: []), reference: \"Codability\"),\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [app], packages: [\n                    \"XcodeGen\": .remote(url: \"http://github.com/yonaskolb/XcodeGen\", versionRequirement: .branch(\"master\")),\n                    \"Codability\": .remote(url: \"http://github.com/yonaskolb/Codability\", versionRequirement: .exact(\"1.0.0\")),\n                    \"Yams\": .local(path: \"../Yams\", group: nil, excludeFromProject: false),\n                ], options: .init(localPackagesGroup: \"MyPackages\"))\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n\n                let projectSpecDependency = try unwrap(nativeTarget.packageProductDependencies?.first(where: { $0.productName == \"ProjectSpec\" }))\n\n                try expect(projectSpecDependency.package?.name) == \"XcodeGen\"\n                try expect(projectSpecDependency.package?.versionRequirement) == .branch(\"master\")\n\n                let codabilityDependency = try unwrap(nativeTarget.packageProductDependencies?.first(where: { $0.productName == \"Codability\" }))\n\n                try expect(codabilityDependency.package?.name) == \"Codability\"\n                try expect(codabilityDependency.package?.versionRequirement) == .exact(\"1.0.0\")\n\n                let localPackagesGroup = try unwrap(try pbxProject.getMainGroup().children.first(where: { $0.name == \"MyPackages\" }) as? PBXGroup)\n\n                let yamsLocalPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == \"../Yams\" }))\n                try expect(localPackagesGroup.children.contains(yamsLocalPackageFile)) == true\n                try expect(yamsLocalPackageFile.lastKnownFileType) == \"folder\"\n            }\n\n            $0.it(\"generates local swift packages\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: []), reference: \"XcodeGen\"),\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [app], packages: [\"XcodeGen\": .local(path: \"../XcodeGen\", group: nil, excludeFromProject: false)])\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let localPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == \"../XcodeGen\" }))\n                try expect(localPackageFile.lastKnownFileType) == \"folder\"\n                \n                let localPackageReference = try unwrap(pbxProject.rootObject?.localPackages.first)\n                try expect(pbxProject.rootObject?.localPackages.count) == 1\n                try expect(localPackageReference.relativePath) == \"../XcodeGen\"\n\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                guard let frameworkPhase = frameworkPhases.first else {\n                    return XCTFail(\"frameworkPhases should have more than one\")\n                }\n\n                guard let file = frameworkPhase.files?.first else {\n                    return XCTFail(\"frameworkPhase should have file\")\n                }\n\n                try expect(file.product?.productName) == \"XcodeGen\"\n            }\n\n            $0.it(\"excludes local swift packages from generated project if needed\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: [\"XcodeGen\"]), reference: \"XcodeGen\"),\n                    ]\n                )\n\n                let project = Project(\n                    name: \"test\",\n                    targets: [app],\n                    packages: [\n                        \"XcodeGen\": .local(\n                            path: \"../XcodeGen\",\n                            group: nil,\n                            excludeFromProject: true\n                        )\n                    ]\n                )\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let localPackageFile = pbxProject.fileReferences.first(where: { $0.path == \"../XcodeGen\" })\n\n                try expect(localPackageFile).to.beNil()\n                try expect(pbxProject.rootObject?.localPackages.count) == 0\n\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                guard let frameworkPhase = frameworkPhases.first else {\n                    return XCTFail(\"frameworkPhases should have more than one\")\n                }\n\n                guard let file = frameworkPhase.files?.first else {\n                    return XCTFail(\"frameworkPhase should have file\")\n                }\n\n                try expect(file.product?.productName) == \"XcodeGen\"\n            }\n\n            $0.it(\"generates local swift packages with custom xcode path\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: []), reference: \"XcodeGen\"),\n                    ]\n                )\n\n                let customLocalPackageGroup = \"Packages/Feature\"\n                let project = Project(name: \"test\", targets: [app], packages: [\"XcodeGen\": .local(path: \"../XcodeGen\", group: customLocalPackageGroup, excludeFromProject: false)])\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let localPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == \"../XcodeGen\" }))\n                try expect(localPackageFile.lastKnownFileType) == \"folder\"\n\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                let packagesGroup = try unwrap(pbxProject.groups.first(where: { $0.name == \"Packages\" }))\n                let featureGroup = try unwrap(pbxProject.groups.first(where: { $0.name == \"Feature\" }))\n\n                guard featureGroup.parent?.uuid == packagesGroup.uuid else {\n                  return XCTFail(\"Packages group should be parent of Feature group\")\n                }\n\n                guard localPackageFile.parent?.uuid == featureGroup.uuid else {\n                  return XCTFail(\"Packages group should be parent of Feature group\")\n                }\n\n                guard let frameworkPhase = frameworkPhases.first else {\n                    return XCTFail(\"frameworkPhases should have more than one\")\n                }\n\n                guard let file = frameworkPhase.files?.first else {\n                    return XCTFail(\"frameworkPhase should have file\")\n                }\n\n                try expect(file.product?.productName) == \"XcodeGen\"\n            }\n\n            $0.it(\"generates local swift packages at the top level\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: []), reference: \"XcodeGen\"),\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [app], packages: [\"XcodeGen\": .local(path: \"../XcodeGen\", group: \"\", excludeFromProject: false)])\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let localPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == \"../XcodeGen\" }))\n                try expect(localPackageFile.lastKnownFileType) == \"folder\"\n\n                let mainGroup = try pbxProject.getMainGroup()\n\n                try expect(mainGroup.children.contains(localPackageFile)) == true\n\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                guard let frameworkPhase = frameworkPhases.first else {\n                    return XCTFail(\"frameworkPhases should have more than one\")\n                }\n\n                guard let file = frameworkPhase.files?.first else {\n                    return XCTFail(\"frameworkPhase should have file\")\n                }\n\n                try expect(file.product?.productName) == \"XcodeGen\"\n            }\n\n            $0.it(\"generates local swift package group at the top level\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: []), reference: \"XcodeGen\"),\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [app], packages: [\"XcodeGen\": .local(path: \"../XcodeGen\", group: nil, excludeFromProject: false)], options: .init(localPackagesGroup: \"\"))\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let localPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == \"../XcodeGen\" }))\n                try expect(localPackageFile.lastKnownFileType) == \"folder\"\n\n                let mainGroup = try pbxProject.getMainGroup()\n\n                try expect(mainGroup.children.contains(localPackageFile)) == true\n\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                guard let frameworkPhase = frameworkPhases.first else {\n                    return XCTFail(\"frameworkPhases should have more than one\")\n                }\n\n                guard let file = frameworkPhase.files?.first else {\n                    return XCTFail(\"frameworkPhase should have file\")\n                }\n\n                try expect(file.product?.productName) == \"XcodeGen\"\n            }\n\n            $0.it(\"generates info.plist\") {\n                let plist = Plist(path: \"Info.plist\", attributes: [\"UISupportedInterfaceOrientations\": [\"UIInterfaceOrientationPortrait\", \"UIInterfaceOrientationLandscapeLeft\"]])\n                let tempPath = Path.temporary + \"info\"\n                let project = Project(basePath: tempPath, name: \"\", targets: [Target(name: \"\", type: .application, platform: .iOS, info: plist)])\n                let pbxProject = try project.generatePbxProj()\n                let writer = FileWriter(project: project)\n                try writer.writePlists()\n\n                let targetConfig = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n\n                try expect(targetConfig.buildSettings[\"INFOPLIST_FILE\"]?.stringValue) == plist.path\n\n                let infoPlistFile = tempPath + plist.path\n                let data: Data = try infoPlistFile.read()\n                let infoPlist = try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as! [String: Any]\n                let expectedInfoPlist: [String: Any] = [\n                    \"CFBundleIdentifier\": \"$(PRODUCT_BUNDLE_IDENTIFIER)\",\n                    \"CFBundleInfoDictionaryVersion\": \"6.0\",\n                    \"CFBundleName\": \"$(PRODUCT_NAME)\",\n                    \"CFBundleExecutable\": \"$(EXECUTABLE_NAME)\",\n                    \"CFBundleDevelopmentRegion\": \"$(DEVELOPMENT_LANGUAGE)\",\n                    \"CFBundleShortVersionString\": \"1.0\",\n                    \"CFBundleVersion\": \"1\",\n                    \"CFBundlePackageType\": \"APPL\",\n                    \"UISupportedInterfaceOrientations\": [\"UIInterfaceOrientationPortrait\", \"UIInterfaceOrientationLandscapeLeft\"],\n                ]\n\n                try expect(NSDictionary(dictionary: expectedInfoPlist).isEqual(to: infoPlist)).beTrue()\n            }\n\n            $0.it(\"info doesn't override info.plist setting\") {\n                let predefinedPlistPath = \"Predefined.plist\"\n                // generate plist\n                let plist = Plist(path: \"Info.plist\", attributes: [\"UISupportedInterfaceOrientations\": [\"UIInterfaceOrientationPortrait\", \"UIInterfaceOrientationLandscapeLeft\"]])\n                let tempPath = Path.temporary + \"info\"\n                // create project with a predefined plist\n                let project = Project(basePath: tempPath, name: \"\", targets: [Target(name: \"\", type: .application, platform: .iOS, settings: Settings(buildSettings: [\"INFOPLIST_FILE\": .string(predefinedPlistPath)]), info: plist)])\n                let pbxProject = try project.generatePbxProj()\n                let writer = FileWriter(project: project)\n                try writer.writePlists()\n\n                let targetConfig = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n                // generated plist should not be in buildsettings\n                try expect(targetConfig.buildSettings[\"INFOPLIST_FILE\"]?.stringValue) == predefinedPlistPath\n            }\n\n            describe(\"Carthage dependencies\") {\n                $0.context(\"with static dependency\") {\n                    $0.it(\"should set dependencies\") {\n                        let app = Target(\n                            name: \"MyApp\",\n                            type: .application,\n                            platform: .iOS,\n                            dependencies: [\n                                Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: \"MyStaticFramework\"),\n                            ]\n                        )\n                        let project = Project(name: \"test\", targets: [app])\n                        let pbxProject = try project.generatePbxProj()\n\n                        let target = pbxProject.nativeTargets.first!\n                        let configuration = target.buildConfigurationList!.buildConfigurations.first!\n                        try expect(configuration.buildSettings[\"FRAMEWORK_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"$(PROJECT_DIR)/Carthage/Build/iOS/Static\"]\n                        let frameworkBuildPhase = try target.frameworksBuildPhase()\n                        guard let files = frameworkBuildPhase?.files, let file = files.first else {\n                            return XCTFail(\"frameworkBuildPhase should have files\")\n                        }\n                        try expect(files.count) == 1\n                        try expect(file.file?.nameOrPath) == \"MyStaticFramework.framework\"\n\n                        try expect(target.carthageCopyFrameworkBuildPhase).beNil()\n                    }\n                }\n\n                $0.context(\"with mixed dependencies\") {\n                    $0.it(\"should set dependencies\") {\n                        let app = Target(\n                            name: \"MyApp\",\n                            type: .application,\n                            platform: .iOS,\n                            dependencies: [\n                                Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: \"MyDynamicFramework\"),\n                                Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: \"MyStaticFramework\"),\n                            ]\n                        )\n                        let project = Project(name: \"test\", targets: [app])\n                        let pbxProject = try project.generatePbxProj()\n\n                        let target = pbxProject.nativeTargets.first!\n                        let configuration = target.buildConfigurationList!.buildConfigurations.first!\n                        try expect(configuration.buildSettings[\"FRAMEWORK_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"$(PROJECT_DIR)/Carthage/Build/iOS\", \"$(PROJECT_DIR)/Carthage/Build/iOS/Static\"]\n                        let frameworkBuildPhase = try target.frameworksBuildPhase()\n                        guard let files = frameworkBuildPhase?.files else {\n                            return XCTFail(\"frameworkBuildPhase should have files\")\n                        }\n                        try expect(files.count) == 2\n\n                        guard let dynamicFramework = files.first(where: { $0.file?.nameOrPath == \"MyDynamicFramework.framework\" }) else {\n                            return XCTFail(\"Framework Build Phase should have Dynamic Framework\")\n                        }\n                        guard let _ = files.first(where: { $0.file?.nameOrPath == \"MyStaticFramework.framework\" }) else {\n                            return XCTFail(\"Framework Build Phase should have Static Framework\")\n                        }\n\n                        guard let copyCarthagePhase = target.carthageCopyFrameworkBuildPhase else {\n                            return XCTFail(\"Carthage Build Phase should be exist\")\n                        }\n                        try expect(copyCarthagePhase.inputPaths) == [dynamicFramework.file?.fullPath(sourceRoot: Path(\"$(SRCROOT)\"))?.string]\n                        try expect(copyCarthagePhase.outputPaths) == [\"$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/\\(dynamicFramework.file!.path!)\"]\n                    }\n                }\n            }\n\n            $0.it(\"generate info.plist doesn't generate CFBundleExecutable for targets with type bundle\") {\n                let plist = Plist(path: \"Info.plist\", attributes: [:])\n                let tempPath = Path.temporary + \"info\"\n                let project = Project(basePath: tempPath, name: \"\", targets: [Target(name: \"\", type: .bundle, platform: .iOS, info: plist)])\n                let pbxProject = try project.generatePbxProj()\n                let writer = FileWriter(project: project)\n                try writer.writePlists()\n\n                let targetConfig = try unwrap(pbxProject.nativeTargets.first?.buildConfigurationList?.buildConfigurations.first)\n\n                try expect(targetConfig.buildSettings[\"INFOPLIST_FILE\"]?.stringValue) == plist.path\n\n                let infoPlistFile = tempPath + plist.path\n                let data: Data = try infoPlistFile.read()\n                let infoPlist = try PropertyListSerialization.propertyList(from: data, options: [], format: nil) as! [String: Any]\n                let expectedInfoPlist: [String: Any] = [\n                    \"CFBundleIdentifier\": \"$(PRODUCT_BUNDLE_IDENTIFIER)\",\n                    \"CFBundleInfoDictionaryVersion\": \"6.0\",\n                    \"CFBundleName\": \"$(PRODUCT_NAME)\",\n                    \"CFBundleDevelopmentRegion\": \"$(DEVELOPMENT_LANGUAGE)\",\n                    \"CFBundleShortVersionString\": \"1.0\",\n                    \"CFBundleVersion\": \"1\",\n                    \"CFBundlePackageType\": \"BNDL\",\n                ]\n\n                try expect(NSDictionary(dictionary: expectedInfoPlist).isEqual(to: infoPlist)).beTrue()\n            }\n\n            $0.it(\"generates local swift packages with multiple products\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: [\"FooDomain\", \"FooUI\"]), reference: \"FooFeature\")\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [app], packages: [\n                    \"FooFeature\": .local(path: \"../FooFeature\", group: nil, excludeFromProject: false)\n                ], options: .init(localPackagesGroup: \"MyPackages\"))\n\n                let pbxProject = try project.generatePbxProj(specValidate: false)\n                let nativeTarget = try unwrap(pbxProject.nativeTargets.first(where: { $0.name == app.name }))\n                let localPackageFile = try unwrap(pbxProject.fileReferences.first(where: { $0.path == \"../FooFeature\" }))\n                try expect(localPackageFile.lastKnownFileType) == \"folder\"\n\n                let frameworkPhases = nativeTarget.buildPhases.compactMap { $0 as? PBXFrameworksBuildPhase }\n\n                guard let frameworkPhase = frameworkPhases.first else {\n                    return XCTFail(\"frameworkPhases should have more than one\")\n                }\n\n                guard let files = frameworkPhase.files, files.count == 2 else {\n                    return XCTFail(\"frameworkPhase should have exactly two files\")\n                }\n\n                let productNames = files.compactMap(\\.product?.productName)\n                try expect(productNames).contains { $0 == \"FooDomain\" }\n                try expect(productNames).contains { $0 == \"FooUI\" }\n            }\n        }\n    }\n\n    func testGenerateXcodeProjectWithDestination() throws {\n        let groupName = \"App_iOS\"\n        let sourceDirectory = fixturePath + \"TestProject\" + groupName\n        let frameworkWithSources = Target(\n            name: \"MyFramework\",\n            type: .framework,\n            platform: .iOS,\n            sources: [TargetSource(path: sourceDirectory.string)]\n        )\n\n        describe(\"generateXcodeProject\") {\n            $0.context(\"without projectDirectory\") {\n                $0.it(\"generate groups\") {\n                    let project = Project(name: \"test\", targets: [frameworkWithSources])\n                    let generator = ProjectGenerator(project: project)\n                    let generatedProject = try generator.generateXcodeProject(userName: \"someUser\")\n                    let group = generatedProject.pbxproj.groups.first(where: { $0.nameOrPath == groupName })\n                    try expect(group?.path) == \"App_iOS\"\n                }\n            }\n\n            $0.context(\"with projectDirectory\") {\n                $0.it(\"generate groups\") {\n                    let destinationPath = fixturePath\n                    let project = Project(name: \"test\", targets: [frameworkWithSources])\n                    let generator = ProjectGenerator(project: project)\n                    let generatedProject = try generator.generateXcodeProject(in: destinationPath, userName: \"someUser\")\n                    let group = generatedProject.pbxproj.groups.first(where: { $0.nameOrPath == groupName })\n                    try expect(group?.path) == \"TestProject/App_iOS\"\n                }\n\n                $0.it(\"generate Info.plist\") {\n                    let destinationPath = fixturePath\n                    let project = Project(name: \"test\", targets: [frameworkWithSources])\n                    let generator = ProjectGenerator(project: project)\n                    let generatedProject = try generator.generateXcodeProject(in: destinationPath, userName: \"someUser\")\n                    let plists = generatedProject.pbxproj.buildConfigurations.compactMap { $0.buildSettings[\"INFOPLIST_FILE\"]?.stringValue }\n                    try expect(plists.count) == 2\n                    for plist in plists {\n                        try expect(plist) == \"TestProject/App_iOS/Info.plist\"\n                    }\n                }\n            }\n\n            describe(\"Carthage dependencies\") {\n                $0.context(\"with static dependency\") {\n                    $0.it(\"should set dependencies\") {\n                        let app = Target(\n                            name: \"MyApp\",\n                            type: .application,\n                            platform: .iOS,\n                            dependencies: [\n                                Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: \"MyStaticFramework\"),\n                            ]\n                        )\n                        let project = Project(name: \"test\", targets: [app])\n                        let pbxProject = try project.generatePbxProj()\n\n                        let target = pbxProject.nativeTargets.first!\n                        let configuration = target.buildConfigurationList!.buildConfigurations.first!\n                        try expect(configuration.buildSettings[\"FRAMEWORK_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"$(PROJECT_DIR)/Carthage/Build/iOS/Static\"]\n                        let frameworkBuildPhase = try target.frameworksBuildPhase()\n                        guard let files = frameworkBuildPhase?.files, let file = files.first else {\n                            return XCTFail(\"frameworkBuildPhase should have files\")\n                        }\n                        try expect(files.count) == 1\n                        try expect(file.file?.nameOrPath) == \"MyStaticFramework.framework\"\n\n                        try expect(target.carthageCopyFrameworkBuildPhase).beNil()\n                    }\n                }\n\n                $0.context(\"with mixed dependencies\") {\n                    $0.it(\"should set dependencies\") {\n                        let app = Target(\n                            name: \"MyApp\",\n                            type: .application,\n                            platform: .iOS,\n                            dependencies: [\n                                Dependency(type: .carthage(findFrameworks: true, linkType: .dynamic), reference: \"MyDynamicFramework\"),\n                                Dependency(type: .carthage(findFrameworks: true, linkType: .static), reference: \"MyStaticFramework\"),\n                            ]\n                        )\n                        let project = Project(name: \"test\", targets: [app])\n                        let pbxProject = try project.generatePbxProj()\n\n                        let target = pbxProject.nativeTargets.first!\n                        let configuration = target.buildConfigurationList!.buildConfigurations.first!\n\n                        try expect(configuration.buildSettings[\"FRAMEWORK_SEARCH_PATHS\"]?.arrayValue) == [\"$(inherited)\", \"$(PROJECT_DIR)/Carthage/Build/iOS\", \"$(PROJECT_DIR)/Carthage/Build/iOS/Static\"]\n\n                        let frameworkBuildPhase = try target.frameworksBuildPhase()\n                        guard let files = frameworkBuildPhase?.files else {\n                            return XCTFail(\"frameworkBuildPhase should have files\")\n                        }\n                        try expect(files.count) == 2\n\n                        guard let dynamicFramework = files.first(where: { $0.file?.nameOrPath == \"MyDynamicFramework.framework\" }) else {\n                            return XCTFail(\"Framework Build Phase should have Dynamic Framework\")\n                        }\n                        guard let _ = files.first(where: { $0.file?.nameOrPath == \"MyStaticFramework.framework\" }) else {\n                            return XCTFail(\"Framework Build Phase should have Static Framework\")\n                        }\n\n                        guard let copyCarthagePhase = target.carthageCopyFrameworkBuildPhase else {\n                            return XCTFail(\"Carthage Build Phase should be exist\")\n                        }\n                        try expect(copyCarthagePhase.inputPaths) == [dynamicFramework.file?.fullPath(sourceRoot: Path(\"$(SRCROOT)\"))?.string]\n                        try expect(copyCarthagePhase.outputPaths) == [\"$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/\\(dynamicFramework.file!.path!)\"]\n                    }\n                }\n            }\n        }\n    }\n    \n    func testGenerateXcodeProjectWithPlatformFilteredDependencies() throws {\n        \n        describe(\"generateXcodeProject with destinationFilters\") {\n            \n            func generateProjectForApp(withDependencies: [Dependency], targets: [Target], packages: [String: SwiftPackage] = [:]) throws -> PBXProj {\n                \n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: withDependencies\n                )\n                \n                let project = Project(\n                    name: \"test\",\n                    targets: targets + [app],\n                    packages: packages\n                )\n                \n                return try project.generatePbxProj()\n            }\n            \n            func expectLinkedDependecies(_ expectedLinkedFiles: [String: [String]], in project: PBXProj) throws {\n                let buildPhases = project.buildPhases\n                let frameworkPhases = project.frameworksBuildPhases.filter { buildPhases.contains($0) }\n                \n                var linkedFiles: [String: [String]] = [:]\n                \n                for link in frameworkPhases[0].files ?? [] {\n                    if let name = link.file?.nameOrPath ?? link.product?.productName  {\n                        linkedFiles[name] = link.platformFilters\n                    }\n                }\n                \n                try expect(linkedFiles) == expectedLinkedFiles\n            }\n            \n            func expectCopiedBundles(_ expectedCopiedBundleFiles: [String: [String]], in project: PBXProj) throws {\n                let buildPhases = project.buildPhases\n                let copyBundlesPhase = project.copyFilesBuildPhases.filter { buildPhases.contains($0) }\n                \n                var copiedFiles: [String: [String]] = [:]\n                \n                for copy in copyBundlesPhase[0].files ?? [] {\n                    if let name = copy.file?.nameOrPath {\n                        copiedFiles[name] = copy.platformFilters\n                    }\n                }\n                \n                try expect(copiedFiles) == expectedCopiedBundleFiles\n            }\n            \n            $0.it(\"target dependencies\") {\n                \n                let frameworkA = Target(\n                    name: \"frameworkA\",\n                    type: .framework,\n                    platform: .iOS\n                )\n                \n                let frameworkB = Target(\n                    name: \"frameworkB\",\n                    type: .framework,\n                    platform: .iOS\n                )\n                \n                let expectedLinkedFiles = [\n                    \"frameworkA.framework\": [SupportedDestination.iOS.string],\n                    \"frameworkB.framework\": [SupportedDestination.iOS.string, SupportedDestination.tvOS.string]\n                ]\n                \n                // given\n                let dependencies = [\n                    Dependency(type: .target, reference: frameworkA.name, destinationFilters: [.iOS]),\n                    Dependency(type: .target, reference: frameworkB.name, destinationFilters: [.iOS, .tvOS]),\n                ]\n                \n                // when\n                let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                \n                // then ensure that everything is linked\n                try expectLinkedDependecies(expectedLinkedFiles, in: pbxProject)\n            }\n            \n            $0.it(\"framework dependencies\") {\n                \n                let expectedLinkedFiles = [\n                    \"frameworkA.framework\": [SupportedDestination.iOS.string],\n                    \"frameworkB.framework\": [SupportedDestination.iOS.string, SupportedDestination.tvOS.string]\n                ]\n                \n                // given\n                let dependencies = [\n                    Dependency(type: .framework, reference: \"frameworkA.framework\", destinationFilters: [.iOS]),\n                    Dependency(type: .framework, reference: \"frameworkB.framework\", destinationFilters: [.iOS, .tvOS]),\n                ]\n                \n                // when\n                let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                \n                // then ensure that everything is linked\n                try expectLinkedDependecies(expectedLinkedFiles, in: pbxProject)\n            }\n            \n            $0.it(\"carthage dependencies\") {\n                \n                let expectedLinkedFiles = [\n                    \"frameworkA.framework\": [SupportedDestination.iOS.string],\n                    \"frameworkB.framework\": [SupportedDestination.iOS.string, SupportedDestination.tvOS.string]\n                ]\n                \n                // given\n                let dependencies = [\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"frameworkA.framework\", destinationFilters: [.iOS]),\n                    Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"frameworkB.framework\", destinationFilters: [.iOS, .tvOS]),\n                ]\n                \n                // when\n                let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                \n                // then ensure that everything is linked\n                try expectLinkedDependecies(expectedLinkedFiles, in: pbxProject)\n            }\n            \n            $0.it(\"sdk dependencies\") {\n                \n                let expectedLinkedFiles = [\n                    \"sdkA.framework\": [SupportedDestination.iOS.string],\n                    \"sdkB.framework\": [SupportedDestination.iOS.string, SupportedDestination.tvOS.string]\n                ]\n                \n                // given\n                let dependencies = [\n                    Dependency(type: .sdk(root: nil), reference: \"sdkA.framework\", destinationFilters: [.iOS]),\n                    Dependency(type: .sdk(root: nil), reference: \"sdkB.framework\", destinationFilters: [.iOS, .tvOS]),\n                ]\n                \n                // when\n                let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                \n                // then ensure that everything is linked\n                try expectLinkedDependecies(expectedLinkedFiles, in: pbxProject)\n            }\n            \n            $0.it(\"package dependencies\") {\n                \n                let packages: [String: SwiftPackage] = [\n                    \"RxSwift\": .remote(url: \"https://github.com/ReactiveX/RxSwift\", versionRequirement: .upToNextMajorVersion(\"5.1.1\")),\n                ]\n                \n                let expectedLinkedFiles = [\n                    \"RxSwift\": [SupportedDestination.iOS.string],\n                    \"RxCocoa\": [SupportedDestination.iOS.string, SupportedDestination.tvOS.string]\n                ]\n                \n                // given\n                let dependencies = [\n                    Dependency(type: .package(products: [\"RxSwift\"]), reference: \"RxSwift\", destinationFilters: [.iOS]),\n                    Dependency(type: .package(products: [\"RxCocoa\"]), reference: \"RxSwift\", destinationFilters: [.iOS, .tvOS]),\n                ]\n                \n                // when\n                let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [], packages: packages)\n                \n                // then ensure that everything is linked\n                try expectLinkedDependecies(expectedLinkedFiles, in: pbxProject)\n            }\n            \n            $0.it(\"bundle dependencies\") {\n                \n                let expectedCopiedBundleFiles = [\n                    \"bundleA.bundle\": [SupportedDestination.iOS.string],\n                    \"bundleB.bundle\": [SupportedDestination.iOS.string, SupportedDestination.tvOS.string]\n                ]\n                \n                // given\n                let dependencies = [\n                    Dependency(type: .bundle, reference: \"bundleA.bundle\", destinationFilters: [.iOS]),\n                    Dependency(type: .bundle, reference: \"bundleB.bundle\", destinationFilters: [.iOS, .tvOS]),\n                ]\n                \n                // when\n                let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                \n                // then ensure that everything is linked\n                try expectCopiedBundles(expectedCopiedBundleFiles, in: pbxProject)\n            }\n        }\n    }\n    \n    func testGenerateXcodeProjectWithCustomDependencyDestinations() throws {\n        \n        describe(\"generateXcodeProject\") {\n            \n            func generateProjectForApp(withDependencies: [Dependency], targets: [Target], packages: [String: SwiftPackage] = [:]) throws -> PBXProj {\n                \n                let app = Target(\n                    name: \"App\",\n                    type: .application,\n                    platform: .macOS,\n                    dependencies: withDependencies\n                )\n                \n                let project = Project(\n                    name: \"test\",\n                    targets: targets + [app],\n                    packages: packages\n                )\n\n                return try project.generatePbxProj()\n            }\n            \n            func expectCopyPhase(in project:PBXProj, withFilePaths: [String]? = nil, withProductPaths: [String]? = nil, toSubFolder subfolder: PBXCopyFilesBuildPhase.SubFolder, dstPath: String? = nil) throws {\n                \n                let phases = project.copyFilesBuildPhases\n                try expect(phases.count) == 1\n                let phase = phases.first!\n                try expect(phase.dstSubfolderSpec) == subfolder\n                try expect(phase.dstPath) == dstPath\n                if let paths = withFilePaths {\n                    try expect(phase.files?.count) == paths.count\n                    let filePaths = phase.files!.map { $0.file!.path }\n                    try expect(filePaths) == paths\n                }\n                if let paths = withProductPaths {\n                    try expect(phase.files?.count) == paths.count\n                    let filePaths = phase.files!.map { $0.product!.productName }\n                    try expect(filePaths) == paths\n                }\n            }\n            \n            $0.context(\"with target dependencies\") {\n                $0.context(\"application\") {\n                    \n                    let appA = Target(\n                        name: \"appA\",\n                        type: .application,\n                        platform: .macOS\n                    )\n                    let appB = Target(\n                        name: \"appB\",\n                        type: .application,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true),\n                            Dependency(type: .target, reference: appB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [ appA, appB ])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"appA.app\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"framework\") {\n                    \n                    let frameworkA = Target(\n                        name: \"frameworkA\",\n                        type: .framework,\n                        platform: .macOS\n                    )\n                    let frameworkB = Target(\n                        name: \"frameworkB\",\n                        type: .framework,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into frameworks without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: frameworkA.name, embed: true),\n                            Dependency(type: .target, reference: frameworkB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .frameworks, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: frameworkA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: frameworkB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"staticFramework\") {\n                    \n                    let frameworkA = Target(\n                        name: \"frameworkA\",\n                        type: .staticFramework,\n                        platform: .macOS\n                    )\n                    let frameworkB = Target(\n                        name: \"frameworkB\",\n                        type: .staticFramework,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into frameworks without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: frameworkA.name, embed: true),\n                            Dependency(type: .target, reference: frameworkB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .frameworks, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: frameworkA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: frameworkB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"xcFramework\") {\n                    \n                    let frameworkA = Target(\n                        name: \"frameworkA\",\n                        type: .xcFramework,\n                        platform: .macOS\n                    )\n                    let frameworkB = Target(\n                        name: \"frameworkB\",\n                        type: .xcFramework,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: frameworkA.name, embed: true),\n                            Dependency(type: .target, reference: frameworkB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: frameworkA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: frameworkB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [frameworkA, frameworkB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.xcframework\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"Dynamic Library\") {\n                    \n                    let libraryA = Target(\n                        name: \"libraryA\",\n                        type: .dynamicLibrary,\n                        platform: .macOS\n                    )\n                    let libraryB = Target(\n                        name: \"libraryB\",\n                        type: .dynamicLibrary,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: libraryA.name, embed: true),\n                            Dependency(type: .target, reference: libraryB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: libraryA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: libraryB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"libraryA.dylib\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"Static Library\") {\n                    \n                    let libraryA = Target(\n                        name: \"libraryA\",\n                        type: .staticLibrary,\n                        platform: .macOS\n                    )\n                    let libraryB = Target(\n                        name: \"libraryB\",\n                        type: .staticLibrary,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: libraryA.name, embed: true),\n                            Dependency(type: .target, reference: libraryB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them to custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: libraryA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: libraryB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"liblibraryA.a\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"bundle\") {\n                    \n                    let bundleA = Target(\n                        name: \"bundleA\",\n                        type: .bundle,\n                        platform: .macOS\n                    )\n                    let bundleB = Target(\n                        name: \"bundleB\",\n                        type: .bundle,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true),\n                            Dependency(type: .target, reference: bundleB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"bundleA.bundle\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"unitTestBundle\") {\n                    \n                    let bundleA = Target(\n                        name: \"bundleA\",\n                        type: .unitTestBundle,\n                        platform: .macOS\n                    )\n                    let bundleB = Target(\n                        name: \"bundleB\",\n                        type: .unitTestBundle,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true),\n                            Dependency(type: .target, reference: bundleB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"bundleA.xctest\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n            \n                $0.context(\"uitTestBundle\") {\n                    \n                    let bundleA = Target(\n                        name: \"bundleA\",\n                        type: .uiTestBundle,\n                        platform: .macOS\n                    )\n                    let bundleB = Target(\n                        name: \"bundleB\",\n                        type: .uiTestBundle,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true),\n                            Dependency(type: .target, reference: bundleB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"bundleA.xctest\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"appExtension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .appExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .appExtension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .executables, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .executables, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .executables, dstPath: \"test\")\n                    }\n                }\n\n                $0.context(\"extensionKit\") {\n\n                    let extA = Target(\n                        name: \"extA\",\n                        type: .extensionKitExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .extensionKitExtension,\n                        platform: .macOS\n                    )\n\n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n\n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n\n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .productsDirectory, dstPath: \"$(EXTENSIONS_FOLDER_PATH)\")\n                    }\n\n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n\n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .productsDirectory, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .productsDirectory, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n\n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .productsDirectory, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"commandLineTool\") {\n                    \n                    let toolA = Target(\n                        name: \"toolA\",\n                        type: .commandLineTool,\n                        platform: .macOS\n                    )\n                    let toolB = Target(\n                        name: \"toolB\",\n                        type: .commandLineTool,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: toolA.name, embed: true),\n                            Dependency(type: .target, reference: toolB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [toolA, toolB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: toolA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: toolB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [toolA, toolB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"toolA\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"watchApp\") {\n                    \n                    let appA = Target(\n                        name: \"appA\",\n                        type: .watchApp,\n                        platform: .macOS\n                    )\n                    let appB = Target(\n                        name: \"appB\",\n                        type: .watchApp,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true),\n                            Dependency(type: .target, reference: appB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"appA.app\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"watch2App\") {\n                    \n                    let appA = Target(\n                        name: \"appA\",\n                        type: .watch2App,\n                        platform: .macOS\n                    )\n                    let appB = Target(\n                        name: \"appB\",\n                        type: .watch2App,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true),\n                            Dependency(type: .target, reference: appB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"appA.app\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"watch2AppContainer\") {\n                    \n                    let appA = Target(\n                        name: \"appA\",\n                        type: .watch2AppContainer,\n                        platform: .macOS\n                    )\n                    let appB = Target(\n                        name: \"appB\",\n                        type: .watch2AppContainer,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true),\n                            Dependency(type: .target, reference: appB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"appA.app\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"watchExtension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .watchExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .watchExtension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"watch2Extension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .watch2Extension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .watch2Extension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"tvExtension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .tvExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .tvExtension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"messagesApplication\") {\n                    \n                    let appA = Target(\n                        name: \"appA\",\n                        type: .messagesApplication,\n                        platform: .macOS\n                    )\n                    let appB = Target(\n                        name: \"appB\",\n                        type: .messagesApplication,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true),\n                            Dependency(type: .target, reference: appB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: appA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: appB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [appA, appB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"appA.app\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"messagesExtension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .messagesExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .messagesExtension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"stickerPack\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .stickerPack,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .stickerPack,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"xpcService\") {\n                    \n                    let xpcA = Target(\n                        name: \"xpcA\",\n                        type: .xpcService,\n                        platform: .macOS\n                    )\n                    let xpcB = Target(\n                        name: \"xpcB\",\n                        type: .xpcService,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: xpcA.name, embed: true),\n                            Dependency(type: .target, reference: xpcB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [xpcA, xpcB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"xpcA.xpc\"], toSubFolder: .productsDirectory, dstPath: \"$(CONTENTS_FOLDER_PATH)/XPCServices\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: xpcA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: xpcB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [xpcA, xpcB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"xpcA.xpc\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"ocUnitTestBundle\") {\n                    \n                    let bundleA = Target(\n                        name: \"bundleA\",\n                        type: .ocUnitTestBundle,\n                        platform: .macOS\n                    )\n                    let bundleB = Target(\n                        name: \"bundleB\",\n                        type: .ocUnitTestBundle,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true),\n                            Dependency(type: .target, reference: bundleB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: bundleA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: bundleB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [bundleA, bundleB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"bundleA.octest\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"xcodeExtension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .xcodeExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .xcodeExtension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"instrumentsPackage\") {\n                    \n                    let pkgA = Target(\n                        name: \"pkgA\",\n                        type: .instrumentsPackage,\n                        platform: .macOS\n                    )\n                    let pkgB = Target(\n                        name: \"pkgB\",\n                        type: .instrumentsPackage,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: pkgA.name, embed: true),\n                            Dependency(type: .target, reference: pkgB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [pkgA, pkgB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: pkgA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: pkgB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [pkgA, pkgB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"pkgA.instrpkg\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"intentsServiceExtension\") {\n                    \n                    let extA = Target(\n                        name: \"extA\",\n                        type: .intentsServiceExtension,\n                        platform: .macOS\n                    )\n                    let extB = Target(\n                        name: \"extB\",\n                        type: .intentsServiceExtension,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"embeds them into plugins without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true),\n                            Dependency(type: .target, reference: extB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .plugins, dstPath: \"\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: extA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: extB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .frameworks, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [extA, extB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"extA.appex\"], toSubFolder: .frameworks, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"appClip\") {\n                    \n                    let clipA = Target(\n                        name: \"clipA\",\n                        type: .onDemandInstallCapableApplication,\n                        platform: .macOS\n                    )\n                    let clipB = Target(\n                        name: \"clipB\",\n                        type: .onDemandInstallCapableApplication,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does embed them into products directory without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: clipA.name, embed: true),\n                            Dependency(type: .target, reference: clipB.name, embed: false),\n                        ]\n\n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [clipA, clipB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"clipA.app\"], toSubFolder: .productsDirectory, dstPath: \"$(CONTENTS_FOLDER_PATH)/AppClips\")\n                    }\n                    \n                    $0.it(\"embeds them into custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: clipA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: clipB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [clipA, clipB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"clipA.app\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n                \n                $0.context(\"Metal Library\") {\n                    \n                    let libraryA = Target(\n                        name: \"libraryA\",\n                        type: .metalLibrary,\n                        platform: .macOS\n                    )\n                    let libraryB = Target(\n                        name: \"libraryB\",\n                        type: .metalLibrary,\n                        platform: .macOS\n                    )\n                    \n                    $0.it(\"does not embed them without copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: libraryA.name, embed: true),\n                            Dependency(type: .target, reference: libraryB.name, embed: false),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])\n                        \n                        // then\n                        try expect(pbxProject.copyFilesBuildPhases.count) == 0\n                    }\n                    \n                    $0.it(\"embeds them to custom location with copy phase spec\") {\n                        \n                        // given\n                        let dependencies = [\n                            Dependency(type: .target, reference: libraryA.name, embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                            Dependency(type: .target, reference: libraryB.name, embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        ]\n                        \n                        // when\n                        let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [libraryA, libraryB])\n                        \n                        // then\n                        try expectCopyPhase(in: pbxProject, withFilePaths: [\"libraryA.metallib\"], toSubFolder: .plugins, dstPath: \"test\")\n                    }\n                }\n            }\n            \n            $0.context(\"with framework dependencies\") {\n                $0.it(\"embeds them into frameworks without copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .framework, reference: \"frameworkA.framework\", embed: true),\n                        Dependency(type: .framework, reference: \"frameworkB.framework\", embed: false),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .frameworks, dstPath: \"\")\n                }\n                \n                $0.it(\"embeds them into custom location with copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .framework, reference: \"frameworkA.framework\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        Dependency(type: .framework, reference: \"frameworkB.framework\", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .plugins, dstPath: \"test\")\n                }\n                \n                $0.it(\"generates single copy phase for multiple frameworks with same copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .framework, reference: \"frameworkA.framework\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        Dependency(type: .framework, reference: \"frameworkB.framework\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\", \"frameworkB.framework\"], toSubFolder: .plugins, dstPath: \"test\")\n                }\n            }\n            \n            $0.context(\"with sdk dependencies\") {\n                \n                $0.it(\"embeds them into frameworks without copy phase spec\") {\n\n                    // given\n                    let dependencies = [\n                        Dependency(type: .sdk(root: nil), reference: \"sdkA.framework\", embed: true),\n                        Dependency(type: .sdk(root: nil), reference: \"sdkB.framework\", embed: false),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"System/Library/Frameworks/sdkA.framework\"], toSubFolder: .frameworks, dstPath: \"\")\n                }\n                \n                $0.it(\"embeds them into custom location with copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .sdk(root: nil), reference: \"sdkA.framework\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        Dependency(type: .sdk(root: nil), reference: \"sdkB.framework\", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"System/Library/Frameworks/sdkA.framework\"], toSubFolder: .plugins, dstPath: \"test\")\n                }\n            }\n            \n            $0.context(\"with package dependencies\") {\n                \n                let packages: [String: SwiftPackage] = [\n                    \"RxSwift\": .remote(url: \"https://github.com/ReactiveX/RxSwift\", versionRequirement: .upToNextMajorVersion(\"5.1.1\")),\n                ]\n                \n                $0.it(\"embeds them into frameworks without copy phase spec\") {\n\n                    // given\n                    let dependencies = [\n                        Dependency(type: .package(products: [\"RxSwift\"]), reference: \"RxSwift\", embed: true),\n                        Dependency(type: .package(products: [\"RxCocoa\"]), reference: \"RxSwift\", embed: false),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [], packages: packages)\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withProductPaths: [\"RxSwift\"], toSubFolder: .frameworks, dstPath: \"\")\n                }\n                \n                $0.it(\"embeds them into custom location with copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .package(products: [\"RxSwift\"]), reference: \"RxSwift\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        Dependency(type: .package(products: [\"RxCocoa\"]), reference: \"RxSwift\", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [], packages: packages)\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withProductPaths: [\"RxSwift\"], toSubFolder: .plugins, dstPath: \"test\")\n                }\n            }\n            \n            $0.context(\"with carthage dependencies\") {\n                \n                $0.it(\"embeds them into frameworks without copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"frameworkA.framework\", embed: true),\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"frameworkB.framework\", embed: false),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .frameworks, dstPath: \"\")\n                }\n                \n                $0.it(\"embeds them into custom location with copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"frameworkA.framework\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        Dependency(type: .carthage(findFrameworks: false, linkType: .static), reference: \"frameworkB.framework\", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"frameworkA.framework\"], toSubFolder: .plugins, dstPath: \"test\")\n                }\n            }\n            \n            $0.context(\"with bundle dependencies\") {\n                $0.it(\"embeds them into resources without copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .bundle, reference: \"bundleA.bundle\", embed: true),\n                        Dependency(type: .bundle, reference: \"bundleB.bundle\", embed: false),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    /// XcodeGen ignores embed: false for bundles\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"bundleA.bundle\", \"bundleB.bundle\"], toSubFolder: .resources)\n                }\n                \n                $0.it(\"ignores custom copy phase spec\") {\n                    \n                    // given\n                    let dependencies = [\n                        Dependency(type: .bundle, reference: \"bundleA.bundle\", embed: true, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                        Dependency(type: .bundle, reference: \"bundleB.bundle\", embed: false, copyPhase: BuildPhaseSpec.CopyFilesSettings(destination: .plugins, subpath: \"test\", phaseOrder: .postCompile)),\n                    ]\n                    \n                    // when\n                    let pbxProject = try generateProjectForApp(withDependencies: dependencies, targets: [])\n                    \n                    // then\n                    /// XcodeGen ignores embed: false for bundles\n                    try expectCopyPhase(in: pbxProject, withFilePaths: [\"bundleA.bundle\", \"bundleB.bundle\"], toSubFolder: .resources)\n                }\n            }\n        }\n    }\n}\n\nprivate extension PBXTarget {\n    var carthageCopyFrameworkBuildPhase: PBXShellScriptBuildPhase? {\n        buildPhases.first(where: { $0.name() == \"Carthage\" }) as? PBXShellScriptBuildPhase\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenKitTests/SchemeGeneratorTests.swift",
    "content": "import PathKit\nimport ProjectSpec\nimport Spectre\nimport XcodeGenKit\nimport XcodeProj\nimport XCTest\nimport Yams\nimport TestSupport\n\nprivate let app = Target(\n    name: \"MyApp\",\n    type: .application,\n    platform: .iOS,\n    dependencies: [Dependency(type: .target, reference: \"MyFramework\")]\n)\n\nprivate let framework = Target(\n    name: \"MyFramework\",\n    type: .framework,\n    platform: .iOS\n)\n\nprivate let frameworkTest = Target(\n    name: \"MyFrameworkTests\",\n    type: .unitTestBundle,\n    platform: .iOS\n)\n\nprivate let optionalFramework = Target(\n    name: \"MyOptionalFramework\",\n    type: .framework,\n    platform: .iOS\n)\n\nprivate let uiTest = Target(\n    name: \"MyAppUITests\",\n    type: .uiTestBundle,\n    platform: .iOS,\n    dependencies: [Dependency(type: .target, reference: \"MyApp\")]\n)\n\nclass SchemeGeneratorTests: XCTestCase {\n\n    func testSchemes() throws {\n        try skipIfNecessary()\n        describe {\n\n            let buildTarget = Scheme.BuildTarget(target: .local(app.name))\n            $0.it(\"generates scheme\") {\n                let preAction = Scheme.ExecutionAction(name: \"Script\", script: \"echo Starting\", settingsTarget: app.name)\n                let simulateLocation = Scheme.SimulateLocation(allow: true, defaultLocation: \"New York, NY, USA\")\n                let storeKitConfiguration = \"Configuration.storekit\"\n                let scheme = try Scheme(\n                    name: \"MyScheme\",\n                    build: Scheme.Build(targets: [buildTarget], preActions: [preAction]),\n                    run: Scheme.Run(config: \"Debug\", enableGPUFrameCaptureMode: .metal, askForAppToLaunch: true, launchAutomaticallySubstyle: \"2\", simulateLocation: simulateLocation, storeKitConfiguration: storeKitConfiguration, customLLDBInit: \"/sample/.lldbinit\", customWorkingDirectory: \"/test\"),\n                    test: Scheme.Test(config: \"Debug\", targets: [\n                        Scheme.Test.TestTarget(targetReference: TestableTargetReference(framework.name), location: \"test.gpx\"),\n                        Scheme.Test.TestTarget(targetReference: TestableTargetReference(framework.name), location: \"New York, NY, USA\")\n                    ], customLLDBInit: \"/test/.lldbinit\"),\n                    profile: Scheme.Profile(config: \"Release\", askForAppToLaunch: true)\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme],\n                    options: .init(schemePathPrefix: \"../\")\n                )\n                let xcodeProject = try project.generateXcodeProject()\n                let target = try unwrap(xcodeProject.pbxproj.nativeTargets\n                    .first(where: { $0.name == app.name }))\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(scheme.name) == \"MyScheme\"\n                try expect(xcscheme.buildAction?.buildImplicitDependencies) == true\n                try expect(xcscheme.buildAction?.parallelizeBuild) == true\n                try expect(xcscheme.buildAction?.runPostActionsOnFailure) == false\n                try expect(xcscheme.buildAction?.preActions.first?.title) == \"Script\"\n                try expect(xcscheme.buildAction?.preActions.first?.scriptText) == \"echo Starting\"\n                try expect(xcscheme.buildAction?.preActions.first?.environmentBuildable?.buildableName) == \"MyApp.app\"\n                try expect(xcscheme.buildAction?.preActions.first?.environmentBuildable?.blueprintName) == \"MyApp\"\n                let buildActionEntry = try unwrap(xcscheme.buildAction?.buildActionEntries.first)\n                try expect(buildActionEntry.buildFor) == BuildType.all\n\n                let buildableReferences: [XCScheme.BuildableReference] = [\n                    buildActionEntry.buildableReference,\n                    xcscheme.launchAction?.runnable?.buildableReference,\n                    xcscheme.profileAction?.buildableProductRunnable?.buildableReference,\n                    xcscheme.testAction?.macroExpansion,\n                ].compactMap { $0 }\n\n                for buildableReference in buildableReferences {\n                    // FIXME: try expect(buildableReference.blueprintIdentifier) == target.reference\n                    try expect(buildableReference.blueprintName) == target.name\n                    try expect(buildableReference.buildableName) == \"\\(target.name).\\(target.productType!.fileExtension!)\"\n                }\n\n                try expect(xcscheme.launchAction?.buildConfiguration) == \"Debug\"\n                try expect(xcscheme.testAction?.buildConfiguration) == \"Debug\"\n                try expect(xcscheme.profileAction?.buildConfiguration) == \"Release\"\n                try expect(xcscheme.analyzeAction?.buildConfiguration) == \"Debug\"\n                try expect(xcscheme.archiveAction?.buildConfiguration) == \"Release\"\n\n                try expect(xcscheme.launchAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger\n                try expect(xcscheme.testAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger\n\n                try expect(xcscheme.launchAction?.askForAppToLaunch) == true\n                try expect(xcscheme.profileAction?.askForAppToLaunch) == true\n                try expect(xcscheme.launchAction?.launchAutomaticallySubstyle) == \"2\"\n                try expect(xcscheme.launchAction?.allowLocationSimulation) == true\n                try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == \"../Configuration.storekit\"\n                try expect(xcscheme.launchAction?.locationScenarioReference?.referenceType) == Scheme.SimulateLocation.ReferenceType.predefined.rawValue\n                try expect(xcscheme.launchAction?.locationScenarioReference?.identifier) == \"New York, NY, USA\"\n                try expect(xcscheme.launchAction?.customLLDBInitFile) == \"/sample/.lldbinit\"\n                try expect(xcscheme.launchAction?.enableGPUFrameCaptureMode) == .metal\n                try expect(xcscheme.testAction?.customLLDBInitFile) == \"/test/.lldbinit\"\n                try expect(xcscheme.testAction?.systemAttachmentLifetime).to.beNil()\n\n                try expect(xcscheme.launchAction?.useCustomWorkingDirectory) == true\n                try expect(xcscheme.launchAction?.customWorkingDirectory) == \"/test\"\n\n                try expect(xcscheme.testAction?.testables[0].locationScenarioReference?.referenceType) == \"0\"\n                try expect(xcscheme.testAction?.testables[0].locationScenarioReference?.identifier) == \"../test.gpx\"\n                \n                try expect(xcscheme.testAction?.testables[1].locationScenarioReference?.referenceType) == \"1\"\n                try expect(xcscheme.testAction?.testables[1].locationScenarioReference?.identifier) == \"New York, NY, USA\"\n            }\n\n            let frameworkTarget = Scheme.BuildTarget(target: .local(framework.name), buildTypes: [.archiving])\n            $0.it(\"generates a scheme with the first runnable selected\") {\n                let scheme = Scheme(\n                    name: \"MyScheme\",\n                    build: Scheme.Build(targets: [frameworkTarget, buildTarget])\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [framework, app],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                let buildableReference = xcscheme.launchAction?.runnable?.buildableReference\n                try expect(buildableReference?.buildableName) == \"MyApp.app\"\n            }\n\n            $0.it(\"generates scheme with multiple configs\") {\n                let configs: [Config] = [\n                    Config(name: \"Beta\", type: .debug),\n                    Config(name: \"Debug\", type: .debug),\n                    Config(name: \"Production\", type: .release),\n                    Config(name: \"Release\", type: .release),\n                ]\n                let framework = Target(\n                    name: \"MyFramework\",\n                    type: .application,\n                    platform: .iOS,\n                    scheme: TargetScheme(testTargets: [\"MyFrameworkTests\"], storeKitConfiguration: \"Configuration.storekit\")\n                )\n                let project = Project(\n                    name: \"test\",\n                    configs: configs,\n                    targets: [framework, frameworkTest],\n                    options: .init(schemePathPrefix: \"../../\")\n                )\n                let xcodeProject = try project.generateXcodeProject()\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                try expect(xcscheme.launchAction?.buildConfiguration) == \"Debug\"\n                try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == \"../../Configuration.storekit\"\n                try expect(xcscheme.testAction?.buildConfiguration) == \"Debug\"\n                try expect(xcscheme.profileAction?.buildConfiguration) == \"Release\"\n                try expect(xcscheme.analyzeAction?.buildConfiguration) == \"Debug\"\n                try expect(xcscheme.archiveAction?.buildConfiguration) == \"Release\"\n            }\n\n            $0.it(\"sets environment variables for a scheme\") {\n                let runVariables: [XCScheme.EnvironmentVariable] = [\n                    XCScheme.EnvironmentVariable(variable: \"RUN_ENV\", value: \"ENABLED\", enabled: true),\n                    XCScheme.EnvironmentVariable(variable: \"OTHER_RUN_ENV\", value: \"DISABLED\", enabled: false),\n                ]\n\n                let scheme = Scheme(\n                    name: \"EnvironmentVariablesScheme\",\n                    build: Scheme.Build(targets: [buildTarget]),\n                    run: Scheme.Run(config: \"Debug\", environmentVariables: runVariables, simulateLocation: .init(allow: true, defaultLocation: \"File.gpx\"), storeKitConfiguration: \"Configuration.storekit\"),\n                    test: Scheme.Test(config: \"Debug\"),\n                    profile: Scheme.Profile(config: \"Debug\")\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme],\n                    options: .init(schemePathPrefix: \"../\")\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                try expect(\n                    xcodeProject.pbxproj.nativeTargets\n                        .contains(where: { $0.name == app.name })\n                ).beTrue()\n                try expect(xcscheme.launchAction?.environmentVariables) == runVariables\n                try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == \"../Configuration.storekit\"\n                try expect(xcscheme.launchAction?.locationScenarioReference?.referenceType) == Scheme.SimulateLocation.ReferenceType.gpx.rawValue\n                try expect(xcscheme.launchAction?.locationScenarioReference?.identifier) == \"../File.gpx\"\n                try expect(xcscheme.testAction?.environmentVariables).to.beNil()\n                try expect(xcscheme.profileAction?.environmentVariables).to.beNil()\n            }\n\n            $0.it(\"generates target schemes from config variant\") {\n                let configVariants = [\"Test\", \"PreProd\", \"Prod\"]\n                var target = app\n                target.scheme = TargetScheme(configVariants: configVariants)\n                \n                // Including here a double test for custom upper/lowercase, and dash delimited in config types\n                let configs: [Config] = [\n                    Config(name: \"Test-Debug\", type: .debug),\n                    Config(name: \"PreProd debug\", type: .debug),\n                    Config(name: \"Prod-Debug\", type: .debug),\n                    Config(name: \"Test Release\", type: .release),\n                    Config(name: \"PreProd release\", type: .release),\n                    Config(name: \"Prod Release\", type: .release),\n                ]\n\n                let project = Project(name: \"test\", configs: configs, targets: [target, framework])\n                let xcodeProject = try project.generateXcodeProject()\n\n                try expect(xcodeProject.sharedData?.schemes.count) == 3\n                try configVariants.forEach { variantName in\n                    let xcscheme = try unwrap(xcodeProject.sharedData?.schemes\n                                                .first(where: { $0.name == \"\\(target.name) \\(variantName)\" }))\n                    let buildActionEntry = try unwrap(xcscheme.buildAction?.buildActionEntries.first)\n                    \n                    try expect((buildActionEntry.buildableReference.blueprintIdentifier?.count ?? 0) > 0) == true\n                    if variantName == \"PreProd\" {\n                        try expect(xcscheme.launchAction?.buildConfiguration) == \"\\(variantName) debug\"\n                        try expect(xcscheme.testAction?.buildConfiguration) == \"\\(variantName) debug\"\n                        try expect(xcscheme.profileAction?.buildConfiguration) == \"\\(variantName) release\"\n                        try expect(xcscheme.analyzeAction?.buildConfiguration) == \"\\(variantName) debug\"\n                        try expect(xcscheme.archiveAction?.buildConfiguration) == \"\\(variantName) release\"\n                    } else {\n                        try expect(xcscheme.launchAction?.buildConfiguration) == \"\\(variantName)-Debug\"\n                        try expect(xcscheme.testAction?.buildConfiguration) == \"\\(variantName)-Debug\"\n                        try expect(xcscheme.profileAction?.buildConfiguration) == \"\\(variantName) Release\"\n                        try expect(xcscheme.analyzeAction?.buildConfiguration) == \"\\(variantName)-Debug\"\n                        try expect(xcscheme.archiveAction?.buildConfiguration) == \"\\(variantName) Release\"\n                    }\n                }\n            }\n\n            $0.it(\"generates environment variables for target schemes\") {\n                let variables: [XCScheme.EnvironmentVariable] = [XCScheme.EnvironmentVariable(variable: \"env\", value: \"var\", enabled: false)]\n                var target = app\n                target.scheme = TargetScheme(environmentVariables: variables)\n\n                let project = Project(name: \"test\", targets: [target, framework])\n                let xcodeProject = try project.generateXcodeProject()\n\n                try expect(xcodeProject.sharedData?.schemes.count) == 1\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                try expect(xcscheme.launchAction?.environmentVariables) == variables\n                try expect(xcscheme.testAction?.environmentVariables) == variables\n                try expect(xcscheme.profileAction?.environmentVariables) == variables\n            }\n\n            $0.it(\"generate scheme without debugger - run\") {\n                let scheme = Scheme(\n                    name: \"TestScheme\",\n                    build: Scheme.Build(targets: [buildTarget]),\n                    run: Scheme.Run(config: \"Debug\", enableGPUFrameCaptureMode: .metal, debugEnabled: false, simulateLocation: .init(allow: true, defaultLocation: \"File.gpx\"), storeKitConfiguration: \"Configuration.storekit\")\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                try expect(xcscheme.launchAction?.selectedDebuggerIdentifier) == \"\"\n                try expect(xcscheme.launchAction?.selectedLauncherIdentifier) == \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n                try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == \"../../Configuration.storekit\"\n                try expect(xcscheme.launchAction?.locationScenarioReference?.referenceType) == Scheme.SimulateLocation.ReferenceType.gpx.rawValue\n                try expect(xcscheme.launchAction?.locationScenarioReference?.identifier) == \"../../File.gpx\"\n                try expect(xcscheme.launchAction?.enableGPUFrameCaptureMode) == .metal\n            }\n\n            $0.it(\"generate scheme without debugger - test\") {\n                let scheme = Scheme(\n                    name: \"TestScheme\",\n                    build: Scheme.Build(targets: [buildTarget]),\n                    test: Scheme.Test(config: \"Debug\", debugEnabled: false)\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                try expect(xcscheme.testAction?.selectedDebuggerIdentifier) == \"\"\n                try expect(xcscheme.testAction?.selectedLauncherIdentifier) == \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n            }\n\n            $0.it(\"generates pre and post actions for target schemes\") {\n                var target = app\n                target.scheme = TargetScheme(\n                    preActions: [.init(name: \"Run\", script: \"do\")],\n                    postActions: [.init(name: \"Run2\", script: \"post\", settingsTarget: \"MyApp\")]\n                )\n\n                let project = Project(name: \"test\", targets: [target, framework])\n                let xcodeProject = try project.generateXcodeProject()\n\n                try expect(xcodeProject.sharedData?.schemes.count) == 1\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n\n                try expect(xcscheme.buildAction?.preActions.count) == 1\n                try expect(xcscheme.buildAction?.preActions.first?.title) == \"Run\"\n                try expect(xcscheme.buildAction?.preActions.first?.scriptText) == \"do\"\n                try expect(xcscheme.buildAction?.postActions.first?.environmentBuildable?.blueprintName) == \"MyApp\"\n\n                try expect(xcscheme.launchAction?.preActions.count) == 0\n                try expect(xcscheme.testAction?.postActions.count) == 0\n            }\n\n            $0.it(\"generates target schemes with code coverage options\") {\n                var target = app\n                target.scheme = try TargetScheme(\n                    gatherCoverageData: true,\n                    coverageTargets: [\n                        TestableTargetReference(framework.name),\n                    ]\n                )\n\n                let project = Project(name: \"test\", targets: [target, framework])\n                let xcodeProject = try project.generateXcodeProject()\n                try expect(xcodeProject.sharedData?.schemes.count) == 1\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.codeCoverageEnabled) == true\n                try expect(xcscheme.testAction?.codeCoverageTargets.count) == 1\n                try expect(xcscheme.testAction?.codeCoverageTargets.first?.blueprintName) == framework.name\n            }\n\n            $0.it(\"generates scheme using external project file\") {\n                prepareXcodeProj: do {\n                    let project = try! Project(path: fixturePath + \"scheme_test/test_project.yml\")\n                    let generator = ProjectGenerator(project: project)\n                    let writer = FileWriter(project: project)\n                    let xcodeProject = try! generator.generateXcodeProject(userName: \"someUser\")\n                    try! writer.writeXcodeProject(xcodeProject)\n                    try! writer.writePlists()\n                }\n                let externalProjectPath = fixturePath + \"scheme_test/TestProject.xcodeproj\"\n                let projectReference = ProjectReference(name: \"ExternalProject\", path: externalProjectPath.string)\n                let target = Scheme.BuildTarget(target: .init(name: \"ExternalTarget\", location: .project(\"ExternalProject\")))\n                let scheme = Scheme(\n                    name: \"ExternalProjectScheme\",\n                    build: Scheme.Build(targets: [target])\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [],\n                    schemes: [scheme],\n                    projectReferences: [projectReference]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.buildAction?.buildActionEntries.count) == 1\n                let buildableReference = xcscheme.buildAction?.buildActionEntries.first?.buildableReference\n                try expect(buildableReference?.blueprintName) == \"ExternalTarget\"\n                try expect(buildableReference?.referencedContainer) == \"container:\\(externalProjectPath.string)\"\n\n            }\n\n            $0.it(\"generate scheme with code coverage options\") {\n                prepareXcodeProj: do {\n                    let project = try! Project(path: fixturePath + \"scheme_test/test_project.yml\")\n                    let generator = ProjectGenerator(project: project)\n                    let writer = FileWriter(project: project)\n                    let xcodeProject = try! generator.generateXcodeProject(userName: \"someUser\")\n                    try! writer.writeXcodeProject(xcodeProject)\n                    try! writer.writePlists()\n                }\n                let externalProject = fixturePath + \"scheme_test/TestProject.xcodeproj\"\n                let externalTarget = Scheme.BuildTarget(target: .init(name: \"ExternalTarget\", location: .project(\"TestProject\")))\n                let scheme = try Scheme(\n                    name: \"CodeCoverageScheme\",\n                    build: Scheme.Build(targets: [externalTarget]),\n                    test: Scheme.Test(\n                        config: \"Debug\",\n                        gatherCoverageData: true,\n                        coverageTargets: [\n                            \"TestProject/ExternalTarget\",\n                            TestableTargetReference(framework.name),\n                            TestableTargetReference(name: \"XcodeGenKitTests\", location: .package(\"XcodeGen\"))\n                        ]\n                    )\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [framework],\n                    schemes: [scheme],\n                    packages: [\"XcodeGen\": .local(path: \"../\", group: nil, excludeFromProject: false)],\n                    projectReferences: [\n                        ProjectReference(name: \"TestProject\", path: externalProject.string),\n                    ]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.codeCoverageEnabled) == true\n                try expect(xcscheme.testAction?.codeCoverageTargets.count) == 3\n                let buildableReference = xcscheme.testAction?.codeCoverageTargets.first\n                try expect(buildableReference?.blueprintName) == \"ExternalTarget\"\n                try expect(buildableReference?.referencedContainer) == \"container:\\(externalProject.string)\"\n            }\n\n            $0.it(\"generates scheme with buildable product runnable for ios app target\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    scheme: TargetScheme()\n                )\n                let project = Project(name: \"ios_test\", targets: [app])\n                let xcodeProject = try project.generateXcodeProject()\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.launchAction?.runnable).beOfType(XCScheme.BuildableProductRunnable.self)\n            }\n\n            $0.it(\"generates scheme with remote runnable for watch app target\") {\n                let xcscheme = try self.makeWatchScheme(appType: .watch2App, extensionType: .watch2Extension)\n                try expect(xcscheme.launchAction?.runnable).beOfType(XCScheme.RemoteRunnable.self)\n                try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == \"../Configuration.storekit\"\n            }\n\n            $0.it(\"generates scheme with host target build action for watch\") {\n                let xcscheme = try self.makeWatchScheme(appType: .watch2App, extensionType: .watch2Extension)\n                let buildEntries = xcscheme.buildAction?.buildActionEntries ?? []\n                try expect(buildEntries.count) == 2\n                try expect(buildEntries.first?.buildableReference.blueprintName) == \"WatchApp\"\n                try expect(buildEntries.last?.buildableReference.blueprintName) == \"HostApp\"\n                try expect(xcscheme.launchAction?.storeKitConfigurationFileReference?.identifier) == \"../Configuration.storekit\"\n            }\n            \n            $0.it(\"generates scheme with extension target and specify macroExpansion\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: \"MyAppExtension\", embed: false)]\n                )\n\n                let `extension` = Target(\n                    name: \"MyAppExtension\",\n                    type: .appExtension,\n                    platform: .iOS\n                )\n                let appTarget = Scheme.BuildTarget(target: .local(app.name), buildTypes: [.running])\n                let extensionTarget = Scheme.BuildTarget(target: .local(`extension`.name), buildTypes: [.running])\n            \n                let scheme = Scheme(\n                    name: \"TestScheme\",\n                    build: Scheme.Build(targets: [appTarget, extensionTarget]),\n                    run: Scheme.Run(config: \"Debug\", macroExpansion: \"MyApp\")\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, `extension`],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.macroExpansion?.buildableName) == \"MyApp.app\"\n                try expect(xcscheme.launchAction?.macroExpansion?.buildableName) == \"MyApp.app\"\n            }\n\n            $0.it(\"allows to override test macroExpansion\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [Dependency(type: .target, reference: \"MyAppExtension\", embed: false)]\n                )\n\n                let `extension` = Target(\n                    name: \"MyAppExtension\",\n                    type: .appExtension,\n                    platform: .iOS\n                )\n                let appTarget = Scheme.BuildTarget(target: .local(app.name), buildTypes: [.running])\n                let extensionTarget = Scheme.BuildTarget(target: .local(`extension`.name), buildTypes: [.running])\n            \n                let scheme = Scheme(\n                    name: \"TestScheme\",\n                    build: Scheme.Build(targets: [appTarget, extensionTarget]),\n                    run: Scheme.Run(config: \"Debug\", macroExpansion: \"MyApp\"),\n                    test: .init(macroExpansion: \"MyAppExtension\")\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, `extension`],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.macroExpansion?.buildableName) == \"MyAppExtension.appex\"\n                try expect(xcscheme.launchAction?.macroExpansion?.buildableName) == \"MyApp.app\"\n            }\n            \n            $0.it(\"generates scheme with macroExpansion from tests when the main target is not part of the scheme\") {\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: []\n                )\n\n                let mockApp = Target(\n                    name: \"MockApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: []\n                )\n\n                let testBundle = Target(\n                    name: \"TestBundle\",\n                    type: .unitTestBundle,\n                    platform: .iOS\n                )\n                let appTarget = Scheme.BuildTarget(target: .local(app.name), buildTypes: [.running])\n                let mockAppTarget = Scheme.BuildTarget(target: .local(mockApp.name), buildTypes: [.testing])\n                let testBundleTarget = Scheme.BuildTarget(target: .local(testBundle.name), buildTypes: [.testing])\n\n                let scheme = Scheme(\n                    name: \"TestScheme\",\n                    build: Scheme.Build(targets: [appTarget, mockAppTarget, testBundleTarget]),\n                    run: Scheme.Run(config: \"Debug\", macroExpansion: \"MyApp\")\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, mockApp, testBundle],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.macroExpansion?.buildableName) == \"MockApp.app\"\n            }\n\n            $0.it(\"generates scheme with test target of local swift package\") {\n                let targetScheme = TargetScheme(\n                    testTargets: [Scheme.Test.TestTarget(targetReference: TestableTargetReference(name: \"XcodeGenKitTests\", location: .package(\"XcodeGen\")))])\n                let app = Target(\n                    name: \"MyApp\",\n                    type: .application,\n                    platform: .iOS,\n                    dependencies: [\n                        Dependency(type: .package(products: []), reference: \"XcodeGen\")\n                    ],\n                    scheme: targetScheme\n                )\n                let project = Project(\n                    name: \"ios_test\",\n                    targets: [app],\n                    packages: [\"XcodeGen\": .local(path: \"../\", group: nil, excludeFromProject: false)]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                let buildableReference = try unwrap(xcscheme.testAction?.testables.first?.buildableReference)\n\n                try expect(buildableReference.blueprintIdentifier) == \"XcodeGenKitTests\"\n                try expect(buildableReference.blueprintName) == \"XcodeGenKitTests\"\n                try expect(buildableReference.buildableName) == \"XcodeGenKitTests\"\n                try expect(buildableReference.referencedContainer) == \"container:../\"\n            }\n\n            $0.it(\"generates scheme capturing screenshots automatically and deleting on success\") {\n                let xcscheme = try self.makeSnapshotScheme(\n                    buildTarget: buildTarget,\n                    captureScreenshotsAutomatically: true,\n                    deleteScreenshotsWhenEachTestSucceeds: true)\n\n                try expect(xcscheme.testAction?.systemAttachmentLifetime).to.beNil()\n            }\n\n            $0.it(\"generates scheme capturing screenshots and not deleting\") {\n                let xcscheme = try self.makeSnapshotScheme(\n                    buildTarget: buildTarget,\n                    captureScreenshotsAutomatically: true,\n                    deleteScreenshotsWhenEachTestSucceeds: false)\n\n                try expect(xcscheme.testAction?.systemAttachmentLifetime) == .keepAlways\n            }\n\n            $0.it(\"generates scheme not capturing screenshots\") {\n                let xcscheme = try self.makeSnapshotScheme(\n                    buildTarget: buildTarget,\n                    captureScreenshotsAutomatically: false,\n                    deleteScreenshotsWhenEachTestSucceeds: false)\n\n                try expect(xcscheme.testAction?.systemAttachmentLifetime) == .keepNever\n            }\n\n            $0.it(\"ignores screenshot delete preference when not capturing screenshots\") {\n                let xcscheme = try self.makeSnapshotScheme(\n                    buildTarget: buildTarget,\n                    captureScreenshotsAutomatically: false,\n                    deleteScreenshotsWhenEachTestSucceeds: true)\n\n                try expect(xcscheme.testAction?.systemAttachmentLifetime) == .keepNever\n            }\n\n            $0.it(\"generate test plans \") {\n\n                let testPlanPath1 = \"\\(fixturePath.string)/TestProject/App_iOS/App_iOS.xctestplan\"\n                let testPlanPath2 = \"\\(fixturePath.string)/TestProject/App_iOS/App_iOS.xctestplan\"\n\n                let scheme = Scheme(\n                    name: \"TestScheme\",\n                    build: Scheme.Build(targets: [buildTarget]),\n                    test: Scheme.Test(config: \"Debug\", testPlans: [\n                        .init(path: testPlanPath1, defaultPlan: false),\n                        .init(path: testPlanPath2, defaultPlan: true),\n                    ])\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.testPlans) == [\n                    .init(reference: \"container:\\(testPlanPath1)\", default: false),\n                    .init(reference: \"container:\\(testPlanPath2)\", default: true),\n                ]\n            }\n\n            $0.it(\"generates scheme with screenshots as preferred screen capture format\") {\n                let scheme = Scheme(\n                    name: \"MyScheme\",\n                    build: Scheme.Build(targets: [buildTarget]),\n                    run: Scheme.Run(config: \"Debug\"),\n                    test: Scheme.Test(config: \"Debug\", preferredScreenCaptureFormat: .screenshots)\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.preferredScreenCaptureFormat) == .screenshots\n            }\n\n            $0.it(\"generates scheme with screen recording as preferred screen capture format\") {\n                let scheme = Scheme(\n                    name: \"MyScheme\",\n                    build: Scheme.Build(targets: [buildTarget]),\n                    run: Scheme.Run(config: \"Debug\"),\n                    test: Scheme.Test(config: \"Debug\", preferredScreenCaptureFormat: .screenRecording)\n                )\n                let project = Project(\n                    name: \"test\",\n                    targets: [app, framework],\n                    schemes: [scheme]\n                )\n                let xcodeProject = try project.generateXcodeProject()\n\n                let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n                try expect(xcscheme.testAction?.preferredScreenCaptureFormat) == .screenRecording\n            }\n        }\n    }\n    \n    func testOverrideLastUpgradeVersionWhenUserDidSpecify() throws {\n        var target = app\n        target.scheme = TargetScheme()\n        \n        let lastUpgradeKey = \"LastUpgradeCheck\"\n        let lastUpgradeValue = \"1234\"\n        let attributes: [String: Any] = [lastUpgradeKey: lastUpgradeValue]\n        let project = Project(name: \"test\", targets: [target, framework], attributes: attributes)\n        let xcodeProject = try project.generateXcodeProject()\n\n        let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n        XCTAssertEqual(xcscheme.lastUpgradeVersion, lastUpgradeValue)\n    }\n\n\n    func testDefaultLastUpgradeVersionWhenUserDidNotSpecify() throws {\n        var target = app\n        target.scheme = TargetScheme()\n\n        let project = Project(name: \"test\", targets: [target, framework])\n        let xcodeProject = try project.generateXcodeProject()\n\n        let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first)\n        XCTAssertEqual(xcscheme.lastUpgradeVersion, project.xcodeVersion)\n    }\n\n    func testGenerateSchemeManagementOnHiddenTargetScheme() throws {\n        var target = app\n        target.scheme = TargetScheme(management: Scheme.Management(isShown: false))\n\n        let project = Project(name: \"test\", targets: [target, framework])\n        let xcodeProject = try project.generateXcodeProject()\n\n        let xcSchemeManagement = try XCTUnwrap(xcodeProject.userData.first?.schemeManagement)\n        XCTAssertEqual(xcSchemeManagement.schemeUserState![0].name, \"MyApp.xcscheme\")\n        XCTAssertEqual(xcSchemeManagement.schemeUserState![0].shared, true)\n        XCTAssertEqual(xcSchemeManagement.schemeUserState![0].isShown, false)\n        XCTAssertEqual(xcSchemeManagement.schemeUserState![0].orderHint, nil)\n    }\n\n    // MARK: - Helpers\n\n    private func makeWatchScheme(appType: PBXProductType, extensionType: PBXProductType) throws -> XCScheme {\n        let watchExtension = Target(\n            name: \"WatchExtension\",\n            type: extensionType,\n            platform: .watchOS\n        )\n        let watchApp = Target(\n            name: \"WatchApp\",\n            type: appType,\n            platform: .watchOS,\n            dependencies: [Dependency(type: .target, reference: watchExtension.name)],\n            scheme: TargetScheme(storeKitConfiguration: \"Configuration.storekit\")\n        )\n        let hostApp = Target(\n            name: \"HostApp\",\n            type: .application,\n            platform: .iOS,\n            dependencies: [Dependency(type: .target, reference: watchApp.name)]\n        )\n        let project = Project(\n            name: \"watch_test\",\n            targets: [hostApp, watchApp, watchExtension],\n            options: .init(schemePathPrefix: \"../\")\n        )\n        let xcodeProject = try project.generateXcodeProject()\n        return try unwrap(xcodeProject.sharedData?.schemes.first)\n    }\n\n    private func makeSnapshotScheme(buildTarget: Scheme.BuildTarget, captureScreenshotsAutomatically: Bool, deleteScreenshotsWhenEachTestSucceeds: Bool) throws -> XCScheme {\n        let scheme = Scheme(\n            name: \"MyScheme\",\n            build: Scheme.Build(targets: [buildTarget]),\n            run: Scheme.Run(config: \"Debug\"),\n            test: Scheme.Test(config: \"Debug\", captureScreenshotsAutomatically: captureScreenshotsAutomatically, deleteScreenshotsWhenEachTestSucceeds: deleteScreenshotsWhenEachTestSucceeds)\n        )\n        let project = Project(\n            name: \"test\",\n            targets: [app, framework],\n            schemes: [scheme]\n        )\n        let xcodeProject = try project.generateXcodeProject()\n        return try unwrap(xcodeProject.sharedData?.schemes.first)\n    }\n}\n"
  },
  {
    "path": "Tests/XcodeGenKitTests/SourceGeneratorTests.swift",
    "content": "import PathKit\nimport ProjectSpec\nimport Spectre\n@testable import XcodeGenKit\nimport XcodeProj\nimport XCTest\nimport Yams\nimport TestSupport\n\nclass SourceGeneratorTests: XCTestCase {\n\n    func testSourceGenerator() throws {\n        try skipIfNecessary()\n        describe {\n\n            let directoryPath = Path(\"TestDirectory\")\n            let outOfRootPath = Path(\"OtherDirectory\")\n\n            func createDirectories(_ directories: String) throws {\n\n                let yaml = try Yams.load(yaml: directories)!\n\n                func getFiles(_ file: Any, path: Path) -> [Path] {\n                    if let array = file as? [Any] {\n                        return array.flatMap { getFiles($0, path: path) }\n                    } else if let string = file as? String {\n                        return [path + string]\n                    } else if let dictionary = file as? [String: Any] {\n                        var array: [Path] = []\n                        for (key, value) in dictionary {\n                            array += getFiles(value, path: path + key)\n                        }\n                        return array\n                    } else {\n                        return []\n                    }\n                }\n\n                let files = getFiles(yaml, path: directoryPath).filter { $0.extension != nil }\n                for file in files {\n                    try file.parent().mkpath()\n                    try file.write(\"\")\n                }\n            }\n            \n            func createFile(at relativePath: Path, content: String) throws -> Path {\n                let filePath = directoryPath + relativePath\n                try filePath.parent().mkpath()\n                try filePath.write(content)\n                return filePath\n            }\n\n            func removeDirectories() {\n                try? directoryPath.delete()\n                try? outOfRootPath.delete()\n            }\n\n            $0.before {\n                removeDirectories()\n            }\n\n            $0.after {\n                removeDirectories()\n            }\n\n            $0.it(\"generates source groups\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                    - B:\n                      - b.swift\n                    - C2.0:\n                      - c.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"B\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"C2.0\", \"c.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"generates synced folder\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [.init(path: \"Sources\", type: .syncedFolder)])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                try expect([syncedFolder]) == pbxProj.nativeTargets.first?.fileSystemSynchronizedGroups\n            }\n\n            $0.it(\"generates synced folder with explicitFolders\") {\n                let directories = \"\"\"\n                Sources:\n                  Images:\n                    - image.png\n                  MainSuite:\n                    FeatureATests:\n                      - __Snapshots__:\n                        - snap.png\n                    FeatureBTests:\n                      - __Snapshots__:\n                        - snap.png\n                  NotATest:\n                    - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", explicitFolders: [\"Images\", \"**/*Tests\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                try expect(syncedFolder.explicitFolders) == [\"Images\", \"MainSuite/FeatureATests\", \"MainSuite/FeatureBTests\"]\n            }\n\n            $0.it(\"generates synced folder with createIntermediateGroups\") {\n                let directories = \"\"\"\n                Parent:\n                  Child:\n                    - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [.init(path: \"Parent/Child\", type: .syncedFolder)])\n                let options = SpecOptions(createIntermediateGroups: true)\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n\n                let pbxProj = try project.generatePbxProj()\n                let mainGroup = try pbxProj.getMainGroup()\n\n                let rootSyncedFolders = mainGroup.children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                try expect(rootSyncedFolders.count) == 0\n\n                let parentGroup = try unwrap(mainGroup.children.compactMap({ $0 as? PBXGroup }).first(where: { $0.nameOrPath == \"Parent\" }))\n                let nestedSyncedFolders = parentGroup.children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(nestedSyncedFolders.first)\n\n                try expect(syncedFolder.path) == \"Child\"\n                try expect([syncedFolder]) == pbxProj.nativeTargets.first?.fileSystemSynchronizedGroups\n            }\n\n            $0.it(\"respects defaultSourceDirectoryType\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: .init(defaultSourceDirectoryType: .syncedFolder))\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                try expect([syncedFolder]) == pbxProj.nativeTargets.first?.fileSystemSynchronizedGroups\n            }\n\n            $0.it(\"adds excludes as membership exceptions for synced folder\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - b.swift\n                  - Generated:\n                    - c.generated.swift\n                    - d.generated.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", excludes: [\"b.swift\", \"Generated/*.generated.swift\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSets = syncedFolder.exceptions?.compactMap { $0 as? PBXFileSystemSynchronizedBuildFileExceptionSet }\n                let exceptionSet = try unwrap(exceptionSets?.first)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                try expect(exceptions.contains(\"b.swift\")) == true\n                try expect(exceptions.contains(\"Generated/c.generated.swift\")) == true\n                try expect(exceptions.contains(\"Generated/d.generated.swift\")) == true\n                try expect(exceptions.contains(\"a.swift\")) == false\n            }\n\n            $0.it(\"adds membership exceptions for nested synced folder with intermediate groups\") {\n                let directories = \"\"\"\n                Sources:\n                  Nested:\n                    - a.swift\n                    - b.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources/Nested\", excludes: [\"b.swift\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: .init(createIntermediateGroups: true))\n\n                let pbxProj = try project.generatePbxProj()\n                let sourcesGroup = try unwrap(try pbxProj.getMainGroup().children.first { $0.nameOrPath == \"Sources\" } as? PBXGroup)\n                let syncedFolder = try unwrap(sourcesGroup.children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }.first)\n\n                let exceptionSet = try unwrap(syncedFolder.exceptions?.first as? PBXFileSystemSynchronizedBuildFileExceptionSet)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                try expect(exceptions) == [\"b.swift\"]\n            }\n\n            $0.it(\"auto-excludes Info.plist from synced folder membership\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - Info.plist\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", type: .syncedFolder)\n                let target = Target(\n                    name: \"Test\",\n                    type: .application,\n                    platform: .iOS,\n                    settings: try Settings(jsonDictionary: [\"INFOPLIST_FILE\": \"Sources/Info.plist\"]),\n                    sources: [source]\n                )\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSets = syncedFolder.exceptions?.compactMap { $0 as? PBXFileSystemSynchronizedBuildFileExceptionSet }\n                let exceptionSet = try unwrap(exceptionSets?.first)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                try expect(exceptions.contains(\"Info.plist\")) == true\n            }\n\n            $0.it(\"creates no exception set for synced folder without excludes\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                try expect(syncedFolder.exceptions?.isEmpty ?? true) == true\n            }\n\n            $0.it(\"adds empty resources build phase for synced folder\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let nativeTarget = try unwrap(pbxProj.nativeTargets.first)\n                let hasResourcesPhase = nativeTarget.buildPhases.contains { $0 is PBXResourcesBuildPhase }\n                try expect(hasResourcesPhase) == true\n            }\n\n            $0.it(\"deduplicates synced folders across targets\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", type: .syncedFolder)\n                let target1 = Target(name: \"Target1\", type: .application, platform: .iOS, sources: [source])\n                let target2 = Target(name: \"Target2\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target1, target2])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n\n                try expect(syncedFolders.count) == 1\n            }\n\n            $0.it(\"supports includes for synced folders\") {\n                let directories = \"\"\"\n                Sources:\n                  - included.swift\n                  - excluded.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", includes: [\"included.swift\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSets = syncedFolder.exceptions?.compactMap { $0 as? PBXFileSystemSynchronizedBuildFileExceptionSet }\n                let exceptionSet = try unwrap(exceptionSets?.first)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                try expect(exceptions.contains(\"excluded.swift\")) == true\n                try expect(exceptions.contains(\"included.swift\")) == false\n            }\n\n            $0.it(\"merges explicitFolders for synced folders across targets\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - FolderA:\n                    - b.swift\n                  - FolderB:\n                    - c.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source1 = TargetSource(path: \"Sources\", explicitFolders: [\"FolderA\"], type: .syncedFolder)\n                let source2 = TargetSource(path: \"Sources\", explicitFolders: [\"FolderB\"], type: .syncedFolder)\n                let target1 = Target(name: \"Target1\", type: .application, platform: .iOS, sources: [source1])\n                let target2 = Target(name: \"Target2\", type: .application, platform: .iOS, sources: [source2])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target1, target2])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                try expect(syncedFolder.explicitFolders?.sorted()) == [\"FolderA\", \"FolderB\"]\n            }\n\n            $0.it(\"supports different includes for the same synced folder across targets\") {\n                let directories = \"\"\"\n                Sources:\n                  - target1.swift\n                  - target2.swift\n                  - common.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source1 = TargetSource(path: \"Sources\", includes: [\"target1.swift\", \"common.swift\"], type: .syncedFolder)\n                let source2 = TargetSource(path: \"Sources\", includes: [\"target2.swift\", \"common.swift\"], type: .syncedFolder)\n                let target1 = Target(name: \"Target1\", type: .application, platform: .iOS, sources: [source1])\n                let target2 = Target(name: \"Target2\", type: .application, platform: .iOS, sources: [source2])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target1, target2])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSets = syncedFolder.exceptions?.compactMap { $0 as? PBXFileSystemSynchronizedBuildFileExceptionSet }\n                try expect(exceptionSets?.count) == 2\n\n                let t1Exceptions = try unwrap(exceptionSets?.first { $0.target?.name == \"Target1\" }?.membershipExceptions)\n                try expect(t1Exceptions.contains(\"target2.swift\")) == true\n                try expect(t1Exceptions.contains(\"target1.swift\")) == false\n                try expect(t1Exceptions.contains(\"common.swift\")) == false\n\n                let t2Exceptions = try unwrap(exceptionSets?.first { $0.target?.name == \"Target2\" }?.membershipExceptions)\n                try expect(t2Exceptions.contains(\"target1.swift\")) == true\n                try expect(t2Exceptions.contains(\"target2.swift\")) == false\n                try expect(t2Exceptions.contains(\"common.swift\")) == false\n            }\n\n            $0.it(\"correctly identifies exceptions for nested directories in includes\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - Nested:\n                    - b.swift\n                    - c.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", includes: [\"Nested/b.swift\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSet = try unwrap(syncedFolder.exceptions?.first as? PBXFileSystemSynchronizedBuildFileExceptionSet)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                try expect(exceptions.contains(\"a.swift\")) == true\n                try expect(exceptions.contains(\"Nested/c.swift\")) == true\n                try expect(exceptions.contains(\"Nested/b.swift\")) == false\n            }\n\n            $0.it(\"excludes entire subdirectory as single exception when no files in it are included\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - ExcludedDir:\n                    - x.swift\n                    - y.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", includes: [\"a.swift\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSet = try unwrap(syncedFolder.exceptions?.first as? PBXFileSystemSynchronizedBuildFileExceptionSet)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                // The whole directory should be a single exception entry, not each file within it\n                try expect(exceptions.contains(\"ExcludedDir\")) == true\n                try expect(exceptions.contains(\"ExcludedDir/x.swift\")) == false\n                try expect(exceptions.contains(\"ExcludedDir/y.swift\")) == false\n                try expect(exceptions.contains(\"a.swift\")) == false\n            }\n\n            $0.it(\"respects excludes when includes are also specified\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - b.swift\n                  - c.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                // includes a.swift and b.swift, but b.swift is also excluded → only a.swift is effectively included\n                let source = TargetSource(path: \"Sources\", excludes: [\"b.swift\"], includes: [\"a.swift\", \"b.swift\"], type: .syncedFolder)\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let syncedFolders = try pbxProj.getMainGroup().children.compactMap { $0 as? PBXFileSystemSynchronizedRootGroup }\n                let syncedFolder = try unwrap(syncedFolders.first)\n\n                let exceptionSet = try unwrap(syncedFolder.exceptions?.first as? PBXFileSystemSynchronizedBuildFileExceptionSet)\n                let exceptions = try unwrap(exceptionSet.membershipExceptions)\n\n                try expect(exceptions.contains(\"a.swift\")) == false\n                try expect(exceptions.contains(\"b.swift\")) == true\n                try expect(exceptions.contains(\"c.swift\")) == true\n            }\n\n            $0.it(\"deduplicates synced folders and both targets reference the same group object\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let source = TargetSource(path: \"Sources\", type: .syncedFolder)\n                let target1 = Target(name: \"App\", type: .application, platform: .iOS, sources: [source])\n                let target2 = Target(name: \"Tests\", type: .unitTestBundle, platform: .iOS, sources: [source])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target1, target2])\n\n                let pbxProj = try project.generatePbxProj()\n                let nativeTargets = pbxProj.nativeTargets\n                let appTarget = try unwrap(nativeTargets.first { $0.name == \"App\" })\n                let testsTarget = try unwrap(nativeTargets.first { $0.name == \"Tests\" })\n\n                let appGroup = try unwrap(appTarget.fileSystemSynchronizedGroups?.first)\n                let testsGroup = try unwrap(testsTarget.fileSystemSynchronizedGroups?.first)\n                try expect(appGroup === testsGroup) == true\n            }\n\n            $0.it(\"supports frameworks in sources\") {\n                let directories = \"\"\"\n                Sources:\n                  - Foo.framework\n                  - Bar.swift\n                \"\"\"\n\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"Bar.swift\"], buildPhase: .sources)\n                let buildPhase = pbxProj.copyFilesBuildPhases.first\n                try expect(buildPhase?.dstSubfolderSpec) == .frameworks\n                let fileReference = pbxProj.getFileReference(\n                    paths: [\"Sources\", \"Foo.framework\"],\n                    names: [\"Sources\", \"Foo.framework\"]\n                )\n                let buildFile = try unwrap(pbxProj.buildFiles\n                    .first(where: { $0.file == fileReference }))\n                try expect(buildPhase?.files?.count) == 1\n                try expect(buildPhase?.files?.contains(buildFile)) == true\n            }\n\n            $0.it(\"generates core data models\") {\n                let directories = \"\"\"\n                Sources:\n                    model.xcdatamodeld:\n                        - .xccurrentversion\n                        - model.xcdatamodel\n                        - model1.xcdatamodel\n                        - model2.xcdatamodel\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let fileReference = try unwrap(pbxProj.fileReferences.first(where: { $0.nameOrPath == \"model2.xcdatamodel\" }))\n                let versionGroup = try unwrap(pbxProj.versionGroups.first)\n                try expect(versionGroup.currentVersion) == fileReference\n                try expect(versionGroup.children.count) == 3\n                try expect(versionGroup.path) == \"model.xcdatamodeld\"\n                try expect(fileReference.path) == \"model2.xcdatamodel\"\n            }\n\n            $0.it(\"generates core data mapping models\") {\n                let directories = \"\"\"\n                Sources:\n                    model.xcmappingmodel:\n                        - xcmapping.xml\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"model.xcmappingmodel\"], buildPhase: .sources)\n            }\n\n            $0.it(\"generates variant groups\") {\n                let directories = \"\"\"\n                Sources:\n                    Base.lproj:\n                        - LocalizedStoryboard.storyboard\n                    en.lproj:\n                        - LocalizedStoryboard.strings\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n\n                func getFileReferences(_ path: String) -> [PBXFileReference] {\n                    pbxProj.fileReferences.filter { $0.path == path }\n                }\n\n                func getVariableGroups(_ name: String?) -> [PBXVariantGroup] {\n                    pbxProj.variantGroups.filter { $0.name == name }\n                }\n\n                let resourceName = \"LocalizedStoryboard.storyboard\"\n                let baseResource = \"Base.lproj/LocalizedStoryboard.storyboard\"\n                let localizedResource = \"en.lproj/LocalizedStoryboard.strings\"\n\n                let variableGroup = try unwrap(getVariableGroups(resourceName).first)\n\n                do {\n                    let refs = getFileReferences(baseResource)\n                    try expect(refs.count) == 1\n                    try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1\n                }\n\n                do {\n                    let refs = getFileReferences(localizedResource)\n                    try expect(refs.count) == 1\n                    try expect(variableGroup.children.filter { $0 == refs.first }.count) == 1\n                }\n            }\n\n            $0.it(\"handles localized resources\") {\n                let directories = \"\"\"\n                App:\n                    Resources:\n                        en-CA.lproj:\n                            - empty.json\n                            - Localizable.strings\n                        en-US.lproj:\n                            - empty.json\n                            - Localizable.strings\n                        en.lproj:\n                            - empty.json\n                            - Localizable.strings\n                        fonts:\n                            SFUI:\n                                - SFUILight.ttf\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [TargetSource(path: \"App/Resources\")])\n\n                let options = SpecOptions(createIntermediateGroups: true)\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n\n                let outputXcodeProj = try project.generateXcodeProject()\n                try outputXcodeProj.write(path: directoryPath)\n\n                let inputXcodeProj = try XcodeProj(path: directoryPath)\n                let pbxProj = inputXcodeProj.pbxproj\n\n                func getFileReferences(_ path: String) -> [PBXFileReference] {\n                    pbxProj.fileReferences.filter { $0.path == path }\n                }\n\n                func getVariableGroups(_ name: String?) -> [PBXVariantGroup] {\n                    pbxProj.variantGroups.filter { $0.name == name }\n                }\n\n                let stringsResourceName = \"Localizable.strings\"\n                let jsonResourceName = \"empty.json\"\n\n                let stringsVariableGroup = try unwrap(getVariableGroups(stringsResourceName).first)\n\n                let jsonVariableGroup = try unwrap(getVariableGroups(jsonResourceName).first)\n\n                let stringsResource = \"en.lproj/Localizable.strings\"\n                let jsonResource = \"en-CA.lproj/empty.json\"\n\n                do {\n                    let refs = getFileReferences(stringsResource)\n                    try expect(refs.count) == 1\n                    try expect(refs.first!.uuid.hasPrefix(\"TEMP\")) == false\n                    try expect(stringsVariableGroup.children.filter { $0 == refs.first }.count) == 1\n                }\n\n                do {\n                    let refs = getFileReferences(jsonResource)\n                    try expect(refs.count) == 1\n                    try expect(refs.first!.uuid.hasPrefix(\"TEMP\")) == false\n                    try expect(jsonVariableGroup.children.filter { $0 == refs.first }.count) == 1\n                }\n            }\n\n            $0.it(\"handles duplicate names\") {\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - a:\n                    - a.swift\n                    - a:\n                      - a.swift\n\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"Sources\"])\n                let project = Project(\n                    basePath: directoryPath,\n                    name: \"Test\",\n                    targets: [target],\n                    fileGroups: [\"Sources\"]\n                )\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"a\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"a\", \"a\", \"a.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"renames sources\") {\n                let directories = \"\"\"\n                Sources:\n                    - a.swift\n                OtherSource:\n                    - b.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    TargetSource(path: \"Sources\", name: \"NewSource\"),\n                    TargetSource(path: \"OtherSource/b.swift\", name: \"c.swift\"),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"a.swift\"], names: [\"NewSource\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"OtherSource\", \"b.swift\"], names: [\"OtherSource\", \"c.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"excludes sources\") {\n                let directories = \"\"\"\n                Sources:\n                  - A:\n                    - a.swift\n                    - B:\n                      - b.swift\n                      - b.ignored\n                      - b.alsoIgnored\n                    - a.ignored\n                    - a.alsoIgnored\n                  - B:\n                    - b.swift\n                  - D:\n                    - d.h\n                    - d.m\n                  - E:\n                    - e.jpg\n                    - e.h\n                    - e.m\n                    - F:\n                      - f.swift\n                  - G:\n                    - H:\n                      - h.swift\n                  - types:\n                    - a.swift\n                    - a.m\n                    - a.h\n                    - a.x\n                  - numbers:\n                    - file1.a\n                    - file2.a\n                    - file3.a\n                    - file4.a\n                  - partial:\n                    - file_part\n                  - ignore.file\n                  - a.ignored\n                  - project.xcodeproj:\n                    - project.pbxproj\n                  - a.playground:\n                    - Sources:\n                      - a.swift\n                    - Resources\n                \"\"\"\n                try createDirectories(directories)\n\n                let excludes = [\n                    \"B\",\n                    \"d.m\",\n                    \"E/F/*.swift\",\n                    \"G/H/\",\n                    \"types/*.[hx]\",\n                    \"numbers/file[2-3].a\",\n                    \"partial/*_part\",\n                    \"ignore.file\",\n                    \"*.ignored\",\n                    \"*.xcodeproj\",\n                    \"*.playground\",\n                    \"**/*.ignored\",\n                    \"A/B/**/*.alsoIgnored\",\n                ]\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [TargetSource(path: \"Sources\", excludes: excludes)])\n\n                func test(generateEmptyDirectories: Bool) throws {\n                    let options = SpecOptions(generateEmptyDirectories: generateEmptyDirectories)\n                    let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n                    let pbxProj = try project.generatePbxProj()\n                    try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"a.swift\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"a.alsoIgnored\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"D\", \"d.h\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"D\", \"d.m\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"E\", \"e.jpg\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"E\", \"e.m\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"E\", \"e.h\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"types\", \"a.swift\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"numbers\", \"file1.a\"])\n                    try pbxProj.expectFile(paths: [\"Sources\", \"numbers\", \"file4.a\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"B\", \"b.swift\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"E\", \"F\", \"f.swift\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"G\", \"H\", \"h.swift\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"types\", \"a.h\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"types\", \"a.x\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"numbers\", \"file2.a\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"numbers\", \"file3.a\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"partial\", \"file_part\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"a.ignored\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"ignore.file\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"project.xcodeproj\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"a.playground\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"A\", \"a.ignored\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"A\", \"B\", \"b.ignored\"])\n                    try pbxProj.expectFileMissing(paths: [\"Sources\", \"A\", \"B\", \"b.alsoIgnored\"])\n                }\n\n                try test(generateEmptyDirectories: false)\n                try test(generateEmptyDirectories: true)\n            }\n\n            $0.it(\"excludes certain ignored files\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                    - .DS_Store\n                    - a.swift.orig\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [TargetSource(path: \"Sources\")])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"a.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"A\", \".DS_Store\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"A\", \"a.swift.orig\"])\n            }\n\n            $0.it(\"generates file sources\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                    - Assets.xcassets\n                    - B:\n                      - b.swift\n                      - c.jpg\n                    - D2.0:\n                      - d.swift\n                    - E.bundle:\n                      - e.json\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    \"Sources/A/a.swift\",\n                    \"Sources/A/B/b.swift\",\n                    \"Sources/A/D2.0/d.swift\",\n                    \"Sources/A/Assets.xcassets\",\n                    \"Sources/A/E.bundle/e.json\",\n                    \"Sources/A/B/c.jpg\",\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources/A\", \"a.swift\"], names: [\"A\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources/A/B\", \"b.swift\"], names: [\"B\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources/A/D2.0\", \"d.swift\"], names: [\"D2.0\", \"d.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources/A/B\", \"c.jpg\"], names: [\"B\", \"c.jpg\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"Sources/A\", \"Assets.xcassets\"], names: [\"A\", \"Assets.xcassets\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"Sources/A/E.bundle\", \"e.json\"], names: [\"E.bundle\", \"e.json\"], buildPhase: .resources)\n            }\n\n            $0.it(\"generates shared sources\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                    - B:\n                      - b.swift\n                      - c.jpg\n                \"\"\"\n                try createDirectories(directories)\n\n                let target1 = Target(name: \"Test1\", type: .framework, platform: .iOS, sources: [\"Sources\"])\n                let target2 = Target(name: \"Test2\", type: .framework, platform: .tvOS, sources: [\"Sources\"])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target1, target2])\n\n                _ = try project.generatePbxProj()\n                // TODO: check there are build files for both targets\n            }\n\n            $0.it(\"generates intermediate groups\") {\n\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - b.swift\n                  F:\n                    - G:\n                      - h.swift\n                  B:\n                    - b.swift\n                \"\"\"\n                try createDirectories(directories)\n                let outOfSourceFile = outOfRootPath + \"C/D/e.swift\"\n                try outOfSourceFile.parent().mkpath()\n                try outOfSourceFile.write(\"\")\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    \"Sources/A/b.swift\",\n                    \"Sources/F/G/h.swift\",\n                    \"../OtherDirectory/C/D/e.swift\",\n                    TargetSource(path: \"Sources/B\", createIntermediateGroups: false),\n                ])\n                let options = SpecOptions(createIntermediateGroups: true)\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"A\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"F\", \"G\", \"h.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"..\", \"OtherDirectory\", \"C\", \"D\", \"e.swift\"], names: [\".\", \"OtherDirectory\", \"C\", \"D\", \"e.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources/B\", \"b.swift\"], names: [\"B\", \"b.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"generates intermediate groups with different projectDirectory\") {\n\n                let directories = \"\"\"\n                Sources:\n                  - a.swift\n                  - b.swift\n                Modules:\n                  - m.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    \"../Sources\",\n                    \"../Modules\",\n                ])\n                let options = SpecOptions(createIntermediateGroups: true)\n                // basePath is a subdirectory (simulating spec in a subdir like ProjectRoot/XcodeGen/)\n                // projectDirectory is the parent (simulating --project pointing to ProjectRoot/)\n                let subdir = directoryPath + \"SubDir\"\n                try subdir.mkpath()\n                let project = Project(basePath: subdir, name: \"Test\", targets: [target], options: options)\n\n                let generator = PBXProjGenerator(project: project, projectDirectory: directoryPath)\n                let pbxProj = try generator.generate()\n\n                // Sources and Modules should have path = \"Sources\"/\"Modules\" (not \"../Sources\")\n                // The intermediate group for TestDirectory should have path = \".\"\n                // So Xcode resolves: projectDir/./Sources = correct\n                // Before fix: path was \"../Sources\", resolving to projectDir/./../Sources = wrong\n                try pbxProj.expectFile(paths: [\".\", \"Sources\", \"a.swift\"], names: [\"TestDirectory\", \"Sources\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\".\", \"Sources\", \"b.swift\"], names: [\"TestDirectory\", \"Sources\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\".\", \"Modules\", \"m.swift\"], names: [\"TestDirectory\", \"Modules\", \"m.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"generates custom groups\") {\n\n                let directories = \"\"\"\n                - Sources:\n                  - a.swift\n                  - A:\n                    - b.swift\n                  - F:\n                    - G:\n                      - h.swift\n                      - i.swift\n                  - B:\n                    - b.swift\n                    - C:\n                      - c.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    TargetSource(path: \"Sources/a.swift\", group: \"CustomGroup1\"),\n                    TargetSource(path: \"Sources/A/b.swift\", group: \"CustomGroup1\"),\n                    TargetSource(path: \"Sources/F/G/h.swift\", group: \"CustomGroup1\"),\n                    TargetSource(path: \"Sources/B\", group: \"CustomGroup2\", createIntermediateGroups: false),\n                    TargetSource(path: \"Sources/F/G/i.swift\", group: \"Sources/F/G/CustomGroup3\"),\n                ])\n\n                let options = SpecOptions(createIntermediateGroups: true)\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"CustomGroup1\", \"Sources/a.swift\"], names: [\"CustomGroup1\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"CustomGroup1\", \"Sources/A/b.swift\"], names: [\"CustomGroup1\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"CustomGroup1\", \"Sources/F/G/h.swift\"], names: [\"CustomGroup1\", \"h.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"F\", \"G\", \"CustomGroup3\", \"i.swift\"], names: [\"Sources\", \"F\", \"G\", \"CustomGroup3\", \"i.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"CustomGroup2\", \"Sources/B\", \"b.swift\"], names: [\"CustomGroup2\", \"B\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"CustomGroup2\", \"Sources/B\", \"C\", \"c.swift\"], names: [\"CustomGroup2\", \"B\", \"C\", \"c.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"generates folder references\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.resource\n                    - b.resource\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    TargetSource(path: \"Sources/A\", type: .folder),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources/A\"], names: [\"A\"], buildPhase: .resources)\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"A\", \"a.swift\"])\n            }\n\n            $0.it(\"generates folder references with createIntermediateGroups\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.resource\n                    - b.resource\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    TargetSource(path: \"Sources/A\", type: .folder),\n                ])\n                let project = Project(\n                    basePath: directoryPath,\n                    name: \"Test\",\n                    targets: [target],\n                    options: .init(createIntermediateGroups: true)\n                )\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"Sources/A\"], names: [\"Sources\", \"A\"], buildPhase: .resources)\n            }\n\n            $0.it(\"adds files to correct build phase\") {\n                let directories = \"\"\"\n                  A:\n                    - file.swift\n                    - file.xcassets\n                    - file.h\n                    - GoogleService-Info.plist\n                    - file.xcconfig\n                    - Localizable.xcstrings\n                  B:\n                    - file.swift\n                    - file.xcassets\n                    - file.h\n                    - Sample.plist\n                    - file.xcconfig\n                  C:\n                    - file.swift\n                    - file.m\n                    - file.mm\n                    - file.cpp\n                    - file.c\n                    - file.S\n                    - file.h\n                    - file.hh\n                    - file.hpp\n                    - file.ipp\n                    - file.tpp\n                    - file.hxx\n                    - file.def\n                    - file.xcconfig\n                    - file.entitlements\n                    - file.gpx\n                    - file.apns\n                    - file.123\n                    - file.xcassets\n                    - file.metal\n                    - file.mlmodel\n                    - file.mlpackage\n                    - file.mlmodelc\n                    - Info.plist\n                    - Intent.intentdefinition\n                    - Configuration.storekit\n                    - Settings.bundle:\n                      - en.lproj:\n                        - Root.strings\n                      - Root.plist\n                    - WithPeriod2.0:\n                      - file.swift\n                    - Documentation.docc\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .framework, platform: .iOS, sources: [\n                    TargetSource(path: \"A\", buildPhase: .resources),\n                    TargetSource(path: \"B\", buildPhase: BuildPhaseSpec.none),\n                    TargetSource(path: \"C\", buildPhase: nil),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"A\", \"file.swift\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"A\", \"file.xcassets\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"A\", \"file.h\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"A\", \"GoogleService-Info.plist\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"A\", \"file.xcconfig\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"A\", \"Localizable.xcstrings\"], buildPhase: .resources)\n\n                try pbxProj.expectFile(paths: [\"B\", \"file.swift\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"B\", \"file.xcassets\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"B\", \"file.h\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"B\", \"Sample.plist\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"B\", \"file.xcconfig\"], buildPhase: BuildPhaseSpec.none)\n\n                try pbxProj.expectFile(paths: [\"C\", \"file.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.m\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.mm\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.cpp\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.c\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.S\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.h\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.hh\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.hpp\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.ipp\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.tpp\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.hxx\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.def\"], buildPhase: .headers)\n                try pbxProj.expectFile(paths: [\"C\", \"file.xcconfig\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.entitlements\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.gpx\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.apns\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.xcconfig\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.xcconfig\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.xcconfig\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.xcassets\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.123\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"C\", \"Info.plist\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"C\", \"file.metal\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.mlmodel\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.mlpackage\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"file.mlmodelc\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"C\", \"Intent.intentdefinition\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"Configuration.storekit\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"C\", \"Settings.bundle\"], buildPhase: .resources)\n                try pbxProj.expectFileMissing(paths: [\"C\", \"Settings.bundle\", \"en.lproj\"])\n                try pbxProj.expectFileMissing(paths: [\"C\", \"Settings.bundle\", \"en.lproj\", \"Root.strings\"])\n                try pbxProj.expectFileMissing(paths: [\"C\", \"Settings.bundle\", \"Root.plist\"])\n                try pbxProj.expectFileMissing(paths: [\"C\", \"WithPeriod2.0\"])\n                try pbxProj.expectFile(paths: [\"C\", \"WithPeriod2.0\", \"file.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"C\", \"Documentation.docc\"], buildPhase: .sources)\n            }\n\n            $0.it(\"only omits the defined Info.plist from resource build phases but not other plists\") {\n                try createDirectories(\"\"\"\n                  A:\n                    - A-Info.plist\n                  B:\n                    - Info.plist\n                    - GoogleServices-Info.plist\n                  C:\n                    - Info.plist\n                    - Info-Production.plist\n                  D:\n                    - Info-Staging.plist\n                    - Info-Production.plist\n                \"\"\")\n\n                // Explicit plist.path value is respected\n                let targetA = Target(\n                    name: \"A\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [\"A\"],\n                    info: Plist(path: \"A/A-Info.plist\")\n                )\n\n                // Automatically picks first 'Info.plist' at the top-level\n                let targetB = Target(\n                    name: \"B\",\n                    type: .application,\n                    platform: .iOS,\n                    sources: [\"B\"]\n                )\n\n                // Also respects INFOPLIST_FILE, ignores other files named Info.plist\n                let targetC = Target(\n                    name: \"C\",\n                    type: .application,\n                    platform: .iOS,\n                    settings: Settings(buildSettings: [\n                        \"INFOPLIST_FILE\": \"C/Info-Production.plist\"\n                    ]),\n                    sources: [\"C\"]\n                )\n\n                // Does not support INFOPLIST_FILE value that requires expanding\n                let targetD = Target(\n                    name: \"D\",\n                    type: .application,\n                    platform: .iOS,\n                    settings: Settings(buildSettings: [\n                        \"ENVIRONMENT\": \"Production\",\n                        \"INFOPLIST_FILE\": \"D/Info-${ENVIRONMENT}.plist\"\n                    ]),\n                    sources: [\"D\"]\n                )\n\n                let project = Project(basePath: directoryPath.absolute(), name: \"Test\", targets: [targetA, targetB, targetC, targetD])\n                let pbxProj = try project.generatePbxProj()\n\n                try pbxProj.expectFile(paths: [\"A\", \"A-Info.plist\"], buildPhase: BuildPhaseSpec.none)\n\n                try pbxProj.expectFile(paths: [\"B\", \"Info.plist\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"B\", \"GoogleServices-Info.plist\"], buildPhase: .resources)\n\n                try pbxProj.expectFile(paths: [\"C\", \"Info.plist\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"C\", \"Info-Production.plist\"], buildPhase: BuildPhaseSpec.none)\n\n                try pbxProj.expectFile(paths: [\"D\", \"Info-Staging.plist\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"D\", \"Info-Production.plist\"], buildPhase: .resources)\n            }\n\n            $0.it(\"sets file type properties\") {\n                let directories = \"\"\"\n                  A:\n                    - file.resource1\n                    - file.source1\n                    - file.abc:\n                        - file.a\n                    - file.exclude1\n                    - file.unphased1\n                    - ignored.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .framework, platform: .iOS, sources: [\n                    TargetSource(path: \"A\"),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: .init(fileTypes: [\n                    \"abc\": FileType(buildPhase: .sources),\n                    \"source1\": FileType(buildPhase: .sources, attributes: [\"a1\", \"a2\"], resourceTags: [\"r1\", \"r2\"], compilerFlags: [\"-c1\", \"-c2\"]),\n                    \"resource1\": FileType(buildPhase: .resources, attributes: [\"a1\", \"a2\"], resourceTags: [\"r1\", \"r2\"], compilerFlags: [\"-c1\", \"-c2\"]),\n                    \"unphased1\": FileType(buildPhase: BuildPhaseSpec.none),\n                    \"swift\": FileType(buildPhase: .resources),\n                ]))\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"A\", \"file.abc\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"A\", \"file.source1\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"A\", \"file.resource1\"], buildPhase: .resources)\n                try pbxProj.expectFile(paths: [\"A\", \"file.unphased1\"], buildPhase: BuildPhaseSpec.none)\n                try pbxProj.expectFile(paths: [\"A\", \"ignored.swift\"], buildPhase: .resources)\n\n                do {\n                    let fileReference = try unwrap(pbxProj.getFileReference(paths: [\"A\", \"file.resource1\"], names: [\"A\", \"file.resource1\"]))\n                    let buildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file === fileReference }))\n                    let settings = buildFile.settings ?? [:]\n                    try expect(settings[\"ATTRIBUTES\"]?.arrayValue) == [\"a1\", \"a2\"]\n                    try expect(settings[\"ASSET_TAGS\"]?.arrayValue) == [\"r1\", \"r2\"]\n                }\n                do {\n                    let fileReference = try unwrap(pbxProj.getFileReference(paths: [\"A\", \"file.source1\"], names: [\"A\", \"file.source1\"]))\n                    let buildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file === fileReference }))\n                    let settings = buildFile.settings ?? [:]\n                    try expect(settings[\"ATTRIBUTES\"]?.arrayValue) == [\"a1\", \"a2\"]\n                    try expect(settings[\"COMPILER_FLAGS\"]?.stringValue) == \"-c1 -c2\"\n                }\n            }\n\n            $0.it(\"duplicate TargetSource is included once in sources build phase\") {\n                let directories = \"\"\"\n                Sources:\n                  A:\n                    - a.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    \"Sources/A/a.swift\",\n                    \"Sources/A/a.swift\",\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources/A\", \"a.swift\"], names: [\"A\", \"a.swift\"], buildPhase: .sources)\n\n                let sourcesBuildPhase = pbxProj.buildPhases.first(where: { $0.buildPhase == BuildPhase.sources })!\n\n                try expect(sourcesBuildPhase.files?.count) == 1\n            }\n\n            $0.it(\"add only carthage dependencies with same platform\") {\n                let directories = \"\"\"\n                    A:\n                    - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let watchTarget = Target(name: \"Watch\", type: .watch2App, platform: .watchOS, sources: [\"A\"], dependencies: [Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire_watch\")])\n                let watchDependency = Dependency(type: .target, reference: \"Watch\")\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"A\"], dependencies: [Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire\"), watchDependency])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target, watchTarget])\n\n                let pbxProj = try project.generatePbxProj()\n                let carthagePhase = pbxProj.nativeTargets.first(where: { $0.name == \"Test\" })?.buildPhases.first(where: { $0 is PBXShellScriptBuildPhase }) as? PBXShellScriptBuildPhase\n                try expect(carthagePhase?.inputPaths) == [\"$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework\"]\n            }\n\n            $0.it(\"derived directories are sorted last\") {\n                let directories = \"\"\"\n                    A:\n                    - file.swift\n                    P:\n                    - file.swift\n                    S:\n                    - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\"A\", \"P\", \"S\"], dependencies: [Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire\")])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let groups = try pbxProj.getMainGroup().children.map { $0.nameOrPath }\n                try expect(groups) == [\"A\", \"P\", \"S\", \"Frameworks\", \"Products\"]\n            }\n\n            $0.it(\"sorts files\") {\n                let directories = \"\"\"\n                    A:\n                    - A.swift\n                    Source:\n                        - file.swift\n                    Sources:\n                    - file3.swift\n                    - file.swift\n                    - 10file.a\n                    - 1file.a\n                    - file2.swift\n                    - group2:\n                        - file.swift\n                    - group:\n                        - file.swift\n                    Z:\n                    - A:\n                        - file.swift\n                    B:\n                    - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    \"Sources\",\n                    TargetSource(path: \"Source\", name: \"S\"),\n                    \"A\",\n                    TargetSource(path: \"Z/A\", name: \"B\"),\n                    \"B\",\n                ], dependencies: [Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: \"Alamofire\")])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                let mainGroup = try pbxProj.getMainGroup()\n                let mainGroupNames = mainGroup.children.prefix(5).map { $0.name }\n                try expect(mainGroupNames) == [\n                    nil,\n                    nil,\n                    \"B\",\n                    \"S\",\n                    nil,\n                ]\n                let mainGroupPaths = mainGroup.children.prefix(5).map { $0.path }\n                try expect(mainGroupPaths) == [\n                    \"A\",\n                    \"B\",\n                    \"Z/A\",\n                    \"Source\",\n                    \"Sources\",\n                ]\n\n                let group = mainGroup.children.compactMap { $0 as? PBXGroup }.first { $0.path == \"Sources\" }!\n                let names = group.children.map { $0.name }\n                try expect(names) == [\n                    nil,\n                    nil,\n                    nil,\n                    nil,\n                    nil,\n                    nil,\n                    nil,\n                ]\n                let paths = group.children.map { $0.path }\n                try expect(paths) == [\n                    \"1file.a\",\n                    \"10file.a\",\n                    \"file.swift\",\n                    \"file2.swift\",\n                    \"file3.swift\",\n                    \"group\",\n                    \"group2\",\n                ]\n            }\n\n            $0.it(\"adds missing optional files and folders\") {\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    TargetSource(path: \"File1.swift\", optional: true),\n                    TargetSource(path: \"File2.swift\", type: .file, optional: true),\n                    TargetSource(path: \"Group\", type: .folder, optional: true),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"File1.swift\"])\n                try pbxProj.expectFile(paths: [\"File2.swift\"])\n            }\n\n            $0.it(\"allows missing optional groups\") {\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    TargetSource(path: \"Group1\", optional: true),\n                    TargetSource(path: \"Group2\", type: .group, optional: true),\n                    TargetSource(path: \"Group3\", type: .group, optional: true),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n                _ = try project.generatePbxProj()\n            }\n\n            $0.it(\"relative path items outside base path are grouped together\") {\n                let directories = \"\"\"\n                Sources:\n                  - Inside:\n                    - a.swift\n                    - Inside2:\n                        - b.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let outOfSourceFile1 = outOfRootPath + \"Outside/a.swift\"\n                try outOfSourceFile1.parent().mkpath()\n                try outOfSourceFile1.write(\"\")\n\n                let outOfSourceFile2 = outOfRootPath + \"Outside/Outside2/b.swift\"\n                try outOfSourceFile2.parent().mkpath()\n                try outOfSourceFile2.write(\"\")\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [\n                    \"Sources\",\n                    \"../OtherDirectory\",\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n                try pbxProj.expectFile(paths: [\"Sources\", \"Inside\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"Sources\", \"Inside\", \"Inside2\", \"b.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"../OtherDirectory\", \"Outside\", \"a.swift\"], names: [\"OtherDirectory\", \"Outside\", \"a.swift\"], buildPhase: .sources)\n                try pbxProj.expectFile(paths: [\"../OtherDirectory\", \"Outside\", \"Outside2\", \"b.swift\"], names: [\"OtherDirectory\", \"Outside\", \"Outside2\", \"b.swift\"], buildPhase: .sources)\n            }\n\n            $0.it(\"correctly adds target source attributes\") {\n                let directories = \"\"\"\n                A:\n                  - Intent.intentdefinition\n                \"\"\"\n                try createDirectories(directories)\n\n                let definition: String = \"Intent.intentdefinition\"\n\n                let target = Target(name: \"Test\", type: .framework, platform: .iOS, sources: [\n                    TargetSource(path: \"A/\\(definition)\", buildPhase: .sources, attributes: [\"no_codegen\"]),\n                ])\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n\n                let pbxProj = try project.generatePbxProj()\n\n                let fileReference = pbxProj.getFileReference(\n                    paths: [\"A\", definition],\n                    names: [\"A\", definition]\n                )\n                let buildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file == fileReference }))\n\n                try pbxProj.expectFile(paths: [\"A\", definition], buildPhase: .sources)\n\n                if buildFile.settings?[\"ATTRIBUTES\"]?.arrayValue != [\"no_codegen\"] {\n                    throw failure(\"File does not contain no_codegen attribute\")\n                }\n            }\n\n            $0.it(\"includes only the specified files when includes is present\") {\n                let directories = \"\"\"\n                Sources:\n                  - file3.swift\n                  - file3Tests.swift\n                  - file2.swift\n                  - file2Tests.swift\n                  - group2:\n                    - file.swift\n                    - fileTests.swift\n                  - group:\n                    - file.swift\n                  - group3:\n                    - group4:\n                      - group5:\n                        - file.swift\n                        - file5Tests.swift\n                        - file6Tests.m\n                        - file6Tests.h\n                \"\"\"\n                try createDirectories(directories)\n\n                let includes = [\n                    \"**/*Tests.*\",\n                ]\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [TargetSource(path: \"Sources\", includes: includes)])\n\n                let options = SpecOptions(createIntermediateGroups: true, generateEmptyDirectories: true)\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target], options: options)\n                let pbxProj = try project.generatePbxProj()\n\n                try pbxProj.expectFile(paths: [\"Sources\", \"file2Tests.swift\"])\n                try pbxProj.expectFile(paths: [\"Sources\", \"file3Tests.swift\"])\n                try pbxProj.expectFile(paths: [\"Sources\", \"group2\", \"fileTests.swift\"])\n                try pbxProj.expectFile(paths: [\"Sources\", \"group3\", \"group4\", \"group5\", \"file5Tests.swift\"])\n                try pbxProj.expectFile(paths: [\"Sources\", \"group3\", \"group4\", \"group5\", \"file6Tests.h\"])\n                try pbxProj.expectFile(paths: [\"Sources\", \"group3\", \"group4\", \"group5\", \"file6Tests.m\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file2.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file3.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group2\", \"file.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group\", \"file.swift\"])\n            }\n\n            $0.it(\"handles includes with no matches correctly\") {\n                let directories = \"\"\"\n                Sources:\n                  - file3.swift\n                  - file3Tests.swift\n                  - file2.swift\n                  - file2Tests.swift\n                  - group2:\n                    - file.swift\n                    - fileTests.swift\n                  - group:\n                    - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let includes = [\n                    \"**/*NonExistent.*\",\n                ]\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [TargetSource(path: \"Sources\", includes: includes)])\n\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n                let pbxProj = try project.generatePbxProj()\n\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file2.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file3.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file2Tests.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file3Tests.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group2\", \"file.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group2\", \"fileTests.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group\", \"file.swift\"])\n            }\n\n            $0.it(\"prioritizes excludes over includes when both are present\") {\n                let directories = \"\"\"\n                Sources:\n                  - file3.swift\n                  - file3Tests.swift\n                  - file2.swift\n                  - file2Tests.swift\n                  - group2:\n                    - file.swift\n                    - fileTests.swift\n                  - group:\n                    - file.swift\n                \"\"\"\n                try createDirectories(directories)\n\n                let includes = [\n                    \"**/*Tests.*\",\n                ]\n\n                let excludes = [\n                    \"group2\",\n                ]\n\n                let target = Target(name: \"Test\", type: .application, platform: .iOS, sources: [TargetSource(path: \"Sources\", excludes: excludes, includes: includes)])\n\n                let project = Project(basePath: directoryPath, name: \"Test\", targets: [target])\n                let pbxProj = try project.generatePbxProj()\n\n                try pbxProj.expectFile(paths: [\"Sources\", \"file2Tests.swift\"])\n                try pbxProj.expectFile(paths: [\"Sources\", \"file3Tests.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group2\", \"fileTests.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file2.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"file3.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group2\", \"file.swift\"])\n                try pbxProj.expectFileMissing(paths: [\"Sources\", \"group\", \"file.swift\"])\n            }\n\n            $0.describe(\"Localized sources\") {\n                $0.context(\"With localized sources\") {\n                    $0.it(\"*.intentdefinition should be added to source phase\") {\n                        let directories = \"\"\"\n                        Sources:\n                            Base.lproj:\n                                - Intents.intentdefinition\n                            en.lproj:\n                                - Intents.strings\n                            ja.lproj:\n                                - Intents.strings\n                        \"\"\"\n                        try createDirectories(directories)\n                        let directoryPath = Path(\"TestDirectory\")\n\n                        let target = Target(name: \"IntentDefinitions\",\n                                            type: .application,\n                                            platform: .iOS,\n                                            sources: [TargetSource(path: \"Sources\")])\n                        let project = Project(basePath: directoryPath,\n                                              name: \"IntendDefinitions\",\n                                              targets: [target])\n                        let pbxProj = try project.generatePbxProj()\n                        let sourceBuildPhase = try unwrap(pbxProj.buildPhases.first { $0.buildPhase == .sources })\n                        try expect(sourceBuildPhase.files?.compactMap { $0.file?.nameOrPath }) == [\"Intents.intentdefinition\"]\n                    }\n                }\n\n                $0.context(\"With localized sources with buildPhase\") {\n                    $0.it(\"*.intentdefinition with buildPhase should be added to resource phase\") {\n                        let directories = \"\"\"\n                        Sources:\n                            Base.lproj:\n                                - Intents.intentdefinition\n                            en.lproj:\n                                - Intents.strings\n                            ja.lproj:\n                                - Intents.strings\n                        \"\"\"\n                        try createDirectories(directories)\n                        let directoryPath = Path(\"TestDirectory\")\n\n                        let target = Target(name: \"IntentDefinitions\",\n                                            type: .application,\n                                            platform: .iOS,\n                                            sources: [TargetSource(path: \"Sources\", buildPhase: .resources)])\n                        let project = Project(basePath: directoryPath,\n                                              name: \"IntendDefinitions\",\n                                              targets: [target])\n                        let pbxProj = try project.generatePbxProj()\n                        let sourceBuildPhase = try unwrap(pbxProj.buildPhases.first { $0.buildPhase == .sources })\n                        let resourcesBuildPhase = try unwrap(pbxProj.buildPhases.first { $0.buildPhase == .resources })\n                        try expect(sourceBuildPhase.files) == []\n                        try expect(resourcesBuildPhase.files?.compactMap { $0.file?.nameOrPath }) == [\"Intents.intentdefinition\"]\n                    }\n                }\n\n                $0.it(\"generates resource tags\") {\n                    let directories = \"\"\"\n                    A:\n                        - resourceFile.mp4\n                        - resourceFile2.mp4\n                        - sourceFile.swift\n                    \"\"\"\n                    try createDirectories(directories)\n\n                    let target = Target(\n                        name: \"Test\",\n                        type: .application,\n                        platform: .iOS,\n                        sources: [\n                            TargetSource(path: \"A/resourceFile.mp4\", buildPhase: .resources, resourceTags: [\"tag1\", \"tag2\"]),\n                            TargetSource(path: \"A/resourceFile2.mp4\", buildPhase: .resources, resourceTags: [\"tag2\", \"tag3\"]),\n                            TargetSource(path: \"A/sourceFile.swift\", buildPhase: .sources, resourceTags: [\"tag1\", \"tag2\"]),\n                        ]\n                    )\n\n                    let project = Project(basePath: directoryPath,\n                                          name: \"Test\",\n                                          targets: [target])\n\n                    let pbxProj = try project.generatePbxProj()\n\n                    let resourceFileReference = try unwrap(pbxProj.getFileReference(\n                        paths: [\"A\", \"resourceFile.mp4\"],\n                        names: [\"A\", \"resourceFile.mp4\"]\n                    ))\n\n                    let resourceFileReference2 = try unwrap(pbxProj.getFileReference(\n                        paths: [\"A\", \"resourceFile2.mp4\"],\n                        names: [\"A\", \"resourceFile2.mp4\"]\n                    ))\n\n                    let sourceFileReference = try unwrap(pbxProj.getFileReference(\n                        paths: [\"A\", \"sourceFile.swift\"],\n                        names: [\"A\", \"sourceFile.swift\"]\n                    ))\n\n                    try pbxProj.expectFile(paths: [\"A\", \"resourceFile.mp4\"], buildPhase: .resources)\n                    try pbxProj.expectFile(paths: [\"A\", \"resourceFile2.mp4\"], buildPhase: .resources)\n                    try pbxProj.expectFile(paths: [\"A\", \"sourceFile.swift\"], buildPhase: .sources)\n\n                    let resourceBuildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file == resourceFileReference }))\n                    let resourceBuildFile2 = try unwrap(pbxProj.buildFiles.first(where: { $0.file == resourceFileReference2 }))\n                    let sourceBuildFile = try unwrap(pbxProj.buildFiles.first(where: { $0.file == sourceFileReference }))\n\n                    if resourceBuildFile.settings?[\"ASSET_TAGS\"]?.arrayValue != [\"tag1\", \"tag2\"] {\n                        throw failure(\"File does not contain tag1 and tag2 ASSET_TAGS\")\n                    }\n\n                    if resourceBuildFile2.settings?[\"ASSET_TAGS\"]?.arrayValue != [\"tag2\", \"tag3\"] {\n                        throw failure(\"File does not contain tag2 and tag3 ASSET_TAGS\")\n                    }\n\n                    if sourceBuildFile.settings != nil {\n                        throw failure(\"File that buildPhase is source contain settings\")\n                    }\n\n                    if !pbxProj.rootObject!.attributes.keys.contains(\"knownAssetTags\") {\n                        throw failure(\"PBXProject does not contain knownAssetTags\")\n                    }\n\n                    try expect(pbxProj.rootObject!.attributes[\"knownAssetTags\"]?.arrayValue) == [\"tag1\", \"tag2\", \"tag3\"]\n                }\n                \n                $0.it(\"Detects all locales present in a String Catalog\") {\n                    /// This is a catalog with gaps:\n                    /// - String \"foo\" is translated into English (en) and Spanish (es)\n                    /// - String \"bar\" is translated into English (en) and Italian (it)\n                    ///\n                    /// It is aimed at representing real world scenarios where translators have not finished translating all strings into their respective languages.\n                    /// The expectation in this kind of cases is that `includedLocales` returns all locales found at least once in the catalog.\n                    /// In this example, `includedLocales` is expected to be a set only containing \"en\", \"es\" and \"it\".\n                    let stringCatalogContent = \"\"\"\n                    {\n                      \"sourceLanguage\" : \"en\",\n                      \"strings\" : {\n                        \"foo\" : {\n                          \"comment\" : \"Sample string in an asset catalog\",\n                          \"extractionState\" : \"manual\",\n                          \"localizations\" : {\n                            \"en\" : {\n                              \"stringUnit\" : {\n                                \"state\" : \"translated\",\n                                \"value\" : \"Foo English\"\n                              }\n                            },\n                            \"es\" : {\n                              \"stringUnit\" : {\n                                \"state\" : \"translated\",\n                                \"value\" : \"Foo Spanish\"\n                              }\n                            }\n                          }\n                        },\n                        \"bar\" : {\n                          \"comment\" : \"Another sample string in an asset catalog\",\n                          \"extractionState\" : \"manual\",\n                          \"localizations\" : {\n                            \"en\" : {\n                              \"stringUnit\" : {\n                                \"state\" : \"translated\",\n                                \"value\" : \"Bar English\"\n                              }\n                            },\n                            \"it\" : {\n                              \"stringUnit\" : {\n                                \"state\" : \"translated\",\n                                \"value\" : \"Bar Italian\"\n                              }\n                            }\n                          }\n                        }\n                      },\n                      \"version\" : \"1.0\"\n                    }\n                    \"\"\"\n                    \n                    let testStringCatalogRelativePath = Path(\"Localizable.xcstrings\")\n                    let testStringCatalogPath = try createFile(at: testStringCatalogRelativePath, content: stringCatalogContent)\n\n                    guard let stringCatalog = StringCatalog(from: testStringCatalogPath) else {\n                        throw failure(\"Failed decoding string catalog from \\(testStringCatalogPath)\")\n                    }\n                    \n                    try expect(stringCatalog.includedLocales.sorted(by: { $0 < $1 })) == [\"en\", \"es\", \"it\"]\n                }\n            }\n        }\n    }\n}\n\nextension PBXProj {\n\n    /// expect a file within groups of the paths, using optional different names\n    func expectFile(paths: [String], names: [String]? = nil, buildPhase: BuildPhaseSpec? = nil, file: String = #file, line: Int = #line) throws {\n        guard let fileReference = getFileReference(paths: paths, names: names ?? paths) else {\n            var error = \"Could not find file at path \\(paths.joined(separator: \"/\").quoted)\"\n            if let names = names, names != paths {\n                error += \" and name \\(names.joined(separator: \"/\").quoted)\"\n            }\n            error += \"\\n\\(self.printGroups())\"\n            throw failure(error, file: file, line: line)\n        }\n\n        if let buildPhase = buildPhase {\n            let buildFile = buildFiles\n                .first(where: { $0.file === fileReference })\n            let actualBuildPhase = buildFile\n                .flatMap { buildFile in buildPhases.first { $0.files?.contains(buildFile) ?? false } }?.buildPhase\n\n            var error: String?\n            if let buildPhase = buildPhase.buildPhase {\n                if actualBuildPhase != buildPhase {\n                    if let actualBuildPhase = actualBuildPhase {\n                        error = \"is in the \\(actualBuildPhase.rawValue) build phase instead of the expected \\(buildPhase.rawValue.quoted)\"\n                    } else {\n                        error = \"isn't in a build phase when it's expected to be in \\(buildPhase.rawValue.quoted)\"\n                    }\n                }\n            } else if let actualBuildPhase = actualBuildPhase {\n                error = \"is in the \\(actualBuildPhase.rawValue.quoted) build phase when it's expected to not be in any\"\n            }\n            if let error = error {\n                throw failure(\"File \\(paths.joined(separator: \"/\").quoted) \\(error)\", file: file, line: line)\n            }\n        }\n    }\n\n    /// expect a missing file within groups of the paths, using optional different names\n    func expectFileMissing(paths: [String], names: [String]? = nil, file: String = #file, line: Int = #line) throws {\n        let names = names ?? paths\n        if getFileReference(paths: paths, names: names) != nil {\n            throw failure(\"Found unexpected file at path \\(paths.joined(separator: \"/\").quoted) and name \\(paths.joined(separator: \"/\").quoted)\", file: file, line: line)\n        }\n    }\n\n    func getFileReference(paths: [String], names: [String], file: String = #file, line: Int = #line) -> PBXFileReference? {\n        guard let mainGroup = projects.first?.mainGroup else { return nil }\n\n        return getFileReference(group: mainGroup, paths: paths, names: names)\n    }\n\n    private func getFileReference(group: PBXGroup, paths: [String], names: [String]) -> PBXFileReference? {\n        guard !paths.isEmpty else {\n            return nil\n        }\n\n        let path = paths.first!\n        let name = names.first!\n        let restOfPath = Array(paths.dropFirst())\n        let restOfName = Array(names.dropFirst())\n        if restOfPath.isEmpty {\n            let fileReferences: [PBXFileReference] = group.children.compactMap { $0 as? PBXFileReference }\n            return fileReferences.first { ($0.path == nil || $0.path == path) && $0.nameOrPath == name }\n        } else {\n            let groups = group.children.compactMap { $0 as? PBXGroup }\n            guard let group = groups.first(where: { ($0.path == nil || $0.path == path) && $0.nameOrPath == name }) else {\n                return nil\n            }\n            return getFileReference(group: group, paths: restOfPath, names: restOfName)\n        }\n    }\n}\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-cayman"
  },
  {
    "path": "scripts/archive.sh",
    "content": "#!/bin/bash\nPACKAGE_NAME=${EXECUTABLE_NAME:?}\nTMP=$(mktemp -d)/$PACKAGE_NAME\nBINDIR=$TMP/bin\nSHAREDIR=$TMP/share/$PACKAGE_NAME\nZIPFILE=$TMP/${EXECUTABLE_NAME:?}.zip\nINSTALLSH=scripts/install.sh\nLICENSE=LICENSE\n\n# copy\n\nmkdir -p $BINDIR\ncp -f \"$1\" $BINDIR\n\nmkdir -p $SHAREDIR\ncp -R SettingPresets $SHAREDIR/SettingPresets\n\ncp $INSTALLSH $TMP\n\ncp $LICENSE $TMP\n\n# zip\n\n(cd $TMP/..; zip -r $ZIPFILE $PACKAGE_NAME)\n\n# print sha\n\nSHA=$(cat $ZIPFILE | shasum -a 256 | sed 's/ .*//')\necho \"SHA: $SHA\"\nmv $ZIPFILE .\n\n# cleanup\n\nrm -rf $TMP\n"
  },
  {
    "path": "scripts/build-fixtures.sh",
    "content": "#!/bin/bash\nset -e\n\ncd Tests/Fixtures/TestProject\n./build.sh\n"
  },
  {
    "path": "scripts/diff-fixtures.sh",
    "content": "#!/bin/bash\nset -e\n\nif [[ `git status --porcelain Tests/Fixtures` ]]; then\n  echo \"\"\n  echo \"⚠️  Generated fixtures have changed.\"\n  echo \"⚠️  If this is a valid change please run the tests and commit the updates.\"\n  echo \"\"\n  git --no-pager diff --color=always Tests/Fixtures\n  exit 1\nelse\n  echo \"✅  Generated fixtures have not changed.\"\nfi\n"
  },
  {
    "path": "scripts/gen-fixtures.sh",
    "content": "#!/bin/bash\nset -e\n\nswift run xcodegen --spec Tests/Fixtures/TestProject/AnotherProject/project.yml\nswift run xcodegen --spec Tests/Fixtures/TestProject/project.yml\nswift run xcodegen --spec Tests/Fixtures/CarthageProject/project.yml\nswift run xcodegen --spec Tests/Fixtures/SPM/project.yml\n"
  },
  {
    "path": "scripts/install.sh",
    "content": "#!/bin/bash\n#\n# name:\n#   install.sh\n#\n# description:\n#   Install XcodeGen to /usr/local\n#\n#     - /usr/local/bin/xcodegen\n#     - /usr/local/share/xcodegen/SettingPresets\n#\n# parameters:\n#   - 1: install location\n\nPREFIX=${PREFIX:-${1:-/usr/local}}\nBASE_DIR=$(cd `dirname $0`; pwd)\n\ncp -r $BASE_DIR/share \"${PREFIX}\"\ncp -r $BASE_DIR/bin \"${PREFIX}\"\n"
  }
]