Merge pull request #93 from keith/ks/link-dependencies

Fix dependency framework/library linking
This commit is contained in:
Yonas Kolb
2017-10-19 00:14:02 +02:00
committed by GitHub
6 changed files with 47 additions and 7 deletions
@@ -19,6 +19,7 @@
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 */
@@ -80,6 +81,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
BF7015992001 /* MyFramework.framework in Frameworks */,
BF6182896901 /* Result.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
+5 -1
View File
@@ -47,7 +47,11 @@ extension PBXProductType {
}
public var isFramework: Bool {
return fileExtension == "framework"
return self == .framework
}
public var isLibrary: Bool {
return self == .staticLibrary || self == .dynamicLibrary
}
public var isExtension: Bool {
+10 -6
View File
@@ -25,7 +25,7 @@ public class PBXProjGenerator {
var variantGroupsByPath: [Path: PBXVariantGroup] = [:]
var targetNativeReferences: [String: String] = [:]
var targetBuildFileReferences: [String: String] = [:]
var targetBuildFiles: [String: PBXBuildFile] = [:]
var targetFileReferences: [String: String] = [:]
var topLevelGroups: [PBXGroup] = []
var carthageFrameworksByPlatform: [String: [String]] = [:]
@@ -93,7 +93,7 @@ public class PBXProjGenerator {
let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, fileReference.reference), fileRef: fileReference.reference)
addObject(buildFile)
targetBuildFileReferences[target.name] = buildFile.reference
targetBuildFiles[target.name] = buildFile
}
let targets = try spec.targets.map(generateTarget)
@@ -250,11 +250,15 @@ public class PBXProjGenerator {
addObject(targetDependency)
dependencies.append(targetDependency.reference)
// don't bother linking a target dependency
// let dependencyBuildFile = targetBuildFileReferences[dependencyTargetName]!
// targetFrameworkBuildFiles.append(dependencyBuildFile)
if dependencyTarget.type.isLibrary || dependencyTarget.type.isFramework {
let dependencyBuildFile = targetBuildFiles[dependencyTargetName]!
let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, dependencyBuildFile.reference + target.name), fileRef: dependencyBuildFile.fileRef)
addObject(buildFile)
targetFrameworkBuildFiles.append(buildFile.reference)
}
if embed && !dependencyTarget.type.isLibrary {
if embed {
let embedSettings = dependency.buildSettings
let embedFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, dependencyFileReference + target.name), fileRef: dependencyFileReference, settings: embedSettings)
addObject(embedFile)
+1
View File
@@ -5,4 +5,5 @@ XCTMain([
testCase(GeneratorTests.allTests),
testCase(SpecLoadingTests.allTests),
testCase(FixtureTests.allTests),
testCase(ProjectSpecTests.allTests),
])
@@ -0,0 +1,28 @@
import Spectre
import XcodeGenKit
import xcproj
import ProjectSpec
func projectSpecTests() {
describe("ProjectSpec") {
let framework = Target(name: "MyFramework", type: .framework, platform: .iOS,
settings: Settings(buildSettings: ["SETTING_2": "VALUE"]))
let staticLibrary = Target(name: "MyStaticLibrary", type: .staticLibrary, platform: .iOS,
settings: Settings(buildSettings: ["SETTING_2": "VALUE"]))
let dynamicLibrary = Target(name: "MyDynamicLibrary", type: .dynamicLibrary, platform: .iOS,
settings: Settings(buildSettings: ["SETTING_2": "VALUE"]))
$0.describe("Types") {
$0.it("is a framework when it has the right extension") {
try expect(framework.type.isFramework).to.beTrue()
}
$0.it("is a library when it has the right type") {
try expect(staticLibrary.type.isLibrary).to.beTrue()
try expect(dynamicLibrary.type.isLibrary).to.beTrue()
}
}
}
}
+1
View File
@@ -7,5 +7,6 @@ class XCodeGenKitTests: XCTestCase {
projectGeneratorTests()
specLoadingTests()
fixtureTests()
projectSpecTests()
}
}