Stop linking dynamic frameworks to static libraries

This commit is contained in:
Brentley Jones 2018-07-19 18:39:42 -05:00
parent 2e53422f82
commit d6832479e4
2 changed files with 44 additions and 6 deletions

View File

@ -436,7 +436,7 @@ public class PBXProjGenerator {
dependencies.append(targetDependency.reference)
let dependecyLinkage = dependencyTarget.defaultLinkage
let shouldLink = dependecyLinkage == .dynamic
let shouldLink = (dependecyLinkage == .dynamic && target.type != .staticLibrary)
|| (dependecyLinkage == .static && target.type.isExecutable)
if dependency.link ?? shouldLink {
let dependencyBuildFile = targetBuildFiles[dependencyTargetName]!
@ -471,6 +471,8 @@ public class PBXProjGenerator {
}
case .framework:
guard target.type != .staticLibrary else { break }
let fileReference: String
if dependency.implicit {
fileReference = sourceGenerator.getFileReference(
@ -504,6 +506,8 @@ public class PBXProjGenerator {
}
case .carthage:
guard target.type != .staticLibrary else { break }
var platformPath = Path(getCarthageBuildPath(platform: target.platform))
var frameworkPath = platformPath + dependency.reference
if frameworkPath.extension == nil {

View File

@ -274,10 +274,15 @@ class ProjectGeneratorTests: XCTestCase {
// - framework: FrameworkA.framework
// - framework: FrameworkB.framework
// embed: false
// iOSFrameworkZ:
// dependencies: []
// StaticLibrary:
// dependencies: []
// dependencies:
// - target: iOSFrameworkZ
// - framework: FrameworkZ.framework
// - carthage: CarthageZ
// ResourceBundle
// dependencies: []
// dependencies: []
// iOSFrameworkA
// dependencies:
// - target: StaticLibrary
@ -309,6 +314,11 @@ class ProjectGeneratorTests: XCTestCase {
// # embed: true
// # - target: StaticLibrary
// # embed: false
// # - framework: FrameworkZ.framework
// # - target: iOSFrameworkZ
// # embed: true
// # - carthage: CarthageZ
// # embed: false
// # - carthage: CarthageA
// # embed: true
// # - framework: FrameworkC.framework
@ -346,13 +356,26 @@ class ProjectGeneratorTests: XCTestCase {
expectedEmbeddedFrameworks[app.name] = Set([
"FrameworkA.framework",
])
let iosFrameworkZ = Target(
name: "iOSFrameworkZ",
type: .framework,
platform: .iOS,
dependencies: []
)
expectedResourceFiles[iosFrameworkZ.name] = Set()
expectedLinkedFiles[iosFrameworkZ.name] = Set()
expectedEmbeddedFrameworks[iosFrameworkZ.name] = Set()
let staticLibrary = Target(
name: "StaticLibrary",
type: .staticLibrary,
platform: .iOS,
dependencies: [],
transitivelyLinkDependencies: false
dependencies: [
Dependency(type: .target, reference: iosFrameworkZ.name),
Dependency(type: .framework, reference: "FrameworkZ.framework"),
Dependency(type: .carthage, reference: "CarthageZ"),
]
)
expectedResourceFiles[staticLibrary.name] = Set()
expectedLinkedFiles[staticLibrary.name] = Set([])
@ -384,6 +407,9 @@ class ProjectGeneratorTests: XCTestCase {
expectedResourceFiles[iosFrameworkA.name] = Set()
expectedLinkedFiles[iosFrameworkA.name] = Set([
"FrameworkC.framework",
iosFrameworkZ.filename,
"FrameworkZ.framework",
"CarthageZ.framework",
"CarthageA.framework",
"CarthageB.framework",
])
@ -406,6 +432,9 @@ class ProjectGeneratorTests: XCTestCase {
expectedResourceFiles[iosFrameworkB.name] = Set()
expectedLinkedFiles[iosFrameworkB.name] = Set([
iosFrameworkA.filename,
iosFrameworkZ.filename,
"FrameworkZ.framework",
"CarthageZ.framework",
"FrameworkC.framework",
"FrameworkD.framework",
"FrameworkE.framework",
@ -433,6 +462,9 @@ class ProjectGeneratorTests: XCTestCase {
expectedLinkedFiles[appTest.name] = Set([
iosFrameworkA.filename,
staticLibrary.filename,
iosFrameworkZ.filename,
"FrameworkZ.framework",
"CarthageZ.framework",
"FrameworkC.framework",
iosFrameworkB.filename,
"FrameworkD.framework",
@ -441,6 +473,8 @@ class ProjectGeneratorTests: XCTestCase {
])
expectedEmbeddedFrameworks[appTest.name] = Set([
iosFrameworkA.filename,
iosFrameworkZ.filename,
"FrameworkZ.framework",
"FrameworkC.framework",
iosFrameworkB.filename,
"FrameworkD.framework",
@ -458,7 +492,7 @@ class ProjectGeneratorTests: XCTestCase {
iosFrameworkB.filename,
])
let targets = [app, staticLibrary, resourceBundle, iosFrameworkA, iosFrameworkB, appTest, appTestWithoutTransitive]
let targets = [app, iosFrameworkZ, staticLibrary, resourceBundle, iosFrameworkA, iosFrameworkB, appTest, appTestWithoutTransitive]
let project = Project(
basePath: "",