diff --git a/CHANGELOG.md b/CHANGELOG.md index 7438a789..5f1aded7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Fixed `--project` argument not taking effect [#487](https://github.com/yonaskolb/XcodeGen/pull/487) @monowerker - Fixed Sticker Packs from generating an empty Source file phase which caused in error in the new build system [#492](https://github.com/yonaskolb/XcodeGen/pull/492) @rpassis - Fixed generated schemes for tool targets not setting the executable [#496](https://github.com/yonaskolb/XcodeGen/pull/496) @yonaskolb +- Fixed resolving Carthage dependencies for iOS app with watchOS target. [465](https://github.com/yonaskolb/XcodeGen/pull/465) @raptorxcz ## 2.1.0 diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 1fff14e7..97433993 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -967,7 +967,13 @@ public class PBXProjGenerator { frameworks[dependency.reference] = dependency case .target: if let projectTarget = project.getProjectTarget(dependency.reference) { - queue.append(projectTarget) + if let dependencyTarget = projectTarget as? Target { + if topLevelTarget.platform == dependencyTarget.platform { + queue.append(projectTarget) + } + } else { + queue.append(projectTarget) + } } default: break diff --git a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift index debccc17..a3092f27 100644 --- a/Tests/XcodeGenKitTests/SourceGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SourceGeneratorTests.swift @@ -517,6 +517,23 @@ class SourceGeneratorTests: XCTestCase { try expect(sourcesBuildPhase.files.count) == 1 } + $0.it("add only carthage dependencies with same platform") { + let directories = """ + A: + - file.swift + """ + try createDirectories(directories) + + let watchTarget = Target(name: "Watch", type: .watch2App, platform: .watchOS, sources: ["A"], dependencies: [Dependency(type: .carthage, reference: "Alamofire_watch")]) + let watchDependency = Dependency(type: .target, reference: "Watch") + let target = Target(name: "Test", type: .application, platform: .iOS, sources: ["A"], dependencies: [Dependency(type: .carthage, reference: "Alamofire"), watchDependency]) + let project = Project(basePath: directoryPath, name: "Test", targets: [target, watchTarget]) + + let pbxProj = try project.generatePbxProj() + let carthagePhase = pbxProj.nativeTargets.first(where: { $0.name == "Test" })?.buildPhases.first(where: { $0 is PBXShellScriptBuildPhase }) as? PBXShellScriptBuildPhase + try expect(carthagePhase?.inputPaths) == ["$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework"] + } + $0.it("derived directories are sorted last") { let directories = """ A: