Skip to content

Commit

Permalink
Make directlyEmbedCarthageDependencies work for downstream depenede…
Browse files Browse the repository at this point in the history
…nies

If using `transitivelyLinkDependencies` this already worked. In the future `getAllDependenciesPlusTransitiveNeedingEmbedding` and `getAllCarthageDependencies` should really be the same mechanism.
  • Loading branch information
brentleyjones committed Jul 25, 2018
1 parent b18cd55 commit 0ec3b1d
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 25 deletions.
62 changes: 37 additions & 25 deletions Sources/XcodeGenKit/PBXProjGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -432,27 +432,28 @@ public class PBXProjGenerator {
var copyResourcesReferences: [String] = []
var copyWatchReferences: [String] = []
var extensions: [String] = []
var carthageFrameworksToEmbed: [String] = []

let targetDependencies = (target.transitivelyLinkDependencies ?? project.options.transitivelyLinkDependencies) ?
getAllDependenciesPlusTransitiveNeedingEmbedding(target: target) : target.dependencies

let directlyEmbedCarthage = target.directlyEmbedCarthageDependencies ?? (target.platform == .macOS || target.type.isTest)

func getEmbedSettings(dependency: Dependency, codeSign: Bool) -> [String: Any] {
var embedAttributes: [String] = []
if codeSign {
embedAttributes.append("CodeSignOnCopy")
}
if dependency.removeHeaders {
embedAttributes.append("RemoveHeadersOnCopy")
}
return ["ATTRIBUTES": embedAttributes]
}

for dependency in targetDependencies {

let embed = dependency.embed ?? target.shouldEmbedDependencies

func getEmbedSettings(codeSign: Bool) -> [String: Any] {
var embedAttributes: [String] = []
if codeSign {
embedAttributes.append("CodeSignOnCopy")
}
if dependency.removeHeaders {
embedAttributes.append("RemoveHeadersOnCopy")
}
return ["ATTRIBUTES": embedAttributes]
}

switch dependency.type {
case .target:
let dependencyTargetName = dependency.reference
Expand Down Expand Up @@ -487,7 +488,7 @@ public class PBXProjGenerator {
id: dependencyFileReference + target.name,
PBXBuildFile(
fileRef: dependencyFileReference,
settings: getEmbedSettings(codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable)
settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? !dependencyTarget.type.isExecutable)
)
)

Expand Down Expand Up @@ -533,7 +534,7 @@ public class PBXProjGenerator {
if embed {
let embedFile = createObject(
id: fileReference + target.name,
PBXBuildFile(fileRef: fileReference, settings: getEmbedSettings(codeSign: dependency.codeSign ?? true))
PBXBuildFile(fileRef: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
)
copyFrameworksReferences.append(embedFile.reference)
}
Expand All @@ -556,12 +557,32 @@ public class PBXProjGenerator {
carthageFrameworksByPlatform[target.platform.carthageDirectoryName, default: []].insert(fileReference)

targetFrameworkBuildFiles.append(buildFile.reference)
if directlyEmbedCarthage && embed {

// Embedding handled by iterating over `carthageDependencies` below
}
}

for dependency in carthageDependencies {
guard target.type != .staticLibrary else { break }

let embed = dependency.embed ?? target.shouldEmbedDependencies

var platformPath = Path(getCarthageBuildPath(platform: target.platform))
var frameworkPath = platformPath + dependency.reference
if frameworkPath.extension == nil {
frameworkPath = Path(frameworkPath.string + ".framework")
}
let fileReference = sourceGenerator.getFileReference(path: frameworkPath, inPath: platformPath)

if embed {
if directlyEmbedCarthage {
let embedFile = createObject(
id: fileReference + target.name,
PBXBuildFile(fileRef: fileReference, settings: getEmbedSettings(codeSign: dependency.codeSign ?? true))
PBXBuildFile(fileRef: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
)
copyFrameworksReferences.append(embedFile.reference)
} else {
carthageFrameworksToEmbed.append(dependency.reference)
}
}
}
Expand Down Expand Up @@ -654,16 +675,7 @@ public class PBXProjGenerator {

buildPhases.append(copyFilesPhase.reference)
}

let carthageFrameworksToEmbed: [String]
if directlyEmbedCarthage {
carthageFrameworksToEmbed = []
} else {
carthageFrameworksToEmbed = carthageDependencies
.filter { $0.embed ?? target.shouldEmbedDependencies }
.map { $0.reference }
}


if !carthageFrameworksToEmbed.isEmpty {

let inputPaths = carthageFrameworksToEmbed
Expand Down
26 changes: 26 additions & 0 deletions Tests/Fixtures/TestProject/Project.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
/* Begin PBXBuildFile section */
BF_130062884703 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_257516580010 /* Alamofire.framework */; };
BF_138356261076 /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_363921640403 /* InterfaceController.swift */; };
BF_144945303317 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BF_167705969896 /* TestProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_145531354566 /* TestProjectUITests.swift */; };
BF_182635022050 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_830053537293 /* Assets.xcassets */; };
BF_184447863946 = {isa = PBXBuildFile; fileRef = FR_935153865209 /* iMessageApp.app */; };
Expand All @@ -50,6 +51,7 @@
BF_337656089700 = {isa = PBXBuildFile; fileRef = FR_399755008402 /* StaticLibrary_ObjC.a */; };
BF_360196406184 /* TestProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_722239415598 /* TestProjectTests.swift */; };
BF_425679397292 /* MyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = FR_183521624014 /* MyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
BF_438950173632 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FR_410645050443 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BF_441538117869 /* App_watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FR_507023492251 /* App_watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
BF_447782698339 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_752394658615 /* Alamofire.framework */; };
BF_456457948943 /* FrameworkFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR_172952167809 /* FrameworkFile.swift */; };
Expand Down Expand Up @@ -204,6 +206,28 @@
name = "Embed Watch Content";
runOnlyForDeploymentPostprocessing = 0;
};
CFBP_4082141876 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
BF_438950173632 /* Alamofire.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
CFBP_4626438721 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
BF_144945303317 /* Alamofire.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
CFBP_4684049960 /* Embed App Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
Expand Down Expand Up @@ -671,6 +695,7 @@
buildConfigurationList = CL_123503999387 /* Build configuration list for PBXNativeTarget "App_iOS_UITests" */;
buildPhases = (
SBP_12350399938 /* Sources */,
CFBP_4082141876 /* Embed Frameworks */,
);
buildRules = (
);
Expand Down Expand Up @@ -831,6 +856,7 @@
buildConfigurationList = CL_783122899910 /* Build configuration list for PBXNativeTarget "App_iOS_Tests" */;
buildPhases = (
SBP_78312289991 /* Sources */,
CFBP_4626438721 /* Embed Frameworks */,
);
buildRules = (
);
Expand Down

0 comments on commit 0ec3b1d

Please sign in to comment.