diff --git a/CHANGELOG.md b/CHANGELOG.md
index 392bf649..94288556 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,12 @@
## 1.3.0
-### Added
+#### Added
- generate output files for Carthage copy-frameworks script [#84](https://github.com/yonaskolb/XcodeGen/pull/84) @mironal
- added options.settingPreset to choose which setting presets get applied [#100](https://github.com/yonaskolb/XcodeGen/pull/101) @yonaskolb
- added `link` option for target dependencies [#109](https://github.com/yonaskolb/XcodeGen/pull/109) @keith
-### Changed
+#### Changed
- updated to xcproj 0.4.1 [#85](https://github.com/yonaskolb/XcodeGen/pull/85) @enmiller
- don't copy base settings if config type has been left out [#100](https://github.com/yonaskolb/XcodeGen/pull/100) @yonaskolb
- generate localised files under a single variant group [#70](https://github.com/yonaskolb/XcodeGen/pull/70) @ryohey
@@ -17,7 +17,7 @@
- config references in settings can now be partially matched and are case insensitive [#111](https://github.com/yonaskolb/XcodeGen/pull/111) @yonaskolb
- other small internal changes @yonaskolb
-### Fixed
+#### Fixed
- embed Carthage frameworks for macOS [#82](https://github.com/yonaskolb/XcodeGen/pull/82) @toshi0383
- fixed copying of watchOS app resources [#96](https://github.com/yonaskolb/XcodeGen/pull/96) @keith
- automatically ignore more file types for a target's sources (entitlements, gpx, apns) [#94](https://github.com/yonaskolb/XcodeGen/pull/94) @keith
@@ -31,19 +31,19 @@
## 1.2.4
-### Fixed
+#### Fixed
- setting presets only apply `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: YES` to applications
- don't add carthage dependency to `copy-frameworks` script if `embed: false`
- sort group children on APFS
-### Changed
+#### Changed
- update to xcproj 0.3.0
[Commits](https://github.com/yonaskolb/XcodeGen/compare/1.2.3...1.2.4)
## 1.2.3
-### Fixed
+#### Fixed
- Fixed wrong carthage directory name reference for macOS [#74](https://github.com/yonaskolb/XcodeGen/pull/74) @toshi0383
- Removed unnecessary `carthage copy-frameworks` for macOS app target [#76](https://github.com/yonaskolb/XcodeGen/pull/76) @toshi0383
- Added some missing default settings for framework targets. `SKIP_INSTALL: YES` fixes archiving
@@ -53,10 +53,10 @@
## 1.2.2
-### Added
+#### Added
- automatically set `TEST_TARGET_NAME` on UI test targets if one of the dependencies is an application target
-### Fixed
+#### Fixed
- set `DYLIB_INSTALL_NAME_BASE` to `@rpath` in framework target presets
- fixed tvOS launch screen setting. `ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME` is now `LaunchImage` not `tvOS LaunchImage`
@@ -65,7 +65,7 @@
## 1.2.0
-### Added
+#### Added
- `include` now supports a single string as well as a list
- add support setting xcconfig files on a project with `configFiles` [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64)
- add `fileGroups` to project spec for adding groups of files that aren't target source files [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64)
@@ -74,7 +74,7 @@
- add `:REPLACE` syntax when merging `include` [PR#68](https://github.com/yonaskolb/XcodeGen/pull/68)
- add `mint` installation support
-### Fixed
+#### Fixed
- fixed homebrew installation
- fixed target xcconfig files not working via `configFiles` [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64)
- look for `INFOPLIST_FILE` setting in project and xcconfig files before adding it automatically. It was just looking in target settings before [PR#64](https://github.com/yonaskolb/XcodeGen/pull/64)
@@ -84,13 +84,13 @@
## 1.1.0
-### Changed
+#### Changed
- set project version to Xcode 9 - `LastUpgradeVersion` attribute to `0900`
- set default Swift version to 4.0 - `SWIFT_VERSION` build setting to `4.0`
[Commits](https://github.com/yonaskolb/XcodeGen/compare/1.0.1...1.1.0)
-## 1.0.1
+### 1.0.1
### Fixed
- fixed incorrect default build script shell path
@@ -100,15 +100,15 @@
## 1.0.0
-### Added
+#### Added
- Swift 4 support [PR#52](https://github.com/yonaskolb/XcodeGen/pull/52)
- Support for C and C++ files [PR#48](https://github.com/yonaskolb/XcodeGen/pull/48) by @antoniocasero
- Xcode 9 default settings
-### Fixed
+#### Fixed
- fixed empty string in YAML not being parsed properly [PR#50](https://github.com/yonaskolb/XcodeGen/pull/50) by @antoniocasero
-### Changed
+#### Changed
- updated to xcodeproj 0.1.2 [PR#56](https://github.com/yonaskolb/XcodeGen/pull/56)
- **BREAKING**: changed target definitions from list to map [PR#54](https://github.com/yonaskolb/XcodeGen/pull/54) See [Project Spec](docs/ProjectSpec.md)
@@ -117,10 +117,10 @@
## 0.6.1
-### Added
+#### Added
- Ability to set PBXProject attributes [PR#45](https://github.com/yonaskolb/XcodeGen/pull/45)
-### Changed
+#### Changed
- Don't bother linking target frameworks for target dependencies.
- Move code signing default settings from all iOS targets to iOS application targets, via Product + Platform setting preset files [PR#46](https://github.com/yonaskolb/XcodeGen/pull/46)
@@ -128,10 +128,10 @@
## 0.6.0
-### Added
+#### Added
- Allow a project spec to include other project specs [PR#44](https://github.com/yonaskolb/XcodeGen/pull/44)
-### Changed
+#### Changed
- Changed default spec path to `project.yml`
- Changed default project directory to the current directory instead of the spec file's directory
@@ -139,7 +139,7 @@
## 0.5.1
-### Fixed
+#### Fixed
- Fix embedded framework dependencies
- Add `CODE_SIGN_IDENTITY[sdk=iphoneos*]` back to iOS targets
- Fix build scripts with "" generating invalid projects [PR#43](https://github.com/yonaskolb/XcodeGen/pull/43)
@@ -147,60 +147,61 @@
[Commits](https://github.com/yonaskolb/XcodeGen/compare/0.5.0...0.5.1)
## 0.5.0
-### Added
+#### Added
- Added multi platform targets [PR#35](https://github.com/yonaskolb/XcodeGen/pull/35)
- Automatically generate platform specific `FRAMEWORK_SEARCH_PATHS` for Carthage dependencies [PR#38](https://github.com/yonaskolb/XcodeGen/pull/38)
- Automatically find Info.plist and set `INFOPLIST_FILE` build setting if it doesn't exist on a target [PR#40](https://github.com/yonaskolb/XcodeGen/pull/40)
- Add options for controlling embedding of dependencies [PR#37](https://github.com/yonaskolb/XcodeGen/pull/37)
-### Fixed
+#### Fixed
- Fixed localized files not being added to a target's resources
-### Changed
+#### Changed
- Renamed Setting Presets to Setting Groups
- Carthage group is now created under top level Frameworks group
[Commits](https://github.com/yonaskolb/XcodeGen/compare/0.4.0...0.5.0)
## 0.4.0
-### Added
+
+##### Added
- Homebrew support [PR#16](https://github.com/yonaskolb/XcodeGen/pull/16) by @pepibumur
- Added `runOnlyWhenInstalling` to build scripts [PR#32](https://github.com/yonaskolb/XcodeGen/pull/32)
- Added `carthageBuildPath` option [PR#34](https://github.com/yonaskolb/XcodeGen/pull/34)
-### Fixed
+#### Fixed
- Fixed installations of XcodeGen not applying build setting presets for configs, products, and platforms, due to missing resources
-### Changed
+#### Changed
- Upgraded to https://github.com/swift-xcode/xcodeproj 0.1.1 [PR#33](https://github.com/yonaskolb/XcodeGen/pull/33)
[Commits](https://github.com/yonaskolb/XcodeGen/compare/0.3.0...0.4.0)
## 0.3.0 - Extensions and Scheme Tests
-### Added
+#### Added
- Support for app extension dependencies, using the same `target: MyExtension` syntax [PR#19](https://github.com/yonaskolb/XcodeGen/pull/19)
- Added test targets to generated target schemes via `Target.scheme.testTargets` [PR#21](https://github.com/yonaskolb/XcodeGen/pull/21)
-### Changed
+#### Changed
- Updated xcodeproj to 0.0.9
-### Fixed
+#### Fixed
- Fixed watch and messages apps not copying carthage dependencies
-### Breaking changes
+#### Breaking changes
- Changed `Target.generatedSchemes` to `Target.scheme.configVariants`
[Commits](https://github.com/yonaskolb/XcodeGen/compare/0.2...0.3.0)
## 0.2.0 - Build scripts
-### Added
+#### Added
- Added Target build scripts with `Target.prebuildScripts` and `Target.postbuildScripts` [PR#17](https://github.com/yonaskolb/XcodeGen/pull/17)
- Support for absolute paths in target sources, run script files, and config files
- Add validation for incorrect `Target.configFiles`
-### Fixed
+#### Fixed
- Fixed some project objects sometimes having duplicate ids
[Commits](https://github.com/yonaskolb/XcodeGen/compare/0.1...0.2)
diff --git a/Fixtures/TestProject/.gitignore b/Fixtures/TestProject/.gitignore
new file mode 100644
index 00000000..b08b1c9e
--- /dev/null
+++ b/Fixtures/TestProject/.gitignore
@@ -0,0 +1 @@
+Carthage
diff --git a/Fixtures/TestProject/TestProject/AppDelegate.swift b/Fixtures/TestProject/App_iOS/AppDelegate.swift
similarity index 78%
rename from Fixtures/TestProject/TestProject/AppDelegate.swift
rename to Fixtures/TestProject/App_iOS/AppDelegate.swift
index e5c4cd64..b32ceaee 100644
--- a/Fixtures/TestProject/TestProject/AppDelegate.swift
+++ b/Fixtures/TestProject/App_iOS/AppDelegate.swift
@@ -7,7 +7,7 @@
//
import UIKit
-import MyFramework
+import Framework
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
@@ -17,7 +17,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
- let frameworkStruct = FrameworkStruct()
+ _ = FrameworkStruct()
+ // Standalone files added to project by path-to-file.
+ _ = standaloneHello()
return true
}
diff --git a/Fixtures/TestProject/TestProject/Assets.xcassets/AppIcon.appiconset/Contents.json b/Fixtures/TestProject/App_iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from Fixtures/TestProject/TestProject/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to Fixtures/TestProject/App_iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/Fixtures/TestProject/TestProject/Base.lproj/LaunchScreen.storyboard b/Fixtures/TestProject/App_iOS/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from Fixtures/TestProject/TestProject/Base.lproj/LaunchScreen.storyboard
rename to Fixtures/TestProject/App_iOS/Base.lproj/LaunchScreen.storyboard
diff --git a/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.strings b/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.strings
new file mode 100644
index 00000000..84643cdc
--- /dev/null
+++ b/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.strings
@@ -0,0 +1,7 @@
+/*
+ Localizable.strings
+ Project
+
+ Created by ryohey on 2017/11/03.
+
+*/
diff --git a/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.stringsdict b/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.stringsdict
new file mode 100644
index 00000000..458f0f3e
--- /dev/null
+++ b/Fixtures/TestProject/App_iOS/Base.lproj/Localizable.stringsdict
@@ -0,0 +1,30 @@
+
+
+
+
+ StringKey
+
+ NSStringLocalizedFormatKey
+ %#@VARIABLE@
+ Variable
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+
+ zero
+
+ one
+
+ two
+
+ few
+
+ many
+
+ other
+
+
+
+
+
diff --git a/Fixtures/TestProject/TestProject/Base.lproj/LocalizedStoryboard.storyboard b/Fixtures/TestProject/App_iOS/Base.lproj/LocalizedStoryboard.storyboard
similarity index 100%
rename from Fixtures/TestProject/TestProject/Base.lproj/LocalizedStoryboard.storyboard
rename to Fixtures/TestProject/App_iOS/Base.lproj/LocalizedStoryboard.storyboard
diff --git a/Fixtures/TestProject/TestProject/Base.lproj/Main.storyboard b/Fixtures/TestProject/App_iOS/Base.lproj/Main.storyboard
similarity index 100%
rename from Fixtures/TestProject/TestProject/Base.lproj/Main.storyboard
rename to Fixtures/TestProject/App_iOS/Base.lproj/Main.storyboard
diff --git a/Fixtures/TestProject/TestProject/Info.plist b/Fixtures/TestProject/App_iOS/Info.plist
similarity index 100%
rename from Fixtures/TestProject/TestProject/Info.plist
rename to Fixtures/TestProject/App_iOS/Info.plist
diff --git a/Fixtures/TestProject/TestProject/ViewController.swift b/Fixtures/TestProject/App_iOS/ViewController.swift
similarity index 100%
rename from Fixtures/TestProject/TestProject/ViewController.swift
rename to Fixtures/TestProject/App_iOS/ViewController.swift
diff --git a/Fixtures/TestProject/App_iOS/en.lproj/Localizable.strings b/Fixtures/TestProject/App_iOS/en.lproj/Localizable.strings
new file mode 100644
index 00000000..84643cdc
--- /dev/null
+++ b/Fixtures/TestProject/App_iOS/en.lproj/Localizable.strings
@@ -0,0 +1,7 @@
+/*
+ Localizable.strings
+ Project
+
+ Created by ryohey on 2017/11/03.
+
+*/
diff --git a/Fixtures/TestProject/App_iOS/en.lproj/Localizable.stringsdict b/Fixtures/TestProject/App_iOS/en.lproj/Localizable.stringsdict
new file mode 100644
index 00000000..458f0f3e
--- /dev/null
+++ b/Fixtures/TestProject/App_iOS/en.lproj/Localizable.stringsdict
@@ -0,0 +1,30 @@
+
+
+
+
+ StringKey
+
+ NSStringLocalizedFormatKey
+ %#@VARIABLE@
+ Variable
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+
+ zero
+
+ one
+
+ two
+
+ few
+
+ many
+
+ other
+
+
+
+
+
diff --git a/Fixtures/TestProject/TestProject/en.lproj/LocalizedStoryboard.strings b/Fixtures/TestProject/App_iOS/en.lproj/LocalizedStoryboard.strings
similarity index 100%
rename from Fixtures/TestProject/TestProject/en.lproj/LocalizedStoryboard.strings
rename to Fixtures/TestProject/App_iOS/en.lproj/LocalizedStoryboard.strings
diff --git a/Fixtures/TestProject/TestProjectTests/Info.plist b/Fixtures/TestProject/App_iOS_Tests/Info.plist
similarity index 100%
rename from Fixtures/TestProject/TestProjectTests/Info.plist
rename to Fixtures/TestProject/App_iOS_Tests/Info.plist
diff --git a/Fixtures/TestProject/TestProjectTests/TestProjectTests.swift b/Fixtures/TestProject/App_iOS_Tests/TestProjectTests.swift
similarity index 100%
rename from Fixtures/TestProject/TestProjectTests/TestProjectTests.swift
rename to Fixtures/TestProject/App_iOS_Tests/TestProjectTests.swift
diff --git a/Fixtures/TestProject/Cartfile b/Fixtures/TestProject/Cartfile
new file mode 100644
index 00000000..821b0ae3
--- /dev/null
+++ b/Fixtures/TestProject/Cartfile
@@ -0,0 +1 @@
+github "Alamofire/Alamofire"
diff --git a/Fixtures/TestProject/Cartfile.resolved b/Fixtures/TestProject/Cartfile.resolved
new file mode 100644
index 00000000..a8c2ced7
--- /dev/null
+++ b/Fixtures/TestProject/Cartfile.resolved
@@ -0,0 +1 @@
+github "Alamofire/Alamofire" "4.5.1"
diff --git a/Fixtures/TestProject/MyFramework/FrameworkFile.swift b/Fixtures/TestProject/Framework/FrameworkFile.swift
similarity index 100%
rename from Fixtures/TestProject/MyFramework/FrameworkFile.swift
rename to Fixtures/TestProject/Framework/FrameworkFile.swift
diff --git a/Fixtures/TestProject/MyFramework/Info.plist b/Fixtures/TestProject/Framework/Info.plist
similarity index 100%
rename from Fixtures/TestProject/MyFramework/Info.plist
rename to Fixtures/TestProject/Framework/Info.plist
diff --git a/Fixtures/TestProject/Framework/MyFramework.h b/Fixtures/TestProject/Framework/MyFramework.h
new file mode 100644
index 00000000..739f2414
--- /dev/null
+++ b/Fixtures/TestProject/Framework/MyFramework.h
@@ -0,0 +1,9 @@
+//
+// MyFramework.h
+// MyFramework
+//
+// Created by Yonas Kolb on 21/7/17.
+// Copyright © 2017 Yonas Kolb. All rights reserved.
+//
+
+
diff --git a/Fixtures/TestProject/GeneratedProject.xcodeproj/project.pbxproj b/Fixtures/TestProject/GeneratedProject.xcodeproj/project.pbxproj
deleted file mode 100644
index e3d1e4c9..00000000
--- a/Fixtures/TestProject/GeneratedProject.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,725 +0,0 @@
-// !$*UTF8*$!
-{
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- BF1073850101 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR1332263601 /* AppDelegate.swift */; };
- BF1462768401 = {isa = PBXBuildFile; fileRef = FR2653659501 /* TestProjectTests.xctest */; };
- BF1744565901 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR6218091901 /* ViewController.swift */; };
- BF2250910101 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG2043127501 /* Main.storyboard */; };
- BF2445564001 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG2858723001 /* LaunchScreen.storyboard */; };
- BF2513089601 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG3182922801 /* LocalizedStoryboard.storyboard */; };
- BF2753556301 = {isa = PBXBuildFile; fileRef = FR2993497801 /* MyFramework.framework */; };
- BF3154421201 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR5980633301 /* Assets.xcassets */; };
- BF3515549501 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR7740960501 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BF3862341101 /* MyFramework.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR2993497801 /* MyFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- BF5986511201 = {isa = PBXBuildFile; fileRef = FR6523263101 /* TestProject.app */; };
- BF6182896901 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR9215298301 /* Result.framework */; };
- BF7015992001 /* MyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR2993497801 /* MyFramework.framework */; };
- BF9001417701 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR6877173101 /* TestProjectTests.swift */; };
- BF9155249601 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR7078510801 /* FrameworkFile.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- CIP265365901 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = P81399456601 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = NT6523263101;
- remoteInfo = TestProject;
- };
- CIP652326301 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = P81399456601 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = NT2993497801;
- remoteInfo = MyFramework;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- CFBP50493301 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- BF3862341101 /* MyFramework.framework in CopyFiles */,
- );
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- FR1332263601 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- FR1345298501 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- FR1345298502 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- FR1345298503 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- FR1473702401 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- FR2653659501 /* TestProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = xctest; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = TestProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- FR2993497801 /* MyFramework.framework */ = {isa = PBXFileReference; explicitFileType = framework; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = MyFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- FR3546283901 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; };
- FR4822987701 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; };
- FR5980633301 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- FR6218091901 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
- FR6334256101 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
- FR6405436301 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- FR6523263101 /* TestProject.app */ = {isa = PBXFileReference; explicitFileType = app; includeInIndex = 0; lastKnownFileType = wrapper.application; path = TestProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
- FR6877173101 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
- FR7078510801 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; };
- FR7740960501 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; };
- FR8182352201 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; };
- FR9215298301 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Result.framework; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- FBP652326301 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BF7015992001 /* MyFramework.framework in Frameworks */,
- BF6182896901 /* Result.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- G19527407101 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- G28836901501 /* Carthage */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- G26536595301 /* TestProjectTests */ = {
- isa = PBXGroup;
- children = (
- FR1345298503 /* Info.plist */,
- FR6877173101 /* TestProjectTests.swift */,
- );
- name = TestProjectTests;
- path = TestProjectTests;
- sourceTree = "";
- };
- G28836901501 /* Carthage */ = {
- isa = PBXGroup;
- children = (
- G47994500501 /* iOS */,
- );
- name = Carthage;
- path = Carthage/Build;
- sourceTree = "";
- };
- G29934978701 /* MyFramework */ = {
- isa = PBXGroup;
- children = (
- FR7078510801 /* FrameworkFile.swift */,
- FR1345298501 /* Info.plist */,
- FR7740960501 /* MyFramework.h */,
- );
- name = MyFramework;
- path = MyFramework;
- sourceTree = "";
- };
- G47994500501 /* iOS */ = {
- isa = PBXGroup;
- children = (
- FR9215298301 /* Result.framework */,
- );
- name = iOS;
- path = iOS;
- sourceTree = "";
- };
- G65232631501 /* TestProject */ = {
- isa = PBXGroup;
- children = (
- FR1332263601 /* AppDelegate.swift */,
- FR5980633301 /* Assets.xcassets */,
- FR1345298502 /* Info.plist */,
- FR6218091901 /* ViewController.swift */,
- VG2858723001 /* LaunchScreen.storyboard */,
- VG3182922801 /* LocalizedStoryboard.storyboard */,
- VG2043127501 /* Main.storyboard */,
- );
- name = TestProject;
- path = TestProject;
- sourceTree = "";
- };
- G83406189501 /* Configs */ = {
- isa = PBXGroup;
- children = (
- FR3546283901 /* base.xcconfig */,
- FR6334256101 /* config.xcconfig */,
- );
- name = Configs;
- path = Configs;
- sourceTree = "";
- };
- G84487712001 = {
- isa = PBXGroup;
- children = (
- G83406189501 /* Configs */,
- G29934978701 /* MyFramework */,
- G65232631501 /* TestProject */,
- G26536595301 /* TestProjectTests */,
- G86202385201 /* Products */,
- G19527407101 /* Frameworks */,
- );
- sourceTree = "";
- };
- G86202385201 /* Products */ = {
- isa = PBXGroup;
- children = (
- FR2993497801 /* MyFramework.framework */,
- FR2653659501 /* TestProjectTests.xctest */,
- FR6523263101 /* TestProject.app */,
- );
- name = Products;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- HBP265365901 /* Frameworks */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- };
- HBP299349701 /* Frameworks */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BF3515549501 /* MyFramework.h in Headers */,
- );
- };
- HBP652326301 /* Frameworks */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- NT2653659501 /* TestProjectTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = XCCL26536501 /* Build configuration list for PBXNativeTarget "TestProjectTests" */;
- buildPhases = (
- SBP265365901 /* Sources */,
- RBP265365901 /* Resources */,
- HBP265365901 /* Headers */,
- );
- buildRules = (
- );
- dependencies = (
- TD8877980201 /* PBXTargetDependency */,
- );
- name = TestProjectTests;
- productReference = FR2653659501;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- NT2993497801 /* MyFramework */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = XCCL29934901 /* Build configuration list for PBXNativeTarget "MyFramework" */;
- buildPhases = (
- SBP299349701 /* Sources */,
- RBP299349701 /* Resources */,
- HBP299349701 /* Headers */,
- SSBP35382101 /* Swiftlint */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = MyFramework;
- productReference = FR2993497801;
- productType = "com.apple.product-type.framework";
- };
- NT6523263101 /* TestProject */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = XCCL65232601 /* Build configuration list for PBXNativeTarget "TestProject" */;
- buildPhases = (
- SBP652326301 /* Sources */,
- RBP652326301 /* Resources */,
- HBP652326301 /* Headers */,
- FBP652326301 /* Frameworks */,
- CFBP50493301 /* CopyFiles */,
- SSBP58567701 /* Carthage */,
- SSBP24648001 /* Strip Unused Architectures from Frameworks */,
- SSBP19207501 /* Swiftlint */,
- );
- buildRules = (
- );
- dependencies = (
- TD6170761801 /* PBXTargetDependency */,
- );
- name = TestProject;
- productReference = FR6523263101;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- P81399456601 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 0900;
- };
- buildConfigurationList = XCCL81399401 /* Build configuration list for PBXProject "GeneratedProject" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = G84487712001;
- targets = (
- NT2993497801 /* MyFramework */,
- NT6523263101 /* TestProject */,
- NT2653659501 /* TestProjectTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- RBP265365901 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- };
- RBP299349701 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- };
- RBP652326301 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BF3154421201 /* Assets.xcassets in Resources */,
- BF2445564001 /* LaunchScreen.storyboard in Resources */,
- BF2513089601 /* LocalizedStoryboard.storyboard in Resources */,
- BF2250910101 /* Main.storyboard in Resources */,
- );
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- SSBP19207501 /* Swiftlint */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = Swiftlint;
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
- };
- SSBP24648001 /* Strip Unused Architectures from Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Strip Unused Architectures from Frameworks";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 1;
- shellPath = /bin/sh;
- shellScript = "################################################################################\n#\n# Copyright 2015 Realm Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n################################################################################\n\n# This script strips all non-valid architectures from dynamic libraries in\n# the application's `Frameworks` directory.\n#\n# The following environment variables are required:\n#\n# BUILT_PRODUCTS_DIR\n# FRAMEWORKS_FOLDER_PATH\n# VALID_ARCHS\n# EXPANDED_CODE_SIGN_IDENTITY\n\n\n# Signs a framework with the provided identity\ncode_sign() {\n # Use the current code_sign_identitiy\n echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n echo \"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1\"\n /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"\n}\n\n# Set working directory to product’s embedded frameworks\ncd \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nif [ \"$ACTION\" = \"install\" ]; then\n echo \"Copy .bcsymbolmap files to .xcarchive\"\n find . -name '*.bcsymbolmap' -type f -exec mv {} \"${CONFIGURATION_BUILD_DIR}\" \;\nelse\n # Delete *.bcsymbolmap files from framework bundle unless archiving\n find . -name '*.bcsymbolmap' -type f -exec rm -rf \"{}\" +\;\nfi\n\necho \"Stripping frameworks\"\n\nfor file in $(find . -type f -perm +111); do\n # Skip non-dynamic libraries\n if ! [[ \"$(file \"$file\")\" == *\"dynamically linked shared library\"* ]]; then\n continue\n fi\n # Get architectures for current file\n archs=\"$(lipo -info \"${file}\" | rev | cut -d ':' -f1 | rev)\"\n stripped=\"\"\n for arch in $archs; do\n if ! [[ \"${VALID_ARCHS}\" == *\"$arch\"* ]]; then\n # Strip non-valid architectures in-place\n lipo -remove \"$arch\" -output \"$file\" \"$file\" || exit 1\n stripped=\"$stripped $arch\"\n fi\n done\n if [[ \"$stripped\" != \"\" ]]; then\n echo \"Stripped $file of architectures:$stripped\"\n if [ \"${CODE_SIGNING_REQUIRED}\" == \"YES\" ]; then\n code_sign \"${file}\"\n fi\n fi\ndone\n";
- };
- SSBP35382101 /* Swiftlint */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = Swiftlint;
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
- };
- SSBP58567701 /* Carthage */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "$(SRCROOT)/Carthage/Build/iOS/Result.framework",
- );
- name = Carthage;
- outputPaths = (
- "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "/usr/local/bin/carthage copy-frameworks\n";
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- SBP265365901 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BF9001417701 /* TestProjectTests.swift in Sources */,
- );
- };
- SBP299349701 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BF9155249601 /* FrameworkFile.swift in Sources */,
- );
- };
- SBP652326301 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BF1073850101 /* AppDelegate.swift in Sources */,
- BF1744565901 /* ViewController.swift in Sources */,
- );
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- TD6170761801 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = NT2993497801 /* MyFramework */;
- targetProxy = CIP652326301 /* PBXContainerItemProxy */;
- };
- TD8877980201 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = NT6523263101 /* TestProject */;
- targetProxy = CIP265365901 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- VG2043127501 /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- FR1473702401 /* Base */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
- VG2858723001 /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- FR6405436301 /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
- VG3182922801 /* LocalizedStoryboard.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- FR4822987701 /* Base */,
- FR8182352201 /* en */,
- );
- name = LocalizedStoryboard.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- XCBC19846901 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_IDENTITY = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_TESTABILITY = YES;
- INFOPLIST_FILE = MyFramework/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.test.MyFramework;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- XCBC37128501 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = FR6334256101 /* config.xcconfig */;
- buildSettings = {
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
- );
- INFOPLIST_FILE = TestProject/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.test.TestProject;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- XCBC47994501 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(inherited)",
- "DEBUG=1",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 4.0;
- };
- name = Debug;
- };
- XCBC60448901 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- BUNDLE_LOADER = "$(TEST_HOST)";
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
- );
- INFOPLIST_FILE = TestProjectTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks @loader_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.test.TestProjectTests;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
- };
- name = Release;
- };
- XCBC86437501 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
- );
- INFOPLIST_FILE = TestProject/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.test.TestProject;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Release;
- };
- XCBC88111401 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- SWIFT_VERSION = 4.0;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- XCBC89077001 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- BUNDLE_LOADER = "$(TEST_HOST)";
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Carthage/Build/iOS",
- );
- INFOPLIST_FILE = TestProjectTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks @loader_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.test.TestProjectTests;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
- };
- name = Debug;
- };
- XCBC89204001 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_IDENTITY = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_TESTABILITY = YES;
- INFOPLIST_FILE = MyFramework/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.test.MyFramework;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- XCCL26536501 /* Build configuration list for PBXNativeTarget "TestProjectTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- XCBC89077001 /* Debug */,
- XCBC60448901 /* Release */,
- );
- defaultConfigurationName = "";
- };
- XCCL29934901 /* Build configuration list for PBXNativeTarget "MyFramework" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- XCBC19846901 /* Debug */,
- XCBC89204001 /* Release */,
- );
- defaultConfigurationName = "";
- };
- XCCL65232601 /* Build configuration list for PBXNativeTarget "TestProject" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- XCBC37128501 /* Debug */,
- XCBC86437501 /* Release */,
- );
- defaultConfigurationName = "";
- };
- XCCL81399401 /* Build configuration list for PBXProject "GeneratedProject" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- XCBC47994501 /* Debug */,
- XCBC88111401 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
- };
-/* End XCConfigurationList section */
- };
- rootObject = P81399456601 /* Project object */;
-}
diff --git a/Fixtures/TestProject/GeneratedProject.xcodeproj/xcshareddata/xcschemes/TestProject.xcscheme b/Fixtures/TestProject/GeneratedProject.xcodeproj/xcshareddata/xcschemes/TestProject.xcscheme
deleted file mode 100644
index 7faa7c9a..00000000
--- a/Fixtures/TestProject/GeneratedProject.xcodeproj/xcshareddata/xcschemes/TestProject.xcscheme
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Fixtures/TestProject/MyFramework/MyFramework.h b/Fixtures/TestProject/MyFramework/MyFramework.h
deleted file mode 100644
index 027312f4..00000000
--- a/Fixtures/TestProject/MyFramework/MyFramework.h
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// MyFramework.h
-// MyFramework
-//
-// Created by Yonas Kolb on 21/7/17.
-// Copyright © 2017 Yonas Kolb. All rights reserved.
-//
-
-#import
-
-//! Project version number for MyFramework.
-FOUNDATION_EXPORT double MyFrameworkVersionNumber;
-
-//! Project version string for MyFramework.
-FOUNDATION_EXPORT const unsigned char MyFrameworkVersionString[];
-
-// In this header, you should import all the public headers of your framework using statements like #import
-
-
diff --git a/Fixtures/TestProject/NestedFiles/Foo/Nested.swift b/Fixtures/TestProject/NestedFiles/Foo/Nested.swift
new file mode 100644
index 00000000..b5c22056
--- /dev/null
+++ b/Fixtures/TestProject/NestedFiles/Foo/Nested.swift
@@ -0,0 +1,3 @@
+func nested() -> String {
+ return "Nested"
+}
diff --git a/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..58f30bd5
--- /dev/null
+++ b/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
@@ -0,0 +1,2104 @@
+// !$*UTF8*$!
+{
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ BF1073850101 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR1332263601 /* AppDelegate.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ BF1401236301 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR3032072501 /* Alamofire.framework */; };
+ BF1628293501 /* Standalone.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR2554453101 /* Standalone.swift */; };
+ BF1744565901 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR6218091901 /* ViewController.swift */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ BF2018435801 /* Framework_iOS.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR4722960401 /* Framework_iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ BF2250910101 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG2043127501 /* Main.storyboard */; };
+ BF2445564001 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG2858723001 /* LaunchScreen.storyboard */; };
+ BF2513089601 /* LocalizedStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG3182922801 /* LocalizedStoryboard.storyboard */; };
+ BF2535278401 = {isa = PBXBuildFile; fileRef = FR4387045301 /* Framework_watchOS.framework */; };
+ BF3008399601 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR3032072503 /* Alamofire.framework */; };
+ BF3154421201 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR5980633301 /* Assets.xcassets */; settings = {COMPILER_FLAGS = "-Werror"; }; };
+ BF3314441201 = {isa = PBXBuildFile; fileRef = FR5251191201 /* Framework_macOS.framework */; };
+ BF3371332801 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = VG5506161801 /* Localizable.strings */; };
+ BF3515549501 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR7740960501 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BF3515549502 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR7740960501 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BF3515549503 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR7740960501 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BF3515549504 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR7740960501 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BF4414242001 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = VG1597538701 /* Localizable.stringsdict */; };
+ BF4530793601 /* Framework_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR4722960401 /* Framework_iOS.framework */; };
+ BF5539436901 = {isa = PBXBuildFile; fileRef = FR6623158301 /* Framework_tvOS.framework */; };
+ BF6380159901 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR3032072502 /* Alamofire.framework */; };
+ BF7121748201 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR3032072504 /* Alamofire.framework */; };
+ BF7642939101 = {isa = PBXBuildFile; fileRef = FR8252321101 /* App_iOS.app */; };
+ BF8298265901 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR3032072501 /* Alamofire.framework */; };
+ BF8660115801 = {isa = PBXBuildFile; fileRef = FR4722960401 /* Framework_iOS.framework */; };
+ BF9001417701 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR6877173101 /* TestProjectTests.swift */; };
+ BF9155249601 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR7078510801 /* FrameworkFile.swift */; };
+ BF9155249602 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR7078510801 /* FrameworkFile.swift */; };
+ BF9155249603 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR7078510801 /* FrameworkFile.swift */; };
+ BF9155249604 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR7078510801 /* FrameworkFile.swift */; };
+ BF9552530301 = {isa = PBXBuildFile; fileRef = FR7831228901 /* App_iOS_Tests.xctest */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ CIP783122801 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = P84487712001 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = NT8252321101;
+ remoteInfo = App_iOS;
+ };
+ CIP825232101 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = P84487712001 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = NT4722960401;
+ remoteInfo = Framework_iOS;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ CFBP64939301 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ BF2018435801 /* Framework_iOS.framework in CopyFiles */,
+ );
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ FR1332263601 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ FR1345298501 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ FR1345298502 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ FR1345298503 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ FR1473702401 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ FR2554453101 /* Standalone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Standalone.swift; sourceTree = ""; };
+ FR3032072501 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; };
+ FR3032072502 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; };
+ FR3032072503 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; };
+ FR3032072504 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = ""; };
+ FR3546283901 /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; };
+ FR3899172901 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; };
+ FR3899172902 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; };
+ FR4387045301 /* Framework_watchOS.framework */ = {isa = PBXFileReference; explicitFileType = framework; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Framework_watchOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FR4722960401 /* Framework_iOS.framework */ = {isa = PBXFileReference; explicitFileType = framework; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Framework_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FR4822987701 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LocalizedStoryboard.storyboard; sourceTree = ""; };
+ FR5251191201 /* Framework_macOS.framework */ = {isa = PBXFileReference; explicitFileType = framework; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Framework_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FR5980633301 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ FR6218091901 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ FR6334256101 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
+ FR6405436301 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ FR6623158301 /* Framework_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = framework; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Framework_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FR6877173101 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
+ FR7078510801 /* FrameworkFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; };
+ FR7740960501 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; };
+ FR7831228901 /* App_iOS_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = xctest; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = App_iOS_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ FR8182352201 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizedStoryboard.strings; sourceTree = ""; };
+ FR8252321101 /* App_iOS.app */ = {isa = PBXFileReference; explicitFileType = app; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ FR9612050601 /* Base */ = {isa = PBXFileReference; name = Base; path = Base.lproj/Localizable.stringsdict; sourceTree = ""; };
+ FR9612050602 /* en */ = {isa = PBXFileReference; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ FBP438704501 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF7121748201 /* Alamofire.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FBP472296001 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF8298265901 /* Alamofire.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FBP525119101 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF6380159901 /* Alamofire.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FBP662315801 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF3008399601 /* Alamofire.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FBP825232101 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF4530793601 /* Framework_iOS.framework in Frameworks */,
+ BF1401236301 /* Alamofire.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ G19527407101 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ G28836901501 /* Carthage */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ G28836901501 /* Carthage */ = {
+ isa = PBXGroup;
+ children = (
+ G47994500501 /* iOS */,
+ G47994500502 /* Mac */,
+ G47994500901 /* tvOS */,
+ G67871650901 /* watchOS */,
+ );
+ name = Carthage;
+ path = Carthage/Build;
+ sourceTree = "";
+ };
+ G46615002701 /* Framework */ = {
+ isa = PBXGroup;
+ children = (
+ FR7078510801 /* FrameworkFile.swift */,
+ FR1345298503 /* Info.plist */,
+ FR7740960501 /* MyFramework.h */,
+ FR7078510801 /* FrameworkFile.swift */,
+ FR1345298503 /* Info.plist */,
+ FR7740960501 /* MyFramework.h */,
+ FR7078510801 /* FrameworkFile.swift */,
+ FR1345298503 /* Info.plist */,
+ FR7740960501 /* MyFramework.h */,
+ FR7078510801 /* FrameworkFile.swift */,
+ FR1345298503 /* Info.plist */,
+ FR7740960501 /* MyFramework.h */,
+ );
+ name = Framework;
+ path = Framework;
+ sourceTree = "";
+ };
+ G47994500501 /* iOS */ = {
+ isa = PBXGroup;
+ children = (
+ FR3032072501 /* Alamofire.framework */,
+ );
+ name = iOS;
+ path = iOS;
+ sourceTree = "";
+ };
+ G47994500502 /* Mac */ = {
+ isa = PBXGroup;
+ children = (
+ FR3032072502 /* Alamofire.framework */,
+ );
+ name = Mac;
+ path = Mac;
+ sourceTree = "";
+ };
+ G47994500901 /* tvOS */ = {
+ isa = PBXGroup;
+ children = (
+ FR3032072503 /* Alamofire.framework */,
+ );
+ name = tvOS;
+ path = tvOS;
+ sourceTree = "";
+ };
+ G66512504301 /* StandaloneFiles */ = {
+ isa = PBXGroup;
+ children = (
+ FR2554453101 /* Standalone.swift */,
+ );
+ name = StandaloneFiles;
+ path = StandaloneFiles;
+ sourceTree = "";
+ };
+ G67871650901 /* watchOS */ = {
+ isa = PBXGroup;
+ children = (
+ FR3032072504 /* Alamofire.framework */,
+ );
+ name = watchOS;
+ path = watchOS;
+ sourceTree = "";
+ };
+ G78312289901 /* App_iOS_Tests */ = {
+ isa = PBXGroup;
+ children = (
+ FR1345298502 /* Info.plist */,
+ FR6877173101 /* TestProjectTests.swift */,
+ );
+ name = App_iOS_Tests;
+ path = App_iOS_Tests;
+ sourceTree = "";
+ };
+ G82523211001 /* App_iOS */ = {
+ isa = PBXGroup;
+ children = (
+ FR1332263601 /* AppDelegate.swift */,
+ FR5980633301 /* Assets.xcassets */,
+ FR1345298501 /* Info.plist */,
+ FR6218091901 /* ViewController.swift */,
+ VG2858723001 /* LaunchScreen.storyboard */,
+ VG5506161801 /* Localizable.strings */,
+ VG1597538701 /* Localizable.stringsdict */,
+ VG3182922801 /* LocalizedStoryboard.storyboard */,
+ VG2043127501 /* Main.storyboard */,
+ );
+ name = App_iOS;
+ path = App_iOS;
+ sourceTree = "";
+ };
+ G83406189501 /* Configs */ = {
+ isa = PBXGroup;
+ children = (
+ FR3546283901 /* base.xcconfig */,
+ FR6334256101 /* config.xcconfig */,
+ );
+ name = Configs;
+ path = Configs;
+ sourceTree = "";
+ };
+ G84487712001 = {
+ isa = PBXGroup;
+ children = (
+ G83406189501 /* Configs */,
+ G82523211001 /* App_iOS */,
+ G66512504301 /* StandaloneFiles */,
+ G78312289901 /* App_iOS_Tests */,
+ G46615002701 /* Framework */,
+ G46615002701 /* Framework */,
+ G46615002701 /* Framework */,
+ G46615002701 /* Framework */,
+ G86202385201 /* Products */,
+ G19527407101 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ G86202385201 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ FR5251191201 /* Framework_macOS.framework */,
+ FR7831228901 /* App_iOS_Tests.xctest */,
+ FR4722960401 /* Framework_iOS.framework */,
+ FR6623158301 /* Framework_tvOS.framework */,
+ FR4387045301 /* Framework_watchOS.framework */,
+ FR8252321101 /* App_iOS.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ HBP438704501 /* Frameworks */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF3515549504 /* MyFramework.h in Headers */,
+ );
+ };
+ HBP472296001 /* Frameworks */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF3515549501 /* MyFramework.h in Headers */,
+ );
+ };
+ HBP525119101 /* Frameworks */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF3515549502 /* MyFramework.h in Headers */,
+ );
+ };
+ HBP662315801 /* Frameworks */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF3515549503 /* MyFramework.h in Headers */,
+ );
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ NT4387045301 /* Framework_watchOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = XCCL43870401 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */;
+ buildPhases = (
+ SBP438704501 /* Sources */,
+ RBP438704501 /* Resources */,
+ HBP438704501 /* Headers */,
+ FBP438704501 /* Frameworks */,
+ SSBP87697701 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework_watchOS;
+ productReference = FR4387045301;
+ productType = "com.apple.product-type.framework";
+ };
+ NT4722960401 /* Framework_iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = XCCL47229601 /* Build configuration list for PBXNativeTarget "Framework_iOS" */;
+ buildPhases = (
+ SBP472296001 /* Sources */,
+ RBP472296001 /* Resources */,
+ HBP472296001 /* Headers */,
+ FBP472296001 /* Frameworks */,
+ SSBP79093501 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework_iOS;
+ productReference = FR4722960401;
+ productType = "com.apple.product-type.framework";
+ };
+ NT5251191201 /* Framework_macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = XCCL52511901 /* Build configuration list for PBXNativeTarget "Framework_macOS" */;
+ buildPhases = (
+ SBP525119101 /* Sources */,
+ RBP525119101 /* Resources */,
+ HBP525119101 /* Headers */,
+ FBP525119101 /* Frameworks */,
+ SSBP36421701 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework_macOS;
+ productReference = FR5251191201;
+ productType = "com.apple.product-type.framework";
+ };
+ NT6623158301 /* Framework_tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = XCCL66231501 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */;
+ buildPhases = (
+ SBP662315801 /* Sources */,
+ RBP662315801 /* Resources */,
+ HBP662315801 /* Headers */,
+ FBP662315801 /* Frameworks */,
+ SSBP77937501 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Framework_tvOS;
+ productReference = FR6623158301;
+ productType = "com.apple.product-type.framework";
+ };
+ NT7831228901 /* App_iOS_Tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = XCCL78312201 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */;
+ buildPhases = (
+ SBP783122801 /* Sources */,
+ RBP783122801 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ TD4366381601 /* PBXTargetDependency */,
+ );
+ name = App_iOS_Tests;
+ productReference = FR7831228901;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ NT8252321101 /* App_iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = XCCL82523201 /* Build configuration list for PBXNativeTarget "App_iOS" */;
+ buildPhases = (
+ SBP825232101 /* Sources */,
+ RBP825232101 /* Resources */,
+ FBP825232101 /* Frameworks */,
+ CFBP64939301 /* CopyFiles */,
+ SSBP81062201 /* Carthage */,
+ SSBP42763001 /* Strip Unused Architectures from Frameworks */,
+ SSBP12620601 /* MyScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ TD3543424801 /* PBXTargetDependency */,
+ );
+ name = App_iOS;
+ productReference = FR8252321101;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ P84487712001 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0900;
+ };
+ buildConfigurationList = XCCL84487701 /* Build configuration list for PBXProject "Project" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = G84487712001;
+ targets = (
+ NT8252321101 /* App_iOS */,
+ NT7831228901 /* App_iOS_Tests */,
+ NT4722960401 /* Framework_iOS */,
+ NT5251191201 /* Framework_macOS */,
+ NT6623158301 /* Framework_tvOS */,
+ NT4387045301 /* Framework_watchOS */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ RBP438704501 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ };
+ RBP472296001 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ };
+ RBP525119101 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ };
+ RBP662315801 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ };
+ RBP783122801 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ };
+ RBP825232101 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF3154421201 /* Assets.xcassets in Resources */,
+ BF2445564001 /* LaunchScreen.storyboard in Resources */,
+ BF3371332801 /* Localizable.strings in Resources */,
+ BF4414242001 /* Localizable.stringsdict in Resources */,
+ BF2513089601 /* LocalizedStoryboard.storyboard in Resources */,
+ BF2250910101 /* Main.storyboard in Resources */,
+ );
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ SSBP12620601 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script!\"\n";
+ };
+ SSBP36421701 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ SSBP42763001 /* Strip Unused Architectures from Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Strip Unused Architectures from Frameworks";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ shellPath = /bin/sh;
+ shellScript = "################################################################################\n#\n# Copyright 2015 Realm Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n################################################################################\n\n# This script strips all non-valid architectures from dynamic libraries in\n# the application's `Frameworks` directory.\n#\n# The following environment variables are required:\n#\n# BUILT_PRODUCTS_DIR\n# FRAMEWORKS_FOLDER_PATH\n# VALID_ARCHS\n# EXPANDED_CODE_SIGN_IDENTITY\n\n\n# Signs a framework with the provided identity\ncode_sign() {\n # Use the current code_sign_identitiy\n echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n echo \"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1\"\n /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"\n}\n\n# Set working directory to product’s embedded frameworks\ncd \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nif [ \"$ACTION\" = \"install\" ]; then\n echo \"Copy .bcsymbolmap files to .xcarchive\"\n find . -name '*.bcsymbolmap' -type f -exec mv {} \"${CONFIGURATION_BUILD_DIR}\" \;\nelse\n # Delete *.bcsymbolmap files from framework bundle unless archiving\n find . -name '*.bcsymbolmap' -type f -exec rm -rf \"{}\" +\;\nfi\n\necho \"Stripping frameworks\"\n\nfor file in $(find . -type f -perm +111); do\n # Skip non-dynamic libraries\n if ! [[ \"$(file \"$file\")\" == *\"dynamically linked shared library\"* ]]; then\n continue\n fi\n # Get architectures for current file\n archs=\"$(lipo -info \"${file}\" | rev | cut -d ':' -f1 | rev)\"\n stripped=\"\"\n for arch in $archs; do\n if ! [[ \"${VALID_ARCHS}\" == *\"$arch\"* ]]; then\n # Strip non-valid architectures in-place\n lipo -remove \"$arch\" -output \"$file\" \"$file\" || exit 1\n stripped=\"$stripped $arch\"\n fi\n done\n if [[ \"$stripped\" != \"\" ]]; then\n echo \"Stripped $file of architectures:$stripped\"\n if [ \"${CODE_SIGNING_REQUIRED}\" == \"YES\" ]; then\n code_sign \"${file}\"\n fi\n fi\ndone\n";
+ };
+ SSBP77937501 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ SSBP79093501 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+ SSBP81062201 /* Carthage */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework",
+ );
+ name = Carthage;
+ outputPaths = (
+ "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/usr/local/bin/carthage copy-frameworks\n";
+ };
+ SSBP87697701 /* MyScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = MyScript;
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"You ran a script\"\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ SBP438704501 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF9155249604 /* FrameworkFile.swift in Sources */,
+ );
+ };
+ SBP472296001 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF9155249601 /* FrameworkFile.swift in Sources */,
+ );
+ };
+ SBP525119101 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF9155249602 /* FrameworkFile.swift in Sources */,
+ );
+ };
+ SBP662315801 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF9155249603 /* FrameworkFile.swift in Sources */,
+ );
+ };
+ SBP783122801 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF9001417701 /* TestProjectTests.swift in Sources */,
+ );
+ };
+ SBP825232101 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BF1073850101 /* AppDelegate.swift in Sources */,
+ BF1744565901 /* ViewController.swift in Sources */,
+ BF1628293501 /* Standalone.swift in Sources */,
+ );
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ TD3543424801 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = NT4722960401 /* Framework_iOS */;
+ targetProxy = CIP825232101 /* PBXContainerItemProxy */;
+ };
+ TD4366381601 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = NT8252321101 /* App_iOS */;
+ targetProxy = CIP783122801 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ VG1597538701 /* Localizable.stringsdict */ = {
+ isa = PBXVariantGroup;
+ children = (
+ FR9612050601 /* Base */,
+ FR9612050602 /* en */,
+ );
+ name = Localizable.stringsdict;
+ sourceTree = "";
+ };
+ VG2043127501 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ FR1473702401 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ VG2858723001 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ FR6405436301 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+ VG3182922801 /* LocalizedStoryboard.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ FR4822987701 /* Base */,
+ FR8182352201 /* en */,
+ );
+ name = LocalizedStoryboard.storyboard;
+ sourceTree = "";
+ };
+ VG5506161801 /* Localizable.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ FR3899172901 /* Base */,
+ FR3899172902 /* en */,
+ );
+ name = Localizable.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ XCBC10805301 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ XCBC12810301 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project$(BUNDLE_ID_SUFFIX)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Release";
+ };
+ XCBC21030701 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = TestProjectTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks @loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
+ };
+ name = "Staging Release";
+ };
+ XCBC21033801 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ XCBC24058701 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = TestProjectTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks @loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
+ };
+ name = "Test Debug";
+ };
+ XCBC24209601 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 4.0;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = "Production Release";
+ };
+ XCBC26523001 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project$(BUNDLE_ID_SUFFIX)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Release";
+ };
+ XCBC27534701 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ XCBC28299301 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ XCBC31310301 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ XCBC35117901 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ XCBC36855501 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = TestProjectTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks @loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
+ };
+ name = "Production Release";
+ };
+ XCBC38070301 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ XCBC38157701 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ WATCHOS_DEPLOYMENT_TARGET = 3.0;
+ };
+ name = "Production Release";
+ };
+ XCBC39733901 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .staging;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 4.0;
+ };
+ name = "Staging Debug";
+ };
+ XCBC48068801 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project$(BUNDLE_ID_SUFFIX)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Staging Debug";
+ };
+ XCBC49305201 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ XCBC49932501 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ WATCHOS_DEPLOYMENT_TARGET = 3.0;
+ };
+ name = "Production Debug";
+ };
+ XCBC51730601 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ XCBC53075501 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project$(BUNDLE_ID_SUFFIX)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Release";
+ };
+ XCBC53348101 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+ XCBC56330801 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ WATCHOS_DEPLOYMENT_TARGET = 3.0;
+ };
+ name = "Staging Debug";
+ };
+ XCBC56888601 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = TestProjectTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks @loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
+ };
+ name = "Production Debug";
+ };
+ XCBC57537401 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .test;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 4.0;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = "Test Release";
+ };
+ XCBC59484901 /* Production Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Release";
+ };
+ XCBC62247101 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-iOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ XCBC64473701 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = TestProjectTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks @loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
+ };
+ name = "Staging Debug";
+ };
+ XCBC65575201 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Debug";
+ };
+ XCBC68513501 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ WATCHOS_DEPLOYMENT_TARGET = 3.0;
+ };
+ name = "Test Release";
+ };
+ XCBC70527901 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Production Debug";
+ };
+ XCBC70994701 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 4.0;
+ };
+ name = "Production Debug";
+ };
+ XCBC73052101 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .staging;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 4.0;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = "Staging Release";
+ };
+ XCBC74135901 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Test Release";
+ };
+ XCBC74939301 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project$(BUNDLE_ID_SUFFIX)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Test Debug";
+ };
+ XCBC76016801 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/tvOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-tvOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = appletvos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ XCBC76544101 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Release";
+ };
+ XCBC79071101 /* Staging Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ WATCHOS_DEPLOYMENT_TARGET = 3.0;
+ };
+ name = "Staging Release";
+ };
+ XCBC79371401 /* Test Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = TestProjectTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks @loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.App-iOS-Tests";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
+ };
+ name = "Test Release";
+ };
+ XCBC79991601 /* Production Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/iOS",
+ );
+ INFOPLIST_FILE = App_iOS/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project$(BUNDLE_ID_SUFFIX)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = "Production Debug";
+ };
+ XCBC83210001 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = FR6334256101 /* config.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_ID_SUFFIX = .test;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 4.0;
+ };
+ name = "Test Debug";
+ };
+ XCBC83591101 /* Test Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/watchOS",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-watchOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = watchos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = 4;
+ VERSIONING_SYSTEM = "apple-generic";
+ WATCHOS_DEPLOYMENT_TARGET = 3.0;
+ };
+ name = "Test Debug";
+ };
+ XCBC87900001 /* Staging Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "";
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_TESTABILITY = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Carthage/Build/Mac",
+ );
+ INFOPLIST_FILE = Framework/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.project.Framework-macOS";
+ PRODUCT_NAME = Framework;
+ SDKROOT = macosx;
+ SKIP_INSTALL = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = "Staging Debug";
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ XCCL43870401 /* Build configuration list for PBXNativeTarget "Framework_watchOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC49932501 /* Production Debug */,
+ XCBC38157701 /* Production Release */,
+ XCBC56330801 /* Staging Debug */,
+ XCBC79071101 /* Staging Release */,
+ XCBC83591101 /* Test Debug */,
+ XCBC68513501 /* Test Release */,
+ );
+ defaultConfigurationName = "";
+ };
+ XCCL47229601 /* Build configuration list for PBXNativeTarget "Framework_iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC62247101 /* Production Debug */,
+ XCBC59484901 /* Production Release */,
+ XCBC31310301 /* Staging Debug */,
+ XCBC51730601 /* Staging Release */,
+ XCBC35117901 /* Test Debug */,
+ XCBC21033801 /* Test Release */,
+ );
+ defaultConfigurationName = "";
+ };
+ XCCL52511901 /* Build configuration list for PBXNativeTarget "Framework_macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC70527901 /* Production Debug */,
+ XCBC28299301 /* Production Release */,
+ XCBC87900001 /* Staging Debug */,
+ XCBC76544101 /* Staging Release */,
+ XCBC10805301 /* Test Debug */,
+ XCBC74135901 /* Test Release */,
+ );
+ defaultConfigurationName = "";
+ };
+ XCCL66231501 /* Build configuration list for PBXNativeTarget "Framework_tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC27534701 /* Production Debug */,
+ XCBC49305201 /* Production Release */,
+ XCBC53348101 /* Staging Debug */,
+ XCBC76016801 /* Staging Release */,
+ XCBC65575201 /* Test Debug */,
+ XCBC38070301 /* Test Release */,
+ );
+ defaultConfigurationName = "";
+ };
+ XCCL78312201 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC56888601 /* Production Debug */,
+ XCBC36855501 /* Production Release */,
+ XCBC64473701 /* Staging Debug */,
+ XCBC21030701 /* Staging Release */,
+ XCBC24058701 /* Test Debug */,
+ XCBC79371401 /* Test Release */,
+ );
+ defaultConfigurationName = "";
+ };
+ XCCL82523201 /* Build configuration list for PBXNativeTarget "App_iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC79991601 /* Production Debug */,
+ XCBC12810301 /* Production Release */,
+ XCBC48068801 /* Staging Debug */,
+ XCBC26523001 /* Staging Release */,
+ XCBC74939301 /* Test Debug */,
+ XCBC53075501 /* Test Release */,
+ );
+ defaultConfigurationName = "";
+ };
+ XCCL84487701 /* Build configuration list for PBXProject "Project" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ XCBC70994701 /* Production Debug */,
+ XCBC24209601 /* Production Release */,
+ XCBC39733901 /* Staging Debug */,
+ XCBC73052101 /* Staging Release */,
+ XCBC83210001 /* Test Debug */,
+ XCBC57537401 /* Test Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "Production Debug";
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = P84487712001 /* Project object */;
+}
diff --git a/Fixtures/TestProject/GeneratedProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from Fixtures/TestProject/GeneratedProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to Fixtures/TestProject/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme b/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme
new file mode 100644
index 00000000..cfe5e391
--- /dev/null
+++ b/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_iOS.xcscheme
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Fixtures/TestProject/StandaloneFiles/Standalone.swift b/Fixtures/TestProject/StandaloneFiles/Standalone.swift
new file mode 100644
index 00000000..2062b15d
--- /dev/null
+++ b/Fixtures/TestProject/StandaloneFiles/Standalone.swift
@@ -0,0 +1,3 @@
+func standaloneHello() -> String {
+ return "Hello"
+}
diff --git a/Fixtures/TestProject/TestProject.xcodeproj/project.pbxproj b/Fixtures/TestProject/TestProject.xcodeproj/project.pbxproj
deleted file mode 100644
index 759b10e3..00000000
--- a/Fixtures/TestProject/TestProject.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,640 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- CC2A0EC21F33D50E00C324B9 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2A0EC11F33D50E00C324B9 /* TestProjectTests.swift */; };
- CCA4B60E1F1FC00500DF34A1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA4B60D1F1FC00500DF34A1 /* AppDelegate.swift */; };
- CCA4B6101F1FC00500DF34A1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA4B60F1F1FC00500DF34A1 /* ViewController.swift */; };
- CCA4B6131F1FC00500DF34A1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CCA4B6111F1FC00500DF34A1 /* Main.storyboard */; };
- CCA4B6151F1FC00500DF34A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CCA4B6141F1FC00500DF34A1 /* Assets.xcassets */; };
- CCA4B6181F1FC00500DF34A1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CCA4B6161F1FC00500DF34A1 /* LaunchScreen.storyboard */; };
- CCA71FEC1F225E4C00F772C1 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = CCA71FEA1F225E4C00F772C1 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CCA71FEF1F225E4C00F772C1 /* MyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCA71FE81F225E4C00F772C1 /* MyFramework.framework */; };
- CCA71FF11F225E4C00F772C1 /* MyFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CCA71FE81F225E4C00F772C1 /* MyFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- CCA720171F22A3C400F772C1 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA720161F22A3C400F772C1 /* FrameworkFile.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- CC2A0EC41F33D50E00C324B9 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = CCA4B6021F1FC00500DF34A1 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = CCA4B6091F1FC00500DF34A1;
- remoteInfo = TestProject;
- };
- CCA71FED1F225E4C00F772C1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = CCA4B6021F1FC00500DF34A1 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = CCA71FE71F225E4C00F772C1;
- remoteInfo = MyFramework;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- CCA71FF01F225E4C00F772C1 /* Embed Frameworks */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- CCA71FF11F225E4C00F772C1 /* MyFramework.framework in Embed Frameworks */,
- );
- name = "Embed Frameworks";
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- CC2A0EBF1F33D50E00C324B9 /* TestProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- CC2A0EC11F33D50E00C324B9 /* TestProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProjectTests.swift; sourceTree = ""; };
- CC2A0EC31F33D50E00C324B9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- CC9393011F79483C00C1934A /* base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = base.xcconfig; sourceTree = ""; };
- CC9393021F79483C00C1934A /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; };
- CCA4B60A1F1FC00500DF34A1 /* TestProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
- CCA4B60D1F1FC00500DF34A1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- CCA4B60F1F1FC00500DF34A1 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
- CCA4B6121F1FC00500DF34A1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- CCA4B6141F1FC00500DF34A1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- CCA4B6171F1FC00500DF34A1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- CCA4B6191F1FC00500DF34A1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- CCA71FE81F225E4C00F772C1 /* MyFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MyFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- CCA71FEA1F225E4C00F772C1 /* MyFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyFramework.h; sourceTree = ""; };
- CCA71FEB1F225E4C00F772C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- CCA720161F22A3C400F772C1 /* FrameworkFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameworkFile.swift; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- CC2A0EBC1F33D50E00C324B9 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CCA4B6071F1FC00500DF34A1 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CCA71FEF1F225E4C00F772C1 /* MyFramework.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CCA71FE41F225E4C00F772C1 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- CC2A0EC01F33D50E00C324B9 /* TestProjectTests */ = {
- isa = PBXGroup;
- children = (
- CC2A0EC11F33D50E00C324B9 /* TestProjectTests.swift */,
- CC2A0EC31F33D50E00C324B9 /* Info.plist */,
- );
- path = TestProjectTests;
- sourceTree = "";
- };
- CC9393001F79483C00C1934A /* Configs */ = {
- isa = PBXGroup;
- children = (
- CC9393011F79483C00C1934A /* base.xcconfig */,
- CC9393021F79483C00C1934A /* config.xcconfig */,
- );
- path = Configs;
- sourceTree = "";
- };
- CCA4B6011F1FC00500DF34A1 = {
- isa = PBXGroup;
- children = (
- CC9393001F79483C00C1934A /* Configs */,
- CCA4B60C1F1FC00500DF34A1 /* TestProject */,
- CCA71FE91F225E4C00F772C1 /* MyFramework */,
- CC2A0EC01F33D50E00C324B9 /* TestProjectTests */,
- CCA4B60B1F1FC00500DF34A1 /* Products */,
- );
- sourceTree = "";
- };
- CCA4B60B1F1FC00500DF34A1 /* Products */ = {
- isa = PBXGroup;
- children = (
- CCA4B60A1F1FC00500DF34A1 /* TestProject.app */,
- CCA71FE81F225E4C00F772C1 /* MyFramework.framework */,
- CC2A0EBF1F33D50E00C324B9 /* TestProjectTests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- CCA4B60C1F1FC00500DF34A1 /* TestProject */ = {
- isa = PBXGroup;
- children = (
- CCA4B60D1F1FC00500DF34A1 /* AppDelegate.swift */,
- CCA4B60F1F1FC00500DF34A1 /* ViewController.swift */,
- CCA4B6111F1FC00500DF34A1 /* Main.storyboard */,
- CCA4B6141F1FC00500DF34A1 /* Assets.xcassets */,
- CCA4B6161F1FC00500DF34A1 /* LaunchScreen.storyboard */,
- CCA4B6191F1FC00500DF34A1 /* Info.plist */,
- );
- path = TestProject;
- sourceTree = "";
- };
- CCA71FE91F225E4C00F772C1 /* MyFramework */ = {
- isa = PBXGroup;
- children = (
- CCA720161F22A3C400F772C1 /* FrameworkFile.swift */,
- CCA71FEA1F225E4C00F772C1 /* MyFramework.h */,
- CCA71FEB1F225E4C00F772C1 /* Info.plist */,
- );
- path = MyFramework;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- CCA71FE51F225E4C00F772C1 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CCA71FEC1F225E4C00F772C1 /* MyFramework.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- CC2A0EBE1F33D50E00C324B9 /* TestProjectTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = CC2A0EC81F33D50E00C324B9 /* Build configuration list for PBXNativeTarget "TestProjectTests" */;
- buildPhases = (
- CC2A0EBB1F33D50E00C324B9 /* Sources */,
- CC2A0EBC1F33D50E00C324B9 /* Frameworks */,
- CC2A0EBD1F33D50E00C324B9 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- CC2A0EC51F33D50E00C324B9 /* PBXTargetDependency */,
- );
- name = TestProjectTests;
- productName = TestProjectTests;
- productReference = CC2A0EBF1F33D50E00C324B9 /* TestProjectTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- CCA4B6091F1FC00500DF34A1 /* TestProject */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = CCA4B61C1F1FC00500DF34A1 /* Build configuration list for PBXNativeTarget "TestProject" */;
- buildPhases = (
- CCA4B6061F1FC00500DF34A1 /* Sources */,
- CCA4B6071F1FC00500DF34A1 /* Frameworks */,
- CCA4B6081F1FC00500DF34A1 /* Resources */,
- CCA71FF01F225E4C00F772C1 /* Embed Frameworks */,
- CC2DB89A1F30E29600B4B0FA /* Swiftlint */,
- );
- buildRules = (
- );
- dependencies = (
- CCA71FEE1F225E4C00F772C1 /* PBXTargetDependency */,
- );
- name = TestProject;
- productName = TestProject;
- productReference = CCA4B60A1F1FC00500DF34A1 /* TestProject.app */;
- productType = "com.apple.product-type.application";
- };
- CCA71FE71F225E4C00F772C1 /* MyFramework */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = CCA71FF41F225E4C00F772C1 /* Build configuration list for PBXNativeTarget "MyFramework" */;
- buildPhases = (
- CCA71FE31F225E4C00F772C1 /* Sources */,
- CCA71FE41F225E4C00F772C1 /* Frameworks */,
- CCA71FE51F225E4C00F772C1 /* Headers */,
- CCA71FE61F225E4C00F772C1 /* Resources */,
- CC2DB89B1F30E2AC00B4B0FA /* Swiftlint */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = MyFramework;
- productName = MyFramework;
- productReference = CCA71FE81F225E4C00F772C1 /* MyFramework.framework */;
- productType = "com.apple.product-type.framework";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- CCA4B6021F1FC00500DF34A1 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0830;
- LastUpgradeCheck = 0830;
- ORGANIZATIONNAME = "Yonas Kolb";
- TargetAttributes = {
- CC2A0EBE1F33D50E00C324B9 = {
- CreatedOnToolsVersion = 8.3.3;
- DevelopmentTeam = U7E5MQU624;
- ProvisioningStyle = Automatic;
- TestTargetID = CCA4B6091F1FC00500DF34A1;
- };
- CCA4B6091F1FC00500DF34A1 = {
- CreatedOnToolsVersion = 8.3.3;
- DevelopmentTeam = U7E5MQU624;
- ProvisioningStyle = Automatic;
- };
- CCA71FE71F225E4C00F772C1 = {
- CreatedOnToolsVersion = 8.3.3;
- DevelopmentTeam = U7E5MQU624;
- LastSwiftMigration = 0830;
- ProvisioningStyle = Automatic;
- };
- };
- };
- buildConfigurationList = CCA4B6051F1FC00500DF34A1 /* Build configuration list for PBXProject "TestProject" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = CCA4B6011F1FC00500DF34A1;
- productRefGroup = CCA4B60B1F1FC00500DF34A1 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- CCA4B6091F1FC00500DF34A1 /* TestProject */,
- CCA71FE71F225E4C00F772C1 /* MyFramework */,
- CC2A0EBE1F33D50E00C324B9 /* TestProjectTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- CC2A0EBD1F33D50E00C324B9 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CCA4B6081F1FC00500DF34A1 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CCA4B6181F1FC00500DF34A1 /* LaunchScreen.storyboard in Resources */,
- CCA4B6151F1FC00500DF34A1 /* Assets.xcassets in Resources */,
- CCA4B6131F1FC00500DF34A1 /* Main.storyboard in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CCA71FE61F225E4C00F772C1 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- CC2DB89A1F30E29600B4B0FA /* Swiftlint */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = Swiftlint;
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if which swiftlint >/dev/null; then\nswiftlint\nelse\necho \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi";
- };
- CC2DB89B1F30E2AC00B4B0FA /* Swiftlint */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = Swiftlint;
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if which swiftlint >/dev/null; then\nswiftlint\nelse\necho \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi";
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- CC2A0EBB1F33D50E00C324B9 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CC2A0EC21F33D50E00C324B9 /* TestProjectTests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CCA4B6061F1FC00500DF34A1 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CCA4B6101F1FC00500DF34A1 /* ViewController.swift in Sources */,
- CCA4B60E1F1FC00500DF34A1 /* AppDelegate.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CCA71FE31F225E4C00F772C1 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CCA720171F22A3C400F772C1 /* FrameworkFile.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- CC2A0EC51F33D50E00C324B9 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = CCA4B6091F1FC00500DF34A1 /* TestProject */;
- targetProxy = CC2A0EC41F33D50E00C324B9 /* PBXContainerItemProxy */;
- };
- CCA71FEE1F225E4C00F772C1 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = CCA71FE71F225E4C00F772C1 /* MyFramework */;
- targetProxy = CCA71FED1F225E4C00F772C1 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- CCA4B6111F1FC00500DF34A1 /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- CCA4B6121F1FC00500DF34A1 /* Base */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
- CCA4B6161F1FC00500DF34A1 /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- CCA4B6171F1FC00500DF34A1 /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- CC2A0EC61F33D50E00C324B9 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- DEVELOPMENT_TEAM = U7E5MQU624;
- INFOPLIST_FILE = TestProjectTests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.yonaskolb.TestProjectTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 3.0;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
- };
- name = Debug;
- };
- CC2A0EC71F33D50E00C324B9 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- DEVELOPMENT_TEAM = U7E5MQU624;
- INFOPLIST_FILE = TestProjectTests/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.yonaskolb.TestProjectTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 3.0;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
- };
- name = Release;
- };
- CCA4B61A1F1FC00500DF34A1 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 10.3;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- CCA4B61B1F1FC00500DF34A1 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 10.3;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- CCA4B61D1F1FC00500DF34A1 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = CC9393021F79483C00C1934A /* config.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- DEVELOPMENT_TEAM = U7E5MQU624;
- INFOPLIST_FILE = TestProject/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.yonaskolb.TestProject;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 3.0;
- };
- name = Debug;
- };
- CCA4B61E1F1FC00500DF34A1 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- DEVELOPMENT_TEAM = U7E5MQU624;
- INFOPLIST_FILE = TestProject/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.yonaskolb.TestProject;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 3.0;
- };
- name = Release;
- };
- CCA71FF21F225E4C00F772C1 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_IDENTITY = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DEVELOPMENT_TEAM = U7E5MQU624;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = MyFramework/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.yonaskolb.MyFramework;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 3.0;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- CCA71FF31F225E4C00F772C1 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_IDENTITY = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DEVELOPMENT_TEAM = U7E5MQU624;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = MyFramework/Info.plist;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.yonaskolb.MyFramework;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
- SWIFT_VERSION = 3.0;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- CC2A0EC81F33D50E00C324B9 /* Build configuration list for PBXNativeTarget "TestProjectTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- CC2A0EC61F33D50E00C324B9 /* Debug */,
- CC2A0EC71F33D50E00C324B9 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- CCA4B6051F1FC00500DF34A1 /* Build configuration list for PBXProject "TestProject" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- CCA4B61A1F1FC00500DF34A1 /* Debug */,
- CCA4B61B1F1FC00500DF34A1 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- CCA4B61C1F1FC00500DF34A1 /* Build configuration list for PBXNativeTarget "TestProject" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- CCA4B61D1F1FC00500DF34A1 /* Debug */,
- CCA4B61E1F1FC00500DF34A1 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- CCA71FF41F225E4C00F772C1 /* Build configuration list for PBXNativeTarget "MyFramework" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- CCA71FF21F225E4C00F772C1 /* Debug */,
- CCA71FF31F225E4C00F772C1 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = CCA4B6021F1FC00500DF34A1 /* Project object */;
-}
diff --git a/Fixtures/TestProject/TestProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Fixtures/TestProject/TestProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 2bf8bd93..00000000
--- a/Fixtures/TestProject/TestProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/Fixtures/TestProject/environment_test.yml b/Fixtures/TestProject/environment_test.yml
deleted file mode 100644
index b9e69021..00000000
--- a/Fixtures/TestProject/environment_test.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: EnvironmentTest
-settingGroups:
- app:
- PRODUCT_BUNDLE_IDENTIFIER: com.app$(BUNDLE_ID_SUFFIX)$(BUNDLE_ID_EXTENSION_SUFFIX)
- test:
- BUNDLE_ID_SUFFIX: .test
- staging:
- BUNDLE_ID_SUFFIX: .staging
-settings:
- configs:
- Test Debug:
-configs:
- Test Debug:
- type: debug
- Staging Debug:
- type: debug
- Production Debug:
- type: debug
- Test Release:
- type: release
- Staging Release:
- type: release
- Production Release:
- type: release
diff --git a/Fixtures/TestProject/environments.yml b/Fixtures/TestProject/environments.yml
new file mode 100644
index 00000000..d7d4adc3
--- /dev/null
+++ b/Fixtures/TestProject/environments.yml
@@ -0,0 +1,13 @@
+settings:
+ configs:
+ Test:
+ BUNDLE_ID_SUFFIX: .test
+ Staging:
+ BUNDLE_ID_SUFFIX: .staging
+configs:
+ Test Debug: debug
+ Staging Debug: debug
+ Production Debug: debug
+ Test Release: release
+ Staging Release: release
+ Production Release: release
diff --git a/Fixtures/TestProject/scripts/script.sh b/Fixtures/TestProject/scripts/script.sh
new file mode 100644
index 00000000..56e67172
--- /dev/null
+++ b/Fixtures/TestProject/scripts/script.sh
@@ -0,0 +1 @@
+echo "You ran a script"
diff --git a/Fixtures/TestProject/scripts/swiftlint.sh b/Fixtures/TestProject/scripts/swiftlint.sh
deleted file mode 100644
index ee2d2178..00000000
--- a/Fixtures/TestProject/scripts/swiftlint.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-if which swiftlint >/dev/null; then
- swiftlint
-else
- echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
-fi
diff --git a/Fixtures/TestProject/spec.yml b/Fixtures/TestProject/spec.yml
index 05680d63..0a26a036 100644
--- a/Fixtures/TestProject/spec.yml
+++ b/Fixtures/TestProject/spec.yml
@@ -1,49 +1,51 @@
-name: GeneratedProject
+name: Project
+include: [environments.yml]
options:
- bundleIdPrefix: com.test
+ bundleIdPrefix: com.project
fileGroups:
- Configs
+configFiles:
+ Test Debug: Configs/config.xcconfig
targets:
- TestProject:
+ App_iOS:
type: application
platform: iOS
- sources: TestProject
+ sources:
+ - path: App_iOS
+ compilerFlags:
+ - "-Werror"
+ - path: StandaloneFiles/Standalone.swift
settings:
- INFOPLIST_FILE: TestProject/Info.plist
+ PRODUCT_BUNDLE_IDENTIFIER: com.project$(BUNDLE_ID_SUFFIX)
+ INFOPLIST_FILE: App_iOS/Info.plist
dependencies:
- - target: MyFramework
- - carthage: Result
+ - target: Framework_iOS
+ - carthage: Alamofire
scheme:
testTargets:
- - TestProjectTests
+ - App_iOS_Tests
postbuildScripts:
- path: scripts/strip-frameworks.sh
name: Strip Unused Architectures from Frameworks
runOnlyWhenInstalling: true
- - name: Swiftlint
+ - name: MyScript
script: |
- if which swiftlint >/dev/null; then
- swiftlint
- else
- echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
- fi
- configFiles:
- Debug: Configs/config.xcconfig
- MyFramework:
+ echo "You ran a script!"
+ Framework:
type: framework
- platform: iOS
- sources: MyFramework
- settings:
- INFOPLIST_FILE: MyFramework/Info.plist
+ platform: [iOS, tvOS, watchOS, macOS]
+ sources: Framework
postbuildScripts:
- - name: Swiftlint
- path: scripts/swiftlint.sh
- TestProjectTests:
+ - name: MyScript
+ path: scripts/script.sh
+ dependencies:
+ - carthage: Alamofire
+ App_iOS_Tests:
type: bundle.unit-test
platform: iOS
- sources: TestProjectTests
+ sources: App_iOS_Tests
settings:
TEST_HOST: $(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject
INFOPLIST_FILE: TestProjectTests/Info.plist
dependencies:
- - target: TestProject
+ - target: App_iOS
diff --git a/Makefile b/Makefile
index ebec0517..8a02d99d 100644
--- a/Makefile
+++ b/Makefile
@@ -4,17 +4,19 @@ VERSION = 1.3.0
PREFIX = /usr/local
INSTALL_PATH = $(PREFIX)/bin/$(TOOL_NAME)
SHARE_PATH = $(PREFIX)/share/$(TOOL_NAME)
-BUILD_PATH = .build/release/$(TOOL_NAME)
CURRENT_PATH = $(PWD)
-TAR_FILENAME = $(TOOL_NAME)-$(VERSION).tar.gz
+REPO = https://github.com/yonaskolb/$(TOOL_NAME)
+RELEASE_TAR = $(REPO)/archive/$(VERSION).tar.gz
+SHA = $(shell curl -L -s $(RELEASE_TAR) | shasum -a 256 | sed 's/ .*//')
+
+.PHONY: install build uninstall format_code update_brew release
install: build
mkdir -p $(PREFIX)/bin
- cp -f $(BUILD_PATH) $(INSTALL_PATH)
+ cp -f .build/release/$(TOOL_NAME) $(INSTALL_PATH)
mkdir -p $(SHARE_PATH)
cp -R $(CURRENT_PATH)/SettingPresets $(SHARE_PATH)/SettingPresets
-.PHONY: build
build:
swift build --disable-sandbox -c release -Xswiftc -static-stdlib
@@ -22,7 +24,20 @@ uninstall:
rm -f $(INSTALL_PATH)
rm -rf $(SHARE_PATH)
-get_sha:
- wget https://github.com/yonaskolb/$(TOOL_NAME)/archive/$(VERSION).tar.gz -O $(TAR_FILENAME)
- shasum -a 256 $(TAR_FILENAME)
- rm $(TAR_FILENAME)
+format_code:
+ swiftformat Tests --stripunusedargs closure-only
+ swiftformat sources --stripunusedargs closure-only
+
+update_brew:
+ sed -i '' 's|\(url ".*/archive/\)\(.*\)\(.tar\)|\1$(VERSION)\3|' Formula/xcodegen.rb
+ sed -i '' 's|\(sha256 "\)\(.*\)\("\)|\1$(SHA)\3|' Formula/xcodegen.rb
+
+ git add .
+ git commit -m "Update brew to $(VERSION)"
+
+release: format_code
+ sed -i '' 's|\(let version = "\)\(.*\)\("\)|\1$(VERSION)\3|' Sources/XcodeGen/main.swift
+
+ git add .
+ git commit -m "Update to $(VERSION)"
+ git tag $(VERSION)
diff --git a/Sources/ProjectSpec/BuildScript.swift b/Sources/ProjectSpec/BuildScript.swift
index 115f7e1b..4eb25f9c 100644
--- a/Sources/ProjectSpec/BuildScript.swift
+++ b/Sources/ProjectSpec/BuildScript.swift
@@ -22,7 +22,7 @@ public struct BuildScript: Equatable {
case path(String)
case script(String)
- public static func ==(lhs: ScriptType, rhs: ScriptType) -> Bool {
+ public static func == (lhs: ScriptType, rhs: ScriptType) -> Bool {
switch (lhs, rhs) {
case let (.path(lhs), .path(rhs)): return lhs == rhs
case let (.script(lhs), .script(rhs)): return lhs == rhs
@@ -40,7 +40,7 @@ public struct BuildScript: Equatable {
self.runOnlyWhenInstalling = runOnlyWhenInstalling
}
- public static func ==(lhs: BuildScript, rhs: BuildScript) -> Bool {
+ public static func == (lhs: BuildScript, rhs: BuildScript) -> Bool {
return lhs.script == rhs.script &&
lhs.name == rhs.name &&
lhs.script == rhs.script &&
diff --git a/Sources/ProjectSpec/Config.swift b/Sources/ProjectSpec/Config.swift
index 2b4edf9b..36789af4 100644
--- a/Sources/ProjectSpec/Config.swift
+++ b/Sources/ProjectSpec/Config.swift
@@ -19,9 +19,11 @@ public struct Config: Equatable {
self.type = type
}
- public static func ==(lhs: Config, rhs: Config) -> Bool {
+ public static func == (lhs: Config, rhs: Config) -> Bool {
return lhs.name == rhs.name && lhs.type == rhs.type
}
+
+ public static var defaultConfigs: [Config] = [Config(name: "Debug", type: .debug), Config(name: "Release", type: .release)]
}
public enum ConfigType: String {
diff --git a/Sources/ProjectSpec/Dependency.swift b/Sources/ProjectSpec/Dependency.swift
new file mode 100644
index 00000000..5ddfcd2f
--- /dev/null
+++ b/Sources/ProjectSpec/Dependency.swift
@@ -0,0 +1,82 @@
+//
+// Dependency.swift
+// ProjectSpec
+//
+// Created by Yonas Kolb on 29/10/17.
+//
+
+import Foundation
+import xcproj
+import JSONUtilities
+
+public struct Dependency: Equatable {
+
+ public var type: DependencyType
+ public var reference: String
+ public var embed: Bool?
+ public var codeSign: Bool = true
+ public var removeHeaders: Bool = true
+ public var link: Bool = true
+
+ public init(type: DependencyType, reference: String, embed: Bool? = nil) {
+ self.type = type
+ self.reference = reference
+ self.embed = embed
+ }
+
+ public enum DependencyType {
+ case target
+ case framework
+ case carthage
+ }
+
+ public static func == (lhs: Dependency, rhs: Dependency) -> Bool {
+ return lhs.reference == rhs.reference &&
+ lhs.type == rhs.type &&
+ lhs.codeSign == rhs.codeSign &&
+ lhs.removeHeaders == rhs.removeHeaders &&
+ lhs.embed == rhs.embed &&
+ lhs.link == rhs.link
+ }
+
+ public var buildSettings: [String: Any] {
+ var attributes: [String] = []
+ if codeSign {
+ attributes.append("CodeSignOnCopy")
+ }
+ if removeHeaders {
+ attributes.append("RemoveHeadersOnCopy")
+ }
+ return ["ATTRIBUTES": attributes]
+ }
+}
+
+extension Dependency: JSONObjectConvertible {
+
+ public init(jsonDictionary: JSONDictionary) throws {
+ if let target: String = jsonDictionary.json(atKeyPath: "target") {
+ type = .target
+ reference = target
+ } else if let framework: String = jsonDictionary.json(atKeyPath: "framework") {
+ type = .framework
+ reference = framework
+ } else if let carthage: String = jsonDictionary.json(atKeyPath: "carthage") {
+ type = .carthage
+ reference = carthage
+ } else {
+ throw SpecParsingError.invalidDependency(jsonDictionary)
+ }
+
+ embed = jsonDictionary.json(atKeyPath: "embed")
+
+ if let bool: Bool = jsonDictionary.json(atKeyPath: "link") {
+ link = bool
+ }
+ if let bool: Bool = jsonDictionary.json(atKeyPath: "codeSign") {
+ codeSign = bool
+ }
+ if let bool: Bool = jsonDictionary.json(atKeyPath: "removeHeaders") {
+ removeHeaders = bool
+ }
+ }
+}
diff --git a/Sources/ProjectSpec/Platform.swift b/Sources/ProjectSpec/Platform.swift
index 67f2ff64..a29c1a90 100644
--- a/Sources/ProjectSpec/Platform.swift
+++ b/Sources/ProjectSpec/Platform.swift
@@ -18,7 +18,7 @@ public enum Platform: String {
case .macOS:
return "Mac"
default:
- return self.rawValue
+ return rawValue
}
}
}
diff --git a/Sources/ProjectSpec/ProjectSpec.swift b/Sources/ProjectSpec/ProjectSpec.swift
index 7789f9fe..ad69f678 100644
--- a/Sources/ProjectSpec/ProjectSpec.swift
+++ b/Sources/ProjectSpec/ProjectSpec.swift
@@ -29,22 +29,23 @@ public struct ProjectSpec {
public struct Options {
public var carthageBuildPath: String?
+ public var createIntermediateGroups: Bool
public var bundleIdPrefix: String?
public var settingPresets: SettingPresets = .all
-
+
public enum SettingPresets: String {
case all
case none
case project
case targets
-
+
public var applyTarget: Bool {
switch self {
case .all, .targets: return true
default: return false
}
}
-
+
public var applyProject: Bool {
switch self {
case .all, .project: return true
@@ -54,10 +55,11 @@ public struct ProjectSpec {
}
public init() {
+ createIntermediateGroups = false
}
}
- public init(basePath: Path, name: String, configs: [Config] = [], targets: [Target] = [], settings: Settings = .empty, settingGroups: [String: Settings] = [:], schemes: [Scheme] = [], options: Options = Options(), fileGroups: [String] = [], configFiles: [String: String] = [:], attributes: [String: Any] = [:]) {
+ public init(basePath: Path, name: String, configs: [Config] = Config.defaultConfigs, targets: [Target] = [], settings: Settings = .empty, settingGroups: [String: Settings] = [:], schemes: [Scheme] = [], options: Options = Options(), fileGroups: [String] = [], configFiles: [String: String] = [:], attributes: [String: Any] = [:]) {
self.basePath = basePath
self.name = name
self.targets = targets
@@ -103,7 +105,7 @@ extension ProjectSpec: CustomDebugStringConvertible {
extension ProjectSpec: Equatable {
- public static func ==(lhs: ProjectSpec, rhs: ProjectSpec) -> Bool {
+ public static func == (lhs: ProjectSpec, rhs: ProjectSpec) -> Bool {
return lhs.name == rhs.name &&
lhs.targets == rhs.targets &&
lhs.settings == rhs.settings &&
@@ -119,7 +121,7 @@ extension ProjectSpec: Equatable {
extension ProjectSpec.Options: Equatable {
- public static func ==(lhs: ProjectSpec.Options, rhs: ProjectSpec.Options) -> Bool {
+ public static func == (lhs: ProjectSpec.Options, rhs: ProjectSpec.Options) -> Bool {
return lhs.carthageBuildPath == rhs.carthageBuildPath &&
lhs.bundleIdPrefix == rhs.bundleIdPrefix &&
lhs.settingPresets == rhs.settingPresets
@@ -135,7 +137,7 @@ extension ProjectSpec {
settings = jsonDictionary.json(atKeyPath: "settings") ?? .empty
settingGroups = jsonDictionary.json(atKeyPath: "settingGroups") ?? jsonDictionary.json(atKeyPath: "settingPresets") ?? [:]
let configs: [String: String] = jsonDictionary.json(atKeyPath: "configs") ?? [:]
- self.configs = configs.map { Config(name: $0, type: ConfigType(rawValue: $1)) }.sorted { $0.name < $1.name }
+ self.configs = configs.isEmpty ? Config.defaultConfigs : configs.map { Config(name: $0, type: ConfigType(rawValue: $1)) }.sorted { $0.name < $1.name }
targets = try jsonDictionary.json(atKeyPath: "targets").sorted { $0.name < $1.name }
schemes = try jsonDictionary.json(atKeyPath: "schemes")
fileGroups = jsonDictionary.json(atKeyPath: "fileGroups") ?? []
@@ -160,5 +162,6 @@ extension ProjectSpec.Options: JSONObjectConvertible {
carthageBuildPath = jsonDictionary.json(atKeyPath: "carthageBuildPath")
bundleIdPrefix = jsonDictionary.json(atKeyPath: "bundleIdPrefix")
settingPresets = jsonDictionary.json(atKeyPath: "settingPresets") ?? .all
+ createIntermediateGroups = jsonDictionary.json(atKeyPath: "createIntermediateGroups") ?? false
}
}
diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index 9c699d88..e43fd6f5 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -48,7 +48,7 @@ public struct Scheme: Equatable {
self.targets = targets
}
- public static func ==(lhs: Build, rhs: Build) -> Bool {
+ public static func == (lhs: Build, rhs: Build) -> Bool {
return lhs.targets == rhs.targets
}
}
@@ -59,7 +59,7 @@ public struct Scheme: Equatable {
self.config = config
}
- public static func ==(lhs: Run, rhs: Run) -> Bool {
+ public static func == (lhs: Run, rhs: Run) -> Bool {
return lhs.config == rhs.config
}
}
@@ -70,7 +70,7 @@ public struct Scheme: Equatable {
self.config = config
}
- public static func ==(lhs: Test, rhs: Test) -> Bool {
+ public static func == (lhs: Test, rhs: Test) -> Bool {
return lhs.config == rhs.config
}
}
@@ -81,7 +81,7 @@ public struct Scheme: Equatable {
self.config = config
}
- public static func ==(lhs: Analyze, rhs: Analyze) -> Bool {
+ public static func == (lhs: Analyze, rhs: Analyze) -> Bool {
return lhs.config == rhs.config
}
}
@@ -92,7 +92,7 @@ public struct Scheme: Equatable {
self.config = config
}
- public static func ==(lhs: Profile, rhs: Profile) -> Bool {
+ public static func == (lhs: Profile, rhs: Profile) -> Bool {
return lhs.config == rhs.config
}
}
@@ -103,7 +103,7 @@ public struct Scheme: Equatable {
self.config = config
}
- public static func ==(lhs: Archive, rhs: Archive) -> Bool {
+ public static func == (lhs: Archive, rhs: Archive) -> Bool {
return lhs.config == rhs.config
}
}
@@ -117,12 +117,12 @@ public struct Scheme: Equatable {
self.buildTypes = buildTypes
}
- public static func ==(lhs: BuildTarget, rhs: BuildTarget) -> Bool {
+ public static func == (lhs: BuildTarget, rhs: BuildTarget) -> Bool {
return lhs.target == rhs.target && lhs.buildTypes == rhs.buildTypes
}
}
- public static func ==(lhs: Scheme, rhs: Scheme) -> Bool {
+ public static func == (lhs: Scheme, rhs: Scheme) -> Bool {
return lhs.build == rhs.build &&
lhs.run == rhs.run &&
lhs.test == rhs.test &&
diff --git a/Sources/ProjectSpec/Settings.swift b/Sources/ProjectSpec/Settings.swift
index 3682a2f8..5c705a66 100644
--- a/Sources/ProjectSpec/Settings.swift
+++ b/Sources/ProjectSpec/Settings.swift
@@ -10,7 +10,6 @@ import Foundation
import JSONUtilities
import xcproj
import PathKit
-import Yams
public struct Settings: Equatable, JSONObjectConvertible, CustomStringConvertible {
@@ -45,7 +44,7 @@ public struct Settings: Equatable, JSONObjectConvertible, CustomStringConvertibl
}
}
- public static func ==(lhs: Settings, rhs: Settings) -> Bool {
+ public static func == (lhs: Settings, rhs: Settings) -> Bool {
return NSDictionary(dictionary: lhs.buildSettings).isEqual(to: rhs.buildSettings) &&
lhs.configSettings == rhs.configSettings &&
lhs.groups == rhs.groups
@@ -90,3 +89,27 @@ extension Settings: ExpressibleByDictionaryLiteral {
self.init(dictionary: dictionary)
}
}
+
+extension Dictionary where Key == String, Value: Any {
+
+ public func merged(_ dictionary: [Key: Value]) -> [Key: Value] {
+ var mergedDictionary = self
+ mergedDictionary.merge(dictionary)
+ return mergedDictionary
+ }
+
+ public mutating func merge(_ dictionary: [Key: Value]) {
+ for (key, value) in dictionary {
+ self[key] = value
+ }
+ }
+
+ public func equals(_ dictionary: BuildSettings) -> Bool {
+ return NSDictionary(dictionary: self).isEqual(to: dictionary)
+ }
+}
+
+public func += (lhs: inout BuildSettings, rhs: BuildSettings?) {
+ guard let rhs = rhs else { return }
+ lhs.merge(rhs)
+}
diff --git a/Sources/ProjectSpec/Source.swift b/Sources/ProjectSpec/Source.swift
new file mode 100644
index 00000000..a03773fc
--- /dev/null
+++ b/Sources/ProjectSpec/Source.swift
@@ -0,0 +1,60 @@
+//
+// Source.swift
+// ProjectSpec
+//
+// Created by Yonas Kolb on 31/10/17.
+//
+
+import Foundation
+import JSONUtilities
+import PathKit
+
+public struct Source {
+
+ public var path: String
+ public var compilerFlags: [String]
+
+ public init(path: String, compilerFlags: [String] = []) {
+ self.path = path
+ self.compilerFlags = compilerFlags
+ }
+}
+
+extension Source: ExpressibleByStringLiteral {
+
+ public init(stringLiteral value: String) {
+ self = Source(path: value)
+ }
+
+ public init(extendedGraphemeClusterLiteral value: String) {
+ self = Source(path: value)
+ }
+
+ public init(unicodeScalarLiteral value: String) {
+ self = Source(path: value)
+ }
+}
+
+extension Source: JSONObjectConvertible {
+
+ public init(jsonDictionary: JSONDictionary) throws {
+ path = try jsonDictionary.json(atKeyPath: "path")
+ let maybeCompilerFlagsString: String? = jsonDictionary.json(atKeyPath: "compilerFlags")
+ let maybeCompilerFlagsArray: [String]? = jsonDictionary.json(atKeyPath: "compilerFlags")
+ compilerFlags = maybeCompilerFlagsArray ??
+ maybeCompilerFlagsString.map{ $0.split(separator: " ").map{ String($0) } } ?? []
+ }
+}
+
+extension Source: Equatable {
+
+ public static func == (lhs: Source, rhs: Source) -> Bool {
+ return lhs.path == rhs.path && lhs.compilerFlags == rhs.compilerFlags
+ }
+}
+
+extension Source: Hashable {
+ public var hashValue: Int {
+ return path.hashValue ^ compilerFlags.joined(separator: ":").hashValue
+ }
+}
diff --git a/Sources/XcodeGenKit/SpecLoader.swift b/Sources/ProjectSpec/SpecLoader.swift
similarity index 87%
rename from Sources/XcodeGenKit/SpecLoader.swift
rename to Sources/ProjectSpec/SpecLoader.swift
index 51f10c29..bda53a4a 100644
--- a/Sources/XcodeGenKit/SpecLoader.swift
+++ b/Sources/ProjectSpec/SpecLoader.swift
@@ -7,16 +7,15 @@
//
import Foundation
-import ProjectSpec
import PathKit
import Yams
import JSONUtilities
-public struct SpecLoader {
+extension ProjectSpec {
- public static func loadSpec(path: Path) throws -> ProjectSpec {
- let dictionary = try loadDictionary(path: path)
- return try ProjectSpec(basePath: path.parent(), jsonDictionary: dictionary)
+ public init(path: Path) throws {
+ let dictionary = try ProjectSpec.loadDictionary(path: path)
+ try self.init(basePath: path.parent(), jsonDictionary: dictionary)
}
private static func loadDictionary(path: Path) throws -> JSONDictionary {
diff --git a/Sources/ProjectSpec/ProjectSpecError.swift b/Sources/ProjectSpec/SpecParsingError.swift
similarity index 90%
rename from Sources/ProjectSpec/ProjectSpecError.swift
rename to Sources/ProjectSpec/SpecParsingError.swift
index 400c1921..49a82d1e 100644
--- a/Sources/ProjectSpec/ProjectSpecError.swift
+++ b/Sources/ProjectSpec/SpecParsingError.swift
@@ -8,7 +8,7 @@
import Foundation
-public enum ProjectSpecError: Error, CustomStringConvertible {
+public enum SpecParsingError: Error, CustomStringConvertible {
case unknownTargetType(String)
case unknownTargetPlatform(String)
case invalidDependency([String: Any])
diff --git a/Sources/XcodeGenKit/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift
similarity index 54%
rename from Sources/XcodeGenKit/SpecValidation.swift
rename to Sources/ProjectSpec/SpecValidation.swift
index d2841cdc..b509bccc 100644
--- a/Sources/XcodeGenKit/SpecValidation.swift
+++ b/Sources/ProjectSpec/SpecValidation.swift
@@ -6,21 +6,16 @@
//
import Foundation
-import ProjectSpec
import PathKit
extension ProjectSpec {
- public mutating func validate() throws {
+ public func validate() throws {
- if configs.isEmpty {
- configs = [Config(name: "Debug", type: .debug), Config(name: "Release", type: .release)]
- }
+ var errors: [SpecValidationError.ValidationError] = []
- var errors: [SpecValidationError.Error] = []
-
- func validateSettings(_ settings: Settings) -> [SpecValidationError.Error] {
- var errors: [SpecValidationError.Error] = []
+ func validateSettings(_ settings: Settings) -> [SpecValidationError.ValidationError] {
+ var errors: [SpecValidationError.ValidationError] = []
for group in settings.groups {
if let settings = settingGroups[group] {
errors += validateSettings(settings)
@@ -29,13 +24,15 @@ extension ProjectSpec {
}
}
for config in settings.configSettings.keys {
- if !configs.contains(where: { $0.name.lowercased().contains(config.lowercased())}) {
- errors.append(.invalidConfigReference(config))
+ if !configs.contains(where: { $0.name.lowercased().contains(config.lowercased()) }) {
+ errors.append(.invalidBuildSettingConfig(config))
}
}
return errors
}
+ errors += validateSettings(settings)
+
for fileGroup in fileGroups {
if !(basePath + fileGroup).exists {
errors.append(.invalidFileGroup(fileGroup))
@@ -46,6 +43,9 @@ extension ProjectSpec {
if !(basePath + configFile).exists {
errors.append(.invalidConfigFile(configFile: configFile, config: config))
}
+ if getConfig(config) == nil {
+ errors.append(.invalidConfigFileConfig(config))
+ }
}
for settings in settingGroups.values {
@@ -61,20 +61,17 @@ extension ProjectSpec {
for (config, configFile) in target.configFiles {
if !(basePath + configFile).exists {
- errors.append(.invalidTargetConfigFile(configFile: configFile, config: config, target: target.name))
+ errors.append(.invalidTargetConfigFile(target: target.name, configFile: configFile, config: config))
}
- }
-
- for config in target.settings.configSettings.keys {
if getConfig(config) == nil {
- errors.append(.invalidBuildSettingConfig(config))
+ errors.append(.invalidConfigFileConfig(config))
}
}
for source in target.sources {
- let sourcePath = basePath + source
+ let sourcePath = basePath + source.path
if !sourcePath.exists {
- errors.append(.missingTargetSource(target: target.name, source: sourcePath.string))
+ errors.append(.invalidTargetSource(target: target.name, source: sourcePath.string))
}
}
@@ -110,7 +107,7 @@ extension ProjectSpec {
if case let .path(pathString) = script.script {
let scriptPath = basePath + pathString
if !scriptPath.exists {
- errors.append(.invalidBuildScriptPath(target: target.name, path: pathString))
+ errors.append(.invalidBuildScriptPath(target: target.name, name: script.name, path: pathString))
}
}
}
@@ -146,54 +143,3 @@ extension ProjectSpec {
}
}
}
-
-public struct SpecValidationError: Error, CustomStringConvertible {
-
- public var errors: [Error]
-
- public enum Error: CustomStringConvertible {
- case invalidTargetDependency(target: String, dependency: String)
- case invalidSchemeTarget(scheme: String, target: String)
- case invalidSchemeConfig(scheme: String, config: String)
- case invalidConfigFile(configFile: String, config: String)
- case invalidTargetConfigFile(configFile: String, config: String, target: String)
- case invalidBuildSettingConfig(String)
- case invalidSettingsGroup(String)
- case missingTargetSource(target: String, source: String)
- case invalidBuildScriptPath(target: String, path: String)
- case invalidTargetSchemeConfigVariant(target: String, configVariant: String, configType: ConfigType)
- case invalidTargetSchemeTest(target: String, testTarget: String)
- case invalidFileGroup(String)
- case invalidConfigReference(String)
- case missingConfigTypeForGeneratedTargetScheme(target: String, configType: ConfigType)
-
- public var description: String {
- switch self {
- case let .invalidTargetDependency(target, dependency): return "Target \(target.quoted) has invalid dependency: \(dependency.quoted)"
- case let .invalidTargetConfigFile(configFile, config, target): return "Target \(target.quoted) has invalid config file \(configFile.quoted) for config \(config.quoted)"
- case let .invalidConfigFile(configFile, config): return "Invalid config file \(configFile.quoted) for config \(config.quoted)"
- case let .invalidSchemeTarget(scheme, target): return "Scheme \(scheme.quoted) has invalid build target \(target.quoted)"
- case let .invalidSchemeConfig(scheme, config): return "Scheme \(scheme.quoted) has invalid build configuration \(config.quoted)"
- case let .invalidBuildSettingConfig(config): return "Build setting has invalid build configuration \(config.quoted)"
- case let .missingTargetSource(target, source): return "Target \(target.quoted) has a missing source directory \(source.quoted)"
- case let .invalidSettingsGroup(group): return "Invalid settings group \(group.quoted)"
- case let .invalidBuildScriptPath(target, path): return "Target \(target.quoted) has a script path that doesn't exist \(path.quoted)"
- case let .invalidTargetSchemeConfigVariant(target, configVariant, configType): 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)"
- case let .invalidTargetSchemeTest(target, test): return "Target \(target.quoted) scheme has invalid test \(test.quoted)"
- case let .invalidFileGroup(group): return "Invalid file group \(group.quoted)"
- case let .invalidConfigReference(config): return "Invalid config reference \(config.quoted)"
- case let .missingConfigTypeForGeneratedTargetScheme(target, configType): return "Target \(target.quoted) is missing a config of type \(configType.rawValue) to generate its scheme"
- }
- }
- }
-
- public var description: String {
- let title: String
- if errors.count == 1 {
- title = "Spec validation error: "
- } else {
- title = "\(errors.count) Spec validations errors:\n\t- "
- }
- return "\(title)" + errors.map { $0.description }.joined(separator: "\n\t- ")
- }
-}
diff --git a/Sources/ProjectSpec/SpecValidationError.swift b/Sources/ProjectSpec/SpecValidationError.swift
new file mode 100644
index 00000000..9d064a85
--- /dev/null
+++ b/Sources/ProjectSpec/SpecValidationError.swift
@@ -0,0 +1,59 @@
+//
+// SpecValidationError.swift
+// ProjectSpec
+//
+// Created by Yonas Kolb on 29/10/17.
+//
+
+import Foundation
+
+public struct SpecValidationError: Error, CustomStringConvertible {
+
+ public var errors: [ValidationError]
+
+ public enum ValidationError: Error, CustomStringConvertible {
+ case invalidTargetDependency(target: String, dependency: String)
+ case invalidTargetSource(target: String, source: String)
+ case invalidTargetConfigFile(target: String, configFile: String, config: String)
+ case invalidTargetSchemeConfigVariant(target: String, configVariant: String, configType: ConfigType)
+ case invalidTargetSchemeTest(target: String, testTarget: String)
+ case invalidSchemeTarget(scheme: String, target: String)
+ case invalidSchemeConfig(scheme: String, config: String)
+ case invalidConfigFile(configFile: String, config: String)
+ case invalidBuildSettingConfig(String)
+ case invalidSettingsGroup(String)
+ case invalidBuildScriptPath(target: String, name: String?, path: String)
+ case invalidFileGroup(String)
+ case invalidConfigFileConfig(String)
+ case missingConfigTypeForGeneratedTargetScheme(target: String, configType: ConfigType)
+
+ public var description: String {
+ switch self {
+ case let .invalidTargetDependency(target, dependency): return "Target \(target.quoted) has invalid dependency: \(dependency.quoted)"
+ case let .invalidTargetConfigFile(target, configFile, config): return "Target \(target.quoted) has invalid config file \(configFile.quoted) for config \(config.quoted)"
+ case let .invalidTargetSource(target, source): return "Target \(target.quoted) has a missing source directory \(source.quoted)"
+ case let .invalidTargetSchemeConfigVariant(target, configVariant, configType): 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)"
+ case let .invalidTargetSchemeTest(target, test): return "Target \(target.quoted) scheme has invalid test \(test.quoted)"
+ case let .invalidConfigFile(configFile, config): return "Invalid config file \(configFile.quoted) for config \(config.quoted)"
+ case let .invalidSchemeTarget(scheme, target): return "Scheme \(scheme.quoted) has invalid build target \(target.quoted)"
+ case let .invalidSchemeConfig(scheme, config): return "Scheme \(scheme.quoted) has invalid build configuration \(config.quoted)"
+ case let .invalidBuildSettingConfig(config): return "Build setting has invalid build configuration \(config.quoted)"
+ case let .invalidSettingsGroup(group): return "Invalid settings group \(group.quoted)"
+ case let .invalidBuildScriptPath(target, name, path): return "Target \(target.quoted) has a script \(name != nil ? "\(name!.quoted) which has a " : "")path that doesn't exist \(path.quoted)"
+ case let .invalidFileGroup(group): return "Invalid file group \(group.quoted)"
+ case let .invalidConfigFileConfig(config): return "Config file has invalid config \(config.quoted)"
+ case let .missingConfigTypeForGeneratedTargetScheme(target, configType): return "Target \(target.quoted) is missing a config of type \(configType.rawValue) to generate its scheme"
+ }
+ }
+ }
+
+ public var description: String {
+ let title: String
+ if errors.count == 1 {
+ title = "Spec validation error: "
+ } else {
+ title = "\(errors.count) Spec validations errors:\n\t- "
+ }
+ return "\(title)" + errors.map { $0.description }.joined(separator: "\n\t- ")
+ }
+}
diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift
index d0277b98..91402091 100644
--- a/Sources/ProjectSpec/Target.swift
+++ b/Sources/ProjectSpec/Target.swift
@@ -15,7 +15,7 @@ public struct Target {
public var type: PBXProductType
public var platform: Platform
public var settings: Settings
- public var sources: [String]
+ public var sources: [Source]
public var dependencies: [Dependency]
public var prebuildScripts: [BuildScript]
public var postbuildScripts: [BuildScript]
@@ -30,7 +30,7 @@ public struct Target {
return name
}
- public init(name: String, type: PBXProductType, platform: Platform, settings: Settings = .empty, configFiles: [String: String] = [:], sources: [String] = [], dependencies: [Dependency] = [], prebuildScripts: [BuildScript] = [], postbuildScripts: [BuildScript] = [], scheme: TargetScheme? = nil) {
+ public init(name: String, type: PBXProductType, platform: Platform, settings: Settings = .empty, configFiles: [String: String] = [:], sources: [Source] = [], dependencies: [Dependency] = [], prebuildScripts: [BuildScript] = [], postbuildScripts: [BuildScript] = [], scheme: TargetScheme? = nil) {
self.name = name
self.type = type
self.platform = platform
@@ -120,7 +120,7 @@ extension Target {
extension Target: Equatable {
- public static func ==(lhs: Target, rhs: Target) -> Bool {
+ public static func == (lhs: Target, rhs: Target) -> Bool {
return lhs.name == rhs.name &&
lhs.type == rhs.type &&
lhs.platform == rhs.platform &&
@@ -135,8 +135,8 @@ extension Target: Equatable {
}
public struct TargetScheme {
- public let testTargets: [String]
- public let configVariants: [String]
+ public var testTargets: [String]
+ public var configVariants: [String]
public init(testTargets: [String] = [], configVariants: [String] = []) {
self.testTargets = testTargets
@@ -146,7 +146,7 @@ public struct TargetScheme {
extension TargetScheme: Equatable {
- public static func ==(lhs: TargetScheme, rhs: TargetScheme) -> Bool {
+ public static func == (lhs: TargetScheme, rhs: TargetScheme) -> Bool {
return lhs.testTargets == rhs.testTargets &&
lhs.configVariants == rhs.configVariants
}
@@ -168,20 +168,30 @@ extension Target: NamedJSONDictionaryConvertible {
if let type = PBXProductType(string: typeString) {
self.type = type
} else {
- throw ProjectSpecError.unknownTargetType(typeString)
+ throw SpecParsingError.unknownTargetType(typeString)
}
let platformString: String = try jsonDictionary.json(atKeyPath: "platform")
if let platform = Platform(rawValue: platformString) {
self.platform = platform
} else {
- throw ProjectSpecError.unknownTargetPlatform(platformString)
+ throw SpecParsingError.unknownTargetPlatform(platformString)
}
settings = jsonDictionary.json(atKeyPath: "settings") ?? .empty
configFiles = jsonDictionary.json(atKeyPath: "configFiles") ?? [:]
if let source: String = jsonDictionary.json(atKeyPath: "sources") {
- sources = [source]
+ sources = [Source(path: source)]
+ } else if let array = jsonDictionary["sources"] as? [Any] {
+ sources = try array.flatMap { source in
+ if let string = source as? String {
+ return Source(path: string)
+ } else if let dictionary = source as? [String: Any] {
+ return try Source(jsonDictionary: dictionary)
+ } else {
+ return nil
+ }
+ }
} else {
- sources = jsonDictionary.json(atKeyPath: "sources") ?? []
+ sources = []
}
if jsonDictionary["dependencies"] == nil {
dependencies = []
@@ -193,75 +203,3 @@ extension Target: NamedJSONDictionaryConvertible {
scheme = jsonDictionary.json(atKeyPath: "scheme")
}
}
-
-public struct Dependency: Equatable {
-
- public var type: DependencyType
- public var reference: String
- public var embed: Bool?
- public var codeSign: Bool = true
- public var removeHeaders: Bool = true
- public var link: Bool = true
-
- public init(type: DependencyType, reference: String, embed: Bool? = nil) {
- self.type = type
- self.reference = reference
- self.embed = embed
- }
-
- public enum DependencyType {
- case target
- case framework
- case carthage
- }
-
- public static func ==(lhs: Dependency, rhs: Dependency) -> Bool {
- return lhs.reference == rhs.reference &&
- lhs.type == rhs.type &&
- lhs.codeSign == rhs.codeSign &&
- lhs.removeHeaders == rhs.removeHeaders &&
- lhs.embed == rhs.embed &&
- lhs.link == rhs.link
- }
-
- public var buildSettings: [String: Any] {
- var attributes: [String] = []
- if codeSign {
- attributes.append("CodeSignOnCopy")
- }
- if removeHeaders {
- attributes.append("RemoveHeadersOnCopy")
- }
- return ["ATTRIBUTES": attributes]
- }
-}
-
-extension Dependency: JSONObjectConvertible {
-
- public init(jsonDictionary: JSONDictionary) throws {
- if let target: String = jsonDictionary.json(atKeyPath: "target") {
- type = .target
- reference = target
- } else if let framework: String = jsonDictionary.json(atKeyPath: "framework") {
- type = .framework
- reference = framework
- } else if let carthage: String = jsonDictionary.json(atKeyPath: "carthage") {
- type = .carthage
- reference = carthage
- } else {
- throw ProjectSpecError.invalidDependency(jsonDictionary)
- }
-
- embed = jsonDictionary.json(atKeyPath: "embed")
-
- if let bool: Bool = jsonDictionary.json(atKeyPath: "link") {
- link = bool
- }
- if let bool: Bool = jsonDictionary.json(atKeyPath: "codeSign") {
- codeSign = bool
- }
- if let bool: Bool = jsonDictionary.json(atKeyPath: "removeHeaders") {
- removeHeaders = bool
- }
- }
-}
diff --git a/Sources/ProjectSpec/ProjectExtensions.swift b/Sources/ProjectSpec/XCProjExtensions.swift
similarity index 63%
rename from Sources/ProjectSpec/ProjectExtensions.swift
rename to Sources/ProjectSpec/XCProjExtensions.swift
index 93317b58..272e7c3e 100644
--- a/Sources/ProjectSpec/ProjectExtensions.swift
+++ b/Sources/ProjectSpec/XCProjExtensions.swift
@@ -10,30 +10,6 @@ import Foundation
import xcproj
import PathKit
-extension Dictionary where Key == String, Value: Any {
-
- public func merged(_ dictionary: [Key: Value]) -> [Key: Value] {
- var mergedDictionary = self
- mergedDictionary.merge(dictionary)
- return mergedDictionary
- }
-
- public mutating func merge(_ dictionary: [Key: Value]) {
- for (key, value) in dictionary {
- self[key] = value
- }
- }
-
- public func equals(_ dictionary: BuildSettings) -> Bool {
- return NSDictionary(dictionary: self).isEqual(to: dictionary)
- }
-}
-
-public func +=(lhs: inout BuildSettings, rhs: BuildSettings?) {
- guard let rhs = rhs else { return }
- lhs.merge(rhs)
-}
-
extension PBXProductType {
init?(string: String) {
diff --git a/Sources/XcodeGenKit/Yaml.swift b/Sources/ProjectSpec/Yaml.swift
similarity index 93%
rename from Sources/XcodeGenKit/Yaml.swift
rename to Sources/ProjectSpec/Yaml.swift
index 76fefd77..f96ff302 100644
--- a/Sources/XcodeGenKit/Yaml.swift
+++ b/Sources/ProjectSpec/Yaml.swift
@@ -9,7 +9,7 @@ import Foundation
import Yams
import PathKit
-func loadYamlDictionary(path: Path) throws -> [String: Any] {
+public func loadYamlDictionary(path: Path) throws -> [String: Any] {
let string: String = try path.read()
if string == "" {
return [:]
diff --git a/Sources/XcodeGen/main.swift b/Sources/XcodeGen/main.swift
index 4a37ea08..97602d0d 100644
--- a/Sources/XcodeGen/main.swift
+++ b/Sources/XcodeGen/main.swift
@@ -29,7 +29,7 @@ func generate(spec: String, project: String) {
let spec: ProjectSpec
do {
- spec = try SpecLoader.loadSpec(path: specPath)
+ spec = try ProjectSpec(path: specPath)
print("📋 Loaded spec:\n \(spec.debugDescription.replacingOccurrences(of: "\n", with: "\n "))")
} catch let error as JSONUtilities.DecodingError {
print("Parsing spec failed: \(error.description)".red)
diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift
index 0d4b72ac..f28f2ca4 100644
--- a/Sources/XcodeGenKit/PBXProjGenerator.swift
+++ b/Sources/XcodeGenKit/PBXProjGenerator.swift
@@ -65,7 +65,8 @@ public class PBXProjGenerator {
project = PBXProj(objectVersion: 46, rootObject: generateUUID(PBXProject.self, spec.name))
for group in spec.fileGroups {
- _ = try getGroups(path: spec.basePath + group)
+ // TODO: call a seperate function that only creates groups not source files
+ _ = try getSources(sourceMetadata: Source(path: group), path: spec.basePath + group)
}
let buildConfigs: [XCBuildConfiguration] = spec.configs.map { config in
@@ -143,13 +144,17 @@ public class PBXProjGenerator {
let buildFile: PBXBuildFile
}
- func generateSourceFile(path: Path) -> SourceFile {
+ func generateSourceFile(sourceMetadata source: Source, path: Path) -> SourceFile {
let fileReference = fileReferencesByPath[path]!
- var settings: [String: Any]?
+ var settings: [String: Any] = [:]
if getBuildPhaseForPath(path) == .headers {
settings = ["ATTRIBUTES": ["Public"]]
}
- let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, fileReference), fileRef: fileReference, settings: settings)
+ if source.compilerFlags.count > 0 {
+ settings["COMPILER_FLAGS"] = source.compilerFlags.joined(separator: " ")
+ }
+
+ let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, fileReference), fileRef: fileReference, settings: settings.isEmpty ? nil : settings)
return SourceFile(path: path, fileReference: fileReference, buildFile: buildFile)
}
@@ -157,17 +162,20 @@ public class PBXProjGenerator {
let carthageDependencies = getAllCarthageDependencies(target: target)
- let sourcePaths = target.sources.map { spec.basePath + $0 }
- var sourceFiles: [SourceFile] = []
+ let sourceFiles = try getAllSourceFiles(sources: target.sources)
- for source in sourcePaths {
- let sourceGroups = try getGroups(path: source)
- sourceFiles += sourceGroups.sourceFiles
- }
-
- // find all Info.plist
- let infoPlists: [Path] = sourcePaths.reduce([]) {
- $0 + ((try? $1.recursiveChildren()) ?? []).filter { $0.lastComponent == "Info.plist" }
+ // find all Info.plist files
+ let infoPlists: [Path] = target.sources.map { spec.basePath + $0.path }.flatMap { (path) -> [Path] in
+ if path.isFile {
+ if path.lastComponent == "Info.plist" {
+ return [path]
+ }
+ } else {
+ if let children = try? path.recursiveChildren() {
+ return children.filter { $0.lastComponent == "Info.plist" }
+ }
+ }
+ return []
}
let configs: [XCBuildConfiguration] = spec.configs.map { config in
@@ -354,9 +362,11 @@ public class PBXProjGenerator {
addObject(resourcesBuildPhase)
buildPhases.append(resourcesBuildPhase.reference)
- let headersBuildPhase = PBXHeadersBuildPhase(reference: generateUUID(PBXHeadersBuildPhase.self, target.name), files: getBuildFilesForPhase(.headers))
- addObject(headersBuildPhase)
- buildPhases.append(headersBuildPhase.reference)
+ if target.type == .framework || target.type == .dynamicLibrary {
+ let headersBuildPhase = PBXHeadersBuildPhase(reference: generateUUID(PBXHeadersBuildPhase.self, target.name), files: getBuildFilesForPhase(.headers))
+ addObject(headersBuildPhase)
+ buildPhases.append(headersBuildPhase.reference)
+ }
if !targetFrameworkBuildFiles.isEmpty {
@@ -406,8 +416,8 @@ public class PBXProjGenerator {
}
let carthageFrameworksToEmbed = Array(Set(carthageDependencies
- .filter { $0.embed ?? true }
- .map { $0.reference }))
+ .filter { $0.embed ?? true }
+ .map { $0.reference }))
.sorted()
if !carthageFrameworksToEmbed.isEmpty {
@@ -465,7 +475,7 @@ public class PBXProjGenerator {
}
if let fileExtension = path.extension {
switch fileExtension {
- case "swift", "m", "cpp": return .sources
+ case "swift", "m", "mm", "cpp", "c": return .sources
case "h", "hh", "hpp", "ipp", "tpp", "hxx", "def": return .headers
case "xcconfig", "entitlements", "gpx", "lproj", "apns": return nil
default: return .resources
@@ -474,94 +484,134 @@ public class PBXProjGenerator {
return nil
}
- func getFileReference(path: Path, inPath: Path) -> String {
+ func getFileReference(path: Path, inPath: Path, name: String? = nil) -> String {
if let fileReference = fileReferencesByPath[path] {
return fileReference
} else {
- let fileReference = PBXFileReference(reference: generateUUID(PBXFileReference.self, path.lastComponent), sourceTree: .group, path: path.byRemovingBase(path: inPath).string)
+ let fileReference = PBXFileReference(reference: generateUUID(PBXFileReference.self, path.lastComponent), sourceTree: .group, name: name, path: path.byRemovingBase(path: inPath).string)
addObject(fileReference)
fileReferencesByPath[path] = fileReference.reference
return fileReference.reference
}
}
- func getGroups(path: Path, depth: Int = 0) throws -> (sourceFiles: [SourceFile], groups: [PBXGroup]) {
+ func getAllSourceFiles(sources: [Source]) throws -> [SourceFile] {
+ return try sources.flatMap{ try getSources(sourceMetadata: $0, path: spec.basePath + $0.path).sourceFiles }
+ }
+
+ func getSingleGroup(path: Path, mergingChildren children: [String], depth: Int = 0) -> PBXGroup {
+ let group: PBXGroup
+ if let cachedGroup = groupsByPath[path] {
+ cachedGroup.children += children
+ group = cachedGroup
+ } else {
+ group = PBXGroup(
+ reference: generateUUID(PBXGroup.self, path.lastComponent),
+ children: children,
+ sourceTree: .group,
+ name: path.lastComponent,
+ path: depth == 0 && !spec.options.createIntermediateGroups ?
+ path.byRemovingBase(path: spec.basePath).string :
+ path.lastComponent
+ )
+ addObject(group)
+ groupsByPath[path] = group
+ }
+ return group
+ }
+
+ // Add groups for all parents recursively
+ // ex: path/foo/bar/baz/Hello.swift -> path:[foo:[bar:[baz:[Hello.swift]]]]
+ func getIntermediateGroups(path: Path, group: PBXGroup) -> PBXGroup {
+ // verify path is a subpath of spec.basePath
+ guard Path(components: zip(path.components, spec.basePath.components).map{ $0.0 }) == spec.basePath else {
+ return group
+ }
+
+ // base case
+ if path == spec.basePath {
+ return group
+ }
+
+ // recursive case
+ return getIntermediateGroups(
+ path: path.parent(),
+ group: getSingleGroup(path: path, mergingChildren: [group.reference])
+ )
+ }
+
+ func getVariantGroup(path: Path, inPath: Path) -> PBXVariantGroup {
+ let variantGroup: PBXVariantGroup
+ if let cachedGroup = variantGroupsByPath[path] {
+ variantGroup = cachedGroup
+ } else {
+ variantGroup = PBXVariantGroup(reference: generateUUID(PBXVariantGroup.self, path.byRemovingBase(path: inPath).string),
+ children: [],
+ name: path.lastComponent,
+ sourceTree: .group)
+ addObject(variantGroup)
+ variantGroupsByPath[path] = variantGroup
+ }
+ return variantGroup
+ }
+
+ func getSources(sourceMetadata source: Source, path: Path, depth: Int = 0) throws -> (sourceFiles: [SourceFile], groups: [PBXGroup]) {
+ // if we have a file, move it to children and use the parent as the path
+ let (children, path) = path.isFile ?
+ ([path], path.parent()) :
+ (try path.children(), path)
let excludedFiles: [String] = [".DS_Store"]
- let directories = try path.children()
+ let directories = children
.filter { $0.isDirectory && $0.extension == nil && $0.extension != "lproj" }
.sorted { $0.lastComponent < $1.lastComponent }
- let filePaths = try path.children()
+ let filePaths = children
.filter { $0.isFile || $0.extension != nil && $0.extension != "lproj" }
.filter { !excludedFiles.contains($0.lastComponent) }
.sorted { $0.lastComponent < $1.lastComponent }
- let localisedDirectories = try path.children()
+ let localisedDirectories = children
.filter { $0.extension == "lproj" }
.sorted { $0.lastComponent < $1.lastComponent }
var groupChildren: [String] = filePaths.map { getFileReference(path: $0, inPath: path) }
- var allSourceFiles: [SourceFile] = filePaths.map { generateSourceFile(path: $0) }
+ var allSourceFiles: [SourceFile] = filePaths.map {
+ generateSourceFile(sourceMetadata: Source(path: $0.string, compilerFlags: source.compilerFlags), path: $0)
+ }
var groups: [PBXGroup] = []
for path in directories {
- let subGroups = try getGroups(path: path, depth: depth + 1)
+ let subGroups = try getSources(sourceMetadata: source, path: path, depth: depth + 1)
allSourceFiles += subGroups.sourceFiles
groupChildren.append(subGroups.groups.first!.reference)
groups += subGroups.groups
}
// create variant groups of the base localisation first
- var baseLocalisationVariantGroups:[PBXVariantGroup] = []
+ var baseLocalisationVariantGroups: [PBXVariantGroup] = []
if let baseLocalisedDirectory = localisedDirectories.first(where: { $0.lastComponent == "Base.lproj" }) {
- for path in try baseLocalisedDirectory.children() {
- let filePath = "\(baseLocalisedDirectory.lastComponent)/\(path.lastComponent)"
-
- let variantGroup: PBXVariantGroup
- if let cachedGroup = variantGroupsByPath[path] {
- variantGroup = cachedGroup
- } else {
- variantGroup = PBXVariantGroup(reference: generateUUID(PBXVariantGroup.self, filePath),
- children: [],
- name: path.lastComponent,
- sourceTree: .group)
- variantGroupsByPath[path] = variantGroup
-
- addObject(variantGroup)
- groupChildren.append(variantGroup.reference)
- }
-
+ for filePath in try baseLocalisedDirectory.children() {
+ let variantGroup = getVariantGroup(path: filePath, inPath: path)
+ groupChildren.append(variantGroup.reference)
baseLocalisationVariantGroups.append(variantGroup)
let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, variantGroup.reference), fileRef: variantGroup.reference, settings: nil)
- allSourceFiles.append(SourceFile(path: path, fileReference: variantGroup.reference, buildFile: buildFile))
+ allSourceFiles.append(SourceFile(path: filePath, fileReference: variantGroup.reference, buildFile: buildFile))
}
}
// add references to localised resources into base localisation variant groups
for localisedDirectory in localisedDirectories {
let localisationName = localisedDirectory.lastComponentWithoutExtension
- for path in try localisedDirectory.children().sorted { $0.lastComponent < $1.lastComponent } {
- let filePath = "\(localisedDirectory.lastComponent)/\(path.lastComponent)"
-
+ for filePath in try localisedDirectory.children().sorted { $0.lastComponent < $1.lastComponent } {
// find base localisation variant group
- let name = path.lastComponentWithoutExtension
- let variantGroup = baseLocalisationVariantGroups.first { Path($0.name!).lastComponentWithoutExtension == name }
+ // ex: Foo.strings will be added to Foo.strings or Foo.storyboard variant group
+ let variantGroup = baseLocalisationVariantGroups.first { Path($0.name!).lastComponent == filePath.lastComponent } ??
+ baseLocalisationVariantGroups.first { Path($0.name!).lastComponentWithoutExtension == filePath.lastComponentWithoutExtension }
- let fileReference: String
- if let cachedFileReference = fileReferencesByPath[path] {
- fileReference = cachedFileReference
- } else {
- let reference = PBXFileReference(reference: generateUUID(PBXFileReference.self, path.lastComponent),
- sourceTree: .group,
- name: variantGroup != nil ? localisationName : path.lastComponent,
- path: filePath)
- addObject(reference)
- fileReference = reference.reference
- fileReferencesByPath[path] = fileReference
- }
+ let fileReference = getFileReference(path: filePath, inPath: path, name: variantGroup != nil ? localisationName : filePath.lastComponent)
if let variantGroup = variantGroup {
if !variantGroup.children.contains(fileReference) {
@@ -572,23 +622,24 @@ public class PBXProjGenerator {
let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, fileReference),
fileRef: fileReference,
settings: nil)
- allSourceFiles.append(SourceFile(path: path, fileReference: fileReference, buildFile: buildFile))
+ allSourceFiles.append(SourceFile(path: filePath, fileReference: fileReference, buildFile: buildFile))
groupChildren.append(fileReference)
}
}
}
- let groupPath: String = depth == 0 ? path.byRemovingBase(path: spec.basePath).string : path.lastComponent
let group: PBXGroup
- if let cachedGroup = groupsByPath[path] {
- group = cachedGroup
+ if spec.options.createIntermediateGroups {
+ group = getIntermediateGroups(
+ path: path.parent(),
+ group: getSingleGroup(path: path, mergingChildren: groupChildren, depth: depth)
+ )
} else {
- group = PBXGroup(reference: generateUUID(PBXGroup.self, path.lastComponent), children: groupChildren, sourceTree: .group, name: path.lastComponent, path: groupPath)
- addObject(group)
- if depth == 0 {
- topLevelGroups.append(group)
- }
- groupsByPath[path] = group
+ group = getSingleGroup(path: path, mergingChildren: groupChildren, depth: depth)
+ }
+
+ if depth == 0 {
+ topLevelGroups.append(group)
}
groups.insert(group, at: 0)
return (allSourceFiles, groups)
diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift
index 1670e7a8..bf647892 100644
--- a/Sources/XcodeGenKit/ProjectGenerator.swift
+++ b/Sources/XcodeGenKit/ProjectGenerator.swift
@@ -15,7 +15,7 @@ import ProjectSpec
public class ProjectGenerator {
- var spec: ProjectSpec
+ let spec: ProjectSpec
let currentXcodeVersion = "0900"
public init(spec: ProjectSpec) {
diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift
index cd59a194..9edda5bc 100644
--- a/Sources/XcodeGenKit/SettingsBuilder.swift
+++ b/Sources/XcodeGenKit/SettingsBuilder.swift
@@ -37,7 +37,7 @@ extension ProjectSpec {
public func getTargetBuildSettings(target: Target, config: Config) -> BuildSettings {
var buildSettings = BuildSettings()
-
+
if options.settingPresets.applyTarget {
buildSettings += SettingsPresetFile.platform(target.platform).getBuildSettings()
buildSettings += SettingsPresetFile.product(target.type).getBuildSettings()
diff --git a/Tests/XcodeGenKitTests/FixtureTests.swift b/Tests/XcodeGenKitTests/FixtureTests.swift
index fe808cbc..607eb262 100644
--- a/Tests/XcodeGenKitTests/FixtureTests.swift
+++ b/Tests/XcodeGenKitTests/FixtureTests.swift
@@ -7,7 +7,7 @@ import ProjectSpec
let fixturePath = Path(#file).parent().parent().parent() + "Fixtures"
func generate(specPath: Path, projectPath: Path) throws -> XcodeProj {
- let spec = try SpecLoader.loadSpec(path: specPath)
+ let spec = try ProjectSpec(path: specPath)
let generator = ProjectGenerator(spec: spec)
let project = try generator.generateProject()
let oldProject = try XcodeProj(path: projectPath)
@@ -27,11 +27,11 @@ func fixtureTests() {
var project: XcodeProj?
$0.it("generates") {
- project = try generate(specPath: fixturePath + "TestProject/spec.yml", projectPath: fixturePath + "TestProject/GeneratedProject.xcodeproj")
+ project = try generate(specPath: fixturePath + "TestProject/spec.yml", projectPath: fixturePath + "TestProject/Project.xcodeproj")
}
$0.it("generates variant group") {
- guard let project = project else { throw failure("Project is not generated") }
+ guard let project = project else { return }
func getFileReferences(_ path: String) -> [PBXFileReference] {
return project.pbxproj.fileReferences.filter { $0.path == path }
diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
index 19ca62a1..582d7498 100644
--- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift
@@ -3,6 +3,7 @@ import XcodeGenKit
import xcproj
import PathKit
import ProjectSpec
+import Yams
func projectGeneratorTests() {
@@ -12,6 +13,7 @@ func projectGeneratorTests() {
}
func getPbxProj(_ spec: ProjectSpec) throws -> PBXProj {
+ try spec.validate()
return try getProject(spec).pbxproj
}
@@ -38,20 +40,19 @@ func projectGeneratorTests() {
let buildConfigs = project.pbxproj.configurationLists.getReference(buildConfigList),
let buildConfigReference = buildConfigs.buildConfigurations.first,
let buildConfig = project.pbxproj.buildConfigurations.getReference(buildConfigReference) else {
- throw failure("Build Config not found")
+ throw failure("Build Config not found")
}
try expect(buildConfig.buildSettings["PRODUCT_BUNDLE_IDENTIFIER"] as? String) == "com.test.MyFramework"
}
-
+
$0.it("clears setting presets") {
var options = ProjectSpec.Options()
options.settingPresets = .none
let spec = ProjectSpec(basePath: "", name: "test", targets: [framework], options: options)
let project = try getProject(spec)
- let allSettings = project.pbxproj.buildConfigurations.reduce([:]) { $0.merged($1.buildSettings)}.keys.sorted()
+ let allSettings = project.pbxproj.buildConfigurations.reduce([:]) { $0.merged($1.buildSettings) }.keys.sorted()
try expect(allSettings) == ["SETTING_2"]
}
-
}
$0.describe("Config") {
@@ -73,7 +74,7 @@ func projectGeneratorTests() {
try expect(configs).contains(name: "config1")
try expect(configs).contains(name: "config2")
}
-
+
$0.it("clears config settings when missing type") {
let spec = ProjectSpec(basePath: "", name: "test", configs: [Config(name: "config")])
let project = try getProject(spec)
@@ -84,7 +85,7 @@ func projectGeneratorTests() {
}
$0.it("merges settings") {
- let spec = try SpecLoader.loadSpec(path: fixturePath + "settings_test.yml")
+ let spec = try ProjectSpec(path: fixturePath + "settings_test.yml")
guard let config = spec.getConfig("config1") else { throw failure("Couldn't find config1") }
let debugProjectSettings = spec.getProjectBuildSettings(config: config)
@@ -114,8 +115,9 @@ func projectGeneratorTests() {
$0.it("applies partial config settings") {
let spec = ProjectSpec(basePath: "", name: "test", configs: [
Config(name: "Staging Debug", type: .debug),
- Config(name: "Staging Release", type: .release)],
- settings: Settings(configSettings: ["staging": ["SETTING1": "VALUE1"], "debug": ["SETTING2": "VALUE2"]]))
+ Config(name: "Staging Release", type: .release),
+ ],
+ settings: Settings(configSettings: ["staging": ["SETTING1": "VALUE1"], "debug": ["SETTING2": "VALUE2"]]))
var buildSettings = spec.getProjectBuildSettings(config: spec.configs.first!)
try expect(buildSettings["SETTING1"] as? String) == "VALUE1"
@@ -232,5 +234,159 @@ func projectGeneratorTests() {
try expect(xcscheme.archiveAction?.buildConfiguration) == "Test Release"
}
}
+
+ $0.describe("Sources") {
+
+ let directoryPath = Path("TestDirectory")
+
+ var target = Target(name: "Test", type: .application, platform: .iOS)
+ var spec = ProjectSpec(basePath: directoryPath, name: "Test", targets: [target])
+
+ func createDirectories(_ directories: String) throws {
+
+ let yaml = try Yams.load(yaml: directories)!
+
+ func getFiles(_ file: Any, path: Path) -> [Path] {
+ if let array = file as? [Any] {
+ return array.flatMap { getFiles($0, path: path) }
+ } else if let string = file as? String {
+ return [path + string]
+ } else if let dictionary = file as? [String: Any] {
+ var array: [Path] = []
+ for (key, value) in dictionary {
+ array += getFiles(value, path: path + key)
+ }
+ return array
+ } else {
+ return []
+ }
+ }
+
+ let files = getFiles(yaml, path: directoryPath).filter { $0.extension != nil }
+ for file in files {
+ try file.parent().mkpath()
+ try file.write("")
+ }
+ }
+
+ func removeDirectories() {
+ try? directoryPath.delete()
+ }
+
+ $0.before {
+ removeDirectories()
+ }
+
+ $0.after {
+ removeDirectories()
+ }
+
+ $0.it("generates source groups") {
+ let directories = """
+ Sources:
+ A:
+ - a.swift
+ - B:
+ - b.swift
+ """
+ try createDirectories(directories)
+
+ target.sources = ["Sources"]
+ spec.targets = [target]
+
+ let project = try getPbxProj(spec)
+ try project.expectFile(paths: ["Sources", "A", "a.swift"], buildPhase: .sources)
+ try project.expectFile(paths: ["Sources", "A", "B", "b.swift"], buildPhase: .sources)
+ }
+
+ $0.it("generates file sources") {
+ let directories = """
+ Sources:
+ A:
+ - a.swift
+ - B:
+ - b.swift
+ - c.jpg
+ """
+ try createDirectories(directories)
+
+ target.sources = [
+ "Sources/A/a.swift",
+ "Sources/A/B/b.swift",
+ "Sources/A/B/c.jpg",
+ ]
+ spec.targets = [target]
+
+ let project = try getPbxProj(spec)
+ try project.expectFile(paths: ["Sources/A", "a.swift"], names: ["A", "a.swift"], buildPhase: .sources)
+ try project.expectFile(paths: ["Sources/A/B", "b.swift"], names: ["B", "b.swift"], buildPhase: .sources)
+ try project.expectFile(paths: ["Sources/A/B", "c.jpg"], names: ["B", "c.jpg"], buildPhase: .resources)
+ }
+ }
+ }
+}
+
+extension PBXProj {
+
+ /// expect a file within groups of the paths, using optional different names
+ func expectFile(paths: [String], names: [String]? = nil, buildPhase: BuildPhase? = nil) throws {
+ let names = names ?? paths
+ guard let fileReference = getFileReference(paths: paths, names: names) else {
+ throw failure("Could not find file at path \(paths.joined(separator: "/").quoted) and name \(paths.joined(separator: "/").quoted)")
+ }
+
+ if let buildPhase = buildPhase {
+ guard let buildFile = buildFiles.first(where: { $0.fileRef == fileReference.reference}),
+ getBuildPhases(buildPhase).contains(where: { $0.files.contains(buildFile.reference)}) else {
+ throw failure("File \(paths.joined(separator: "/").quoted) is not in a \(buildPhase.rawValue.quoted) build phase")
+ }
+ }
+ }
+
+ func getFileReference(paths: [String], names: [String]) -> PBXFileReference? {
+ guard let project = projects.first else { return nil }
+ guard let mainGroup = groups.getReference(project.mainGroup) else { return nil }
+
+ return getFileReference(group: mainGroup, paths: paths, names: names)
+ }
+
+ private func getFileReference(group: PBXGroup, paths: [String], names: [String]) -> PBXFileReference? {
+
+ guard !paths.isEmpty else { return nil }
+ let path = paths.first!
+ let name = names.first!
+ let restOfPath = Array(paths.dropFirst())
+ let restOfName = Array(names.dropFirst())
+ if restOfPath.isEmpty {
+ let fileReferences = group.children.flatMap { self.fileReferences.getReference($0) }
+ return fileReferences.first { $0.path == path && $0.nameOrPath == name }
+ } else {
+ let groups = group.children.flatMap { self.groups.getReference($0) }
+ guard let group = groups.first(where: { $0.path == path && $0.nameOrPath == name }) else { return nil }
+ return getFileReference(group: group, paths: restOfPath, names: restOfName)
+ }
+ }
+
+ func getBuildPhases(_ buildPhase: BuildPhase) -> [PBXBuildPhase] {
+ switch buildPhase {
+ case .copyFiles: return copyFilesBuildPhases
+ case .sources: return sourcesBuildPhases
+ case .frameworks: return frameworksBuildPhases
+ case .resources: return resourcesBuildPhases
+ case .runScript: return shellScriptBuildPhases
+ case .headers: return headersBuildPhases
+ }
+ }
+}
+
+extension PBXFileReference {
+ var nameOrPath: String? {
+ return name ?? path
+ }
+}
+
+extension PBXGroup {
+ var nameOrPath: String? {
+ return name ?? path
}
}
diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift
index ae5ec8ad..d8393335 100644
--- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift
+++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift
@@ -24,5 +24,83 @@ func projectSpecTests() {
try expect(dynamicLibrary.type.isLibrary).to.beTrue()
}
}
+
+ func expectValidationError(_ spec: ProjectSpec, _ expectedError: SpecValidationError.ValidationError) throws {
+ do {
+ try spec.validate()
+ } catch let error as SpecValidationError {
+ if !error.errors.contains(where: { $0.description == expectedError.description }) {
+ throw failure("Supposed to fail with:\n\(expectedError)\nbut got:\n\(error.errors.map { $0.description }.joined(separator: "\n"))")
+ }
+ return
+ } catch {
+ throw failure("Supposed to fail with \"\(expectedError)\"")
+ }
+ throw failure("Supposed to fail with \"\(expectedError)\"")
+ }
+
+ $0.describe("Validation") {
+
+ let baseSpec = ProjectSpec(basePath: "", name: "", configs: [Config(name: "invalid")])
+ let invalidSettings = Settings(configSettings: ["invalidConfig": [:]],
+ groups: ["invalidSettingGroup"])
+ $0.it("fails with invalid project") {
+ var spec = baseSpec
+ spec.settings = invalidSettings
+ spec.configFiles = ["invalidConfig": "invalidConfigFile"]
+ spec.fileGroups = ["invalidFileGroup"]
+ spec.settingGroups = ["settingGroup1": Settings(configSettings: ["invalidSettingGroupConfig": [:]], groups: ["invalidSettingGroupSettingGroup"])]
+
+ try expectValidationError(spec, .invalidConfigFileConfig("invalidConfig"))
+ try expectValidationError(spec, .invalidBuildSettingConfig("invalidConfig"))
+ try expectValidationError(spec, .invalidConfigFile(configFile: "invalidConfigFile", config: "invalidConfig"))
+ try expectValidationError(spec, .invalidSettingsGroup("invalidSettingGroup"))
+ try expectValidationError(spec, .invalidFileGroup("invalidFileGroup"))
+ try expectValidationError(spec, .invalidSettingsGroup("invalidSettingGroupSettingGroup"))
+ try expectValidationError(spec, .invalidBuildSettingConfig("invalidSettingGroupConfig"))
+ }
+
+ $0.it("fails with invalid target") {
+ var spec = baseSpec
+ spec.targets = [Target(name: "target1",
+ type: .application,
+ platform: .iOS,
+ settings: invalidSettings,
+ configFiles: ["invalidConfig": "invalidConfigFile"],
+ sources: ["invalidSource"],
+ dependencies: [Dependency(type: .target, reference: "invalidDependency")],
+ prebuildScripts: [BuildScript(script: .path("invalidPrebuildScript"), name: "prebuildScript1")],
+ postbuildScripts: [BuildScript(script: .path("invalidPostbuildScript"))],
+ scheme: TargetScheme(testTargets: ["invalidTarget"])
+ )]
+
+ try expectValidationError(spec, .invalidTargetDependency(target: "target1", dependency: "invalidDependency"))
+ try expectValidationError(spec, .invalidTargetConfigFile(target: "target1", configFile: "invalidConfigFile", config: "invalidConfig"))
+ try expectValidationError(spec, .invalidTargetSchemeTest(target: "target1", testTarget: "invalidTarget"))
+ try expectValidationError(spec, .invalidTargetSource(target: "target1", source: "invalidSource"))
+ try expectValidationError(spec, .invalidBuildSettingConfig("invalidConfig"))
+ try expectValidationError(spec, .invalidSettingsGroup("invalidSettingGroup"))
+ try expectValidationError(spec, .invalidBuildScriptPath(target: "target1", name: "prebuildScript1", path: "invalidPrebuildScript"))
+ try expectValidationError(spec, .invalidBuildScriptPath(target: "target1", name: nil, path: "invalidPostbuildScript"))
+
+ try expectValidationError(spec, .missingConfigTypeForGeneratedTargetScheme(target: "target1", configType: .debug))
+ try expectValidationError(spec, .missingConfigTypeForGeneratedTargetScheme(target: "target1", configType: .release))
+
+ spec.targets[0].scheme?.configVariants = ["invalidVariant"]
+ try expectValidationError(spec, .invalidTargetSchemeConfigVariant(target: "target1", configVariant: "invalidVariant", configType: .debug))
+ }
+
+ $0.it("fails with invalid scheme") {
+ var spec = baseSpec
+ spec.schemes = [Scheme(name: "scheme1",
+ targets: [Scheme.BuildTarget(target: "invalidTarget")],
+ debugConfig: "debugInvalid",
+ releaseConfig: "releaseInvalid")]
+
+ try expectValidationError(spec, .invalidSchemeTarget(scheme: "scheme1", target: "invalidTarget"))
+ try expectValidationError(spec, .invalidSchemeConfig(scheme: "scheme1", config: "debugInvalid"))
+ try expectValidationError(spec, .invalidSchemeConfig(scheme: "scheme1", config: "releaseInvalid"))
+ }
+ }
}
}
diff --git a/Tests/XcodeGenKitTests/SpecLoadingTests.swift b/Tests/XcodeGenKitTests/SpecLoadingTests.swift
index 60279410..56c104ff 100644
--- a/Tests/XcodeGenKitTests/SpecLoadingTests.swift
+++ b/Tests/XcodeGenKitTests/SpecLoadingTests.swift
@@ -15,13 +15,13 @@ func specLoadingTests() {
return try ProjectSpec(basePath: "", jsonDictionary: specDictionary)
}
- func expectProjectSpecError(_ spec: [String: Any], _ expectedError: ProjectSpecError) throws {
+ func expectProjectSpecError(_ spec: [String: Any], _ expectedError: SpecParsingError) throws {
try expectError(expectedError) {
try getProjectSpec(spec)
}
}
- func expectTargetError(_ target: [String: Any], _ expectedError: ProjectSpecError) throws {
+ func expectTargetError(_ target: [String: Any], _ expectedError: SpecParsingError) throws {
try expectError(expectedError) {
_ = try Target(name: "test", jsonDictionary: target)
}
@@ -33,7 +33,7 @@ func specLoadingTests() {
describe("Spec Loader") {
$0.it("merges includes") {
let path = fixturePath + "include_test.yml"
- let spec = try SpecLoader.loadSpec(path: path)
+ let spec = try ProjectSpec(path: path)
try expect(spec.name) == "NewName"
try expect(spec.settingGroups) == [
@@ -48,7 +48,7 @@ func specLoadingTests() {
}
}
- describe("Project Spec") {
+ describe("Project Spec Parser") {
$0.it("fails with incorrect platform") {
var target = validTarget
@@ -68,6 +68,24 @@ func specLoadingTests() {
try expectTargetError(target, .invalidDependency([invalid: "name"]))
}
+ $0.it("parses sources") {
+ var targetDictionary1 = validTarget
+ targetDictionary1["sources"] = [
+ "source1",
+ ["path": "source2"],
+ ["path": "sourceWithFlags", "compilerFlags": ["-Werror"]],
+ ["path": "sourceWithFlagsStr", "compilerFlags": "-Werror -Wextra"]
+ ]
+ var targetDictionary2 = validTarget
+ targetDictionary2["sources"] = "source3"
+
+ let target1 = try Target(name: "test", jsonDictionary: targetDictionary1)
+ let target2 = try Target(name: "test", jsonDictionary: targetDictionary2)
+
+ try expect(target1.sources) == [Source(path: "source1"), Source(path: "source2"), Source(path: "sourceWithFlags", compilerFlags: ["-Werror"]), Source(path: "sourceWithFlagsStr", compilerFlags: ["-Werror", "-Wextra"])]
+ try expect(target2.sources) == [Source(path: "source3")]
+ }
+
$0.it("parses target dependencies") {
var targetDictionary = validTarget
targetDictionary["dependencies"] = [
@@ -128,7 +146,7 @@ func specLoadingTests() {
}
$0.it("parses settings") {
- let spec = try SpecLoader.loadSpec(path: fixturePath + "settings_test.yml")
+ let spec = try ProjectSpec(path: fixturePath + "settings_test.yml")
let buildSettings: BuildSettings = ["SETTING": "value"]
let configSettings: [String: Settings] = ["config1": Settings(buildSettings: ["SETTING1": "value"])]
let groups = ["preset1"]
diff --git a/Tests/XcodeGenKitTests/TestHelpers.swift b/Tests/XcodeGenKitTests/TestHelpers.swift
index 2a40c450..84eb5104 100644
--- a/Tests/XcodeGenKitTests/TestHelpers.swift
+++ b/Tests/XcodeGenKitTests/TestHelpers.swift
@@ -63,7 +63,7 @@ extension ArrayExpectation {
let value = try expression()
if let value = value {
if try !value.contains(where: predicate) {
- throw failure("value does not contain")
+ throw failure("value does not contain item: \(value)")
}
}
}
diff --git a/docs/ProjectSpec.md b/docs/ProjectSpec.md
index 05001f7a..338637f9 100644
--- a/docs/ProjectSpec.md
+++ b/docs/ProjectSpec.md
@@ -63,6 +63,7 @@ Note that target names can also be changed by adding a `name` property to a targ
### Options
- ⚪️ **carthageBuildPath**: `String` - The path to the carthage build directory. Defaults to `Carthage/Build`. This is used when specifying target carthage dependencies
+- ⚪️ **createIntermediateGroups**: `String` - 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 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.
- ⚪️ **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 replace with hyphens.
- ⚪️ **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`
- `all`: project and target settings
@@ -195,7 +196,14 @@ targets:
The 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`
### Sources
-Specifies the source directories for a target. This can either be a single path or a list of paths. Applicable source files, resources, headers, and lproj files will be parsed appropriately
+Specifies 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.
+
+A source can be provided via a string (the path) or an object of the form:
+
+**Source Object**:
+
+- 🔵 **path**: `String` - The path to the source file or directory.
+- ⚪️ **compilerFlags**: `[String]` or `String` - A list of compilerFlags to add to files under this specific path provided as a list or a space delimitted string. Defaults to empty.
```yaml
targets:
@@ -204,7 +212,12 @@ targets:
MyOtherTarget
sources:
- MyOtherTargetSource1
- - MyOtherTargetSource2
+ - path: MyOtherTargetSource2
+ compilerFlags:
+ - "-Werror"
+ - "-Wextra"
+ - path: MyOtherTargetSource3
+ compilerFlags: "-Werror -Wextra"
```
### Dependency
diff --git a/format-code.sh b/format-code.sh
deleted file mode 100755
index 791e0883..00000000
--- a/format-code.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-swiftformat Tests --stripunusedargs closure-only
-swiftformat sources --stripunusedargs closure-only