From d966e9d6103fa27043994f83c50924bd9c34ab4a Mon Sep 17 00:00:00 2001 From: yonaskolb Date: Fri, 7 Feb 2020 09:36:53 +1100 Subject: [PATCH] fix legacy targets dependencies --- CHANGELOG.md | 1 + Sources/XcodeGenKit/PBXProjGenerator.swift | 7 +++---- Tests/XcodeGenKitTests/ProjectGeneratorTests.swift | 9 +++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a0094f0f..d7edd9498 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ #### Fixed - Validate scheme test action and test coverage target references before generating. [#775](https://github.com/yonaskolb/XcodeGen/pull/775) @liamnichols +- Fixed using legacy targets as dependencies [#778](https://github.com/yonaskolb/XcodeGen/pull/778) @yonaskolb #### Internal - Updated to XcodeProj 7.8.0 [#777](https://github.com/yonaskolb/XcodeGen/pull/777) @yonaskolb diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index b7d25cac9..c8bfcd91a 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -622,14 +622,13 @@ public class PBXProjGenerator { return !linkingAttributes.isEmpty ? ["ATTRIBUTES": linkingAttributes] : nil } - func processTargetDependency(_ dependency: Dependency, dependencyTarget: Target, embedFileReference: PBXFileElement) { + func processTargetDependency(_ dependency: Dependency, dependencyTarget: Target, embedFileReference: PBXFileElement?) { let dependencyLinkage = dependencyTarget.type.defaultLinkage let link = dependency.link ?? ((dependencyLinkage == .dynamic && target.type != .staticLibrary) || (dependencyLinkage == .static && target.type.isExecutable)) - if link { - let dependencyFile = embedFileReference + if link, let dependencyFile = embedFileReference { let buildFile = addObject( PBXBuildFile(file: dependencyFile, settings: getDependencyFrameworkSettings(dependency: dependency)) ) @@ -682,7 +681,7 @@ public class PBXProjGenerator { let targetDependency = generateTargetDependency(from: target.name, to: dependencyTargetName) dependencies.append(targetDependency) guard let dependencyTarget = project.getTarget(dependencyTargetName) else { continue } - processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: targetFileReferences[dependencyTarget.name]!) + processTargetDependency(dependency, dependencyTarget: dependencyTarget, embedFileReference: targetFileReferences[dependencyTarget.name]) case .project(let dependencyProjectName): let dependencyTargetName = dependencyTargetReference.name let (targetDependency, dependencyTarget, dependencyProductProxy) = try generateExternalTargetDependency(from: target.name, to: dependencyTargetName, in: dependencyProjectName, platform: target.platform) diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index fe271427c..2d5c34b07 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -262,6 +262,15 @@ class ProjectGeneratorTests: XCTestCase { try expect(nativeTargets.contains { $0.name == optionalFramework.name }).beTrue() } + $0.it("generates legacy target") { + let target = Target(name: "target", type: .application, platform: .iOS, dependencies: [.init(type: .target, reference: "legacy")]) + let legacyTarget = Target(name: "legacy", type: .none, platform: .iOS, legacy: .init(toolPath: "path")) + let project = Project(name: "test", targets: [target, legacyTarget]) + + let pbxProject = try project.generatePbxProj() + try expect(pbxProject.legacyTargets.count) == 1 + } + $0.it("generates target attributes") { var appTargetWithAttributes = app appTargetWithAttributes.settings.buildSettings["DEVELOPMENT_TEAM"] = "123"