diff --git a/CHANGELOG.md b/CHANGELOG.md index f6b649f9..e5538c21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ #### Fixed - Fixed `optional` file sources not being added to the project [#557](https://github.com/yonaskolb/XcodeGen/pull/557) @yonaskolb - Fixed order of file generation. Plists are now generated before the project is generated so that the project includes the generated plists [#544](https://github.com/yonaskolb/XcodeGen/issues/544) @tomquist +- Addressed an issue that causes Carthage depencencies incorrectly embedded in WatchKit app bundle instead of WatchKit app extension [#558](https://github.com/yonaskolb/XcodeGen/pull/558) @KhaosT ## 2.4.0 diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 71b3c30d..39ca69b0 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -420,7 +420,9 @@ public class PBXProjGenerator { let targetDependencies = (target.transitivelyLinkDependencies ?? project.options.transitivelyLinkDependencies) ? getAllDependenciesPlusTransitiveNeedingEmbedding(target: target) : target.dependencies - let directlyEmbedCarthage = target.directlyEmbedCarthageDependencies ?? !(target.platform.requiresSimulatorStripping && target.type.isApp) + let targetSupportsDirectEmbed = !(target.platform.requiresSimulatorStripping && + (target.type.isApp || target.type == .watch2Extension)) + let directlyEmbedCarthage = target.directlyEmbedCarthageDependencies ?? targetSupportsDirectEmbed func getEmbedSettings(dependency: Dependency, codeSign: Bool) -> [String: Any] { var embedAttributes: [String] = [] @@ -612,7 +614,7 @@ public class PBXProjGenerator { for dependency in carthageDependencies { guard target.type != .staticLibrary else { break } - let embed = dependency.embed ?? target.shouldEmbedDependencies + let embed = dependency.embed ?? target.shouldEmbedCarthageDependencies var platformPath = Path(carthageResolver.buildPath(for: target.platform)) var frameworkPath = platformPath + dependency.reference @@ -1004,6 +1006,12 @@ extension Target { var shouldEmbedDependencies: Bool { return type.isApp || type.isTest } + + var shouldEmbedCarthageDependencies: Bool { + return (type.isApp && platform != .watchOS) + || type == .watch2Extension + || type.isTest + } } extension Platform { diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj index 79d548c6..bf38f623 100644 --- a/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj +++ b/Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj @@ -1171,7 +1171,6 @@ buildPhases = ( 91C895DE8170C96A75D29426BA2BC597 /* Sources */, B7B71FA7D279029BF7A7FC7C08E41BB0 /* Resources */, - 261B4BE58AA60B68A81874E3318793F3 /* Carthage */, C765431E5FF4B02F59DE79B068D2CB68 /* Embed App Extensions */, ); buildRules = ( @@ -1190,6 +1189,7 @@ buildPhases = ( AE7971E1CA54D23C264E6541EA9BAE1B /* Sources */, 4A6E8F3A477AA5F67A8EB733DFAD8387 /* Resources */, + 8F8EE32AFABD8FEF976253259FA39ABC /* Carthage */, ); buildRules = ( ); @@ -1629,22 +1629,6 @@ shellPath = /bin/sh; shellScript = "ditto \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n"; }; - 261B4BE58AA60B68A81874E3318793F3 /* Carthage */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/Carthage/Build/watchOS/Result.framework", - ); - name = Carthage; - outputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "carthage copy-frameworks\n"; - }; 37182EC208DBF03DB1BAF452E1D2C836 /* Carthage */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1733,6 +1717,22 @@ shellPath = /bin/sh; shellScript = "echo \"You ran a script\"\n"; }; + 8F8EE32AFABD8FEF976253259FA39ABC /* Carthage */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Carthage/Build/watchOS/Result.framework", + ); + name = Carthage; + outputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "carthage copy-frameworks\n"; + }; BA454AAC926EDFCDA9226CBCACCBEDB1 /* MyScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647;