mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
* Added support for dependency destination specification. (Resolves #1038) * More generic way covering more different dependency types. (#1038) * Added unit-test for each possible dependency combination. First test current embeding then the new one with custom copy spec. (#1038) * Review fixes. (#1038) * Minimized unit-test boiler-plate (#1038) * Update CHANGELOG.md Co-authored-by: Jakub Bednář <jakub.bednar@avast.com> Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
This commit is contained in:
co-authored by
Jakub Bednář
Yonas Kolb
parent
e2f062b6be
commit
d35d22f08b
@@ -662,6 +662,7 @@ public class PBXProjGenerator {
|
||||
var dependencies: [PBXTargetDependency] = []
|
||||
var targetFrameworkBuildFiles: [PBXBuildFile] = []
|
||||
var frameworkBuildPaths = Set<String>()
|
||||
var customCopyDependenciesReferences: [PBXBuildFile] = []
|
||||
var copyFilesBuildPhasesFiles: [BuildPhaseSpec.CopyFilesSettings: [PBXBuildFile]] = [:]
|
||||
var copyFrameworksReferences: [PBXBuildFile] = []
|
||||
var copyResourcesReferences: [PBXBuildFile] = []
|
||||
@@ -689,7 +690,11 @@ public class PBXProjGenerator {
|
||||
if dependency.removeHeaders {
|
||||
embedAttributes.append("RemoveHeadersOnCopy")
|
||||
}
|
||||
return ["ATTRIBUTES": embedAttributes]
|
||||
var retval: [String:Any] = ["ATTRIBUTES": embedAttributes]
|
||||
if let copyPhase = dependency.copyPhase {
|
||||
retval["COPY_PHASE"] = copyPhase
|
||||
}
|
||||
return retval
|
||||
}
|
||||
|
||||
func getDependencyFrameworkSettings(dependency: Dependency) -> [String: Any]? {
|
||||
@@ -727,7 +732,10 @@ public class PBXProjGenerator {
|
||||
pbxBuildFile.platformFilter = platform
|
||||
let embedFile = addObject(pbxBuildFile)
|
||||
|
||||
if dependencyTarget.type.isExtension {
|
||||
if dependency.copyPhase != nil {
|
||||
// custom copy takes precedence
|
||||
customCopyDependenciesReferences.append(embedFile)
|
||||
} else if dependencyTarget.type.isExtension {
|
||||
// embed app extension
|
||||
extensions.append(embedFile)
|
||||
} else if dependencyTarget.type.isSystemExtension {
|
||||
@@ -807,7 +815,12 @@ public class PBXProjGenerator {
|
||||
let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
|
||||
pbxBuildFile.platformFilter = platform
|
||||
let embedFile = addObject(pbxBuildFile)
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
|
||||
if dependency.copyPhase != nil {
|
||||
customCopyDependenciesReferences.append(embedFile)
|
||||
} else {
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
}
|
||||
}
|
||||
case .sdk(let root):
|
||||
|
||||
@@ -858,7 +871,12 @@ public class PBXProjGenerator {
|
||||
let pbxBuildFile = PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
|
||||
pbxBuildFile.platformFilter = platform
|
||||
let embedFile = addObject(pbxBuildFile)
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
|
||||
if dependency.copyPhase != nil {
|
||||
customCopyDependenciesReferences.append(embedFile)
|
||||
} else {
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
}
|
||||
}
|
||||
|
||||
case .carthage(let findFrameworks, let linkType):
|
||||
@@ -923,7 +941,12 @@ public class PBXProjGenerator {
|
||||
settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
|
||||
pbxBuildFile.platformFilter = platform
|
||||
let embedFile = addObject(pbxBuildFile)
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
|
||||
if dependency.copyPhase != nil {
|
||||
customCopyDependenciesReferences.append(embedFile)
|
||||
} else {
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
}
|
||||
}
|
||||
case .bundle:
|
||||
// Static and dynamic libraries can't copy resources
|
||||
@@ -969,7 +992,11 @@ public class PBXProjGenerator {
|
||||
let embedFile = addObject(
|
||||
PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true))
|
||||
)
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
if dependency.copyPhase != nil {
|
||||
customCopyDependenciesReferences.append(embedFile)
|
||||
} else {
|
||||
copyFrameworksReferences.append(embedFile)
|
||||
}
|
||||
} else {
|
||||
carthageFrameworksToEmbed.append(dependency.reference)
|
||||
}
|
||||
@@ -1016,6 +1043,19 @@ public class PBXProjGenerator {
|
||||
)
|
||||
}
|
||||
|
||||
func splitCopyDepsByDestination(_ references: [PBXBuildFile]) -> [BuildPhaseSpec.CopyFilesSettings : [PBXBuildFile]] {
|
||||
|
||||
var retval = [BuildPhaseSpec.CopyFilesSettings : [PBXBuildFile]]()
|
||||
for reference in references {
|
||||
|
||||
guard let key = reference.settings?["COPY_PHASE"] as? BuildPhaseSpec.CopyFilesSettings else { continue }
|
||||
var filesWithSameDestination = retval[key] ?? [PBXBuildFile]()
|
||||
filesWithSameDestination.append(reference)
|
||||
retval[key] = filesWithSameDestination
|
||||
}
|
||||
return retval
|
||||
}
|
||||
|
||||
copyFilesBuildPhasesFiles.merge(getBuildFilesForCopyFilesPhases()) { $0 + $1 }
|
||||
|
||||
buildPhases += try target.preBuildScripts.map { try generateBuildScript(targetName: target.name, buildScript: $0) }
|
||||
@@ -1154,6 +1194,21 @@ public class PBXProjGenerator {
|
||||
buildPhases.append(copyFilesPhase)
|
||||
}
|
||||
|
||||
if !customCopyDependenciesReferences.isEmpty {
|
||||
|
||||
let splitted = splitCopyDepsByDestination(customCopyDependenciesReferences)
|
||||
for (phase, references) in splitted {
|
||||
|
||||
guard let destination = phase.destination.destination else { continue }
|
||||
|
||||
let copyFilesPhase = addObject(
|
||||
getPBXCopyFilesBuildPhase(dstSubfolderSpec: destination, dstPath:phase.subpath, name: "Embed Dependencies", files: references)
|
||||
)
|
||||
|
||||
buildPhases.append(copyFilesPhase)
|
||||
}
|
||||
}
|
||||
|
||||
if !copyWatchReferences.isEmpty {
|
||||
|
||||
let copyFilesPhase = addObject(
|
||||
|
||||
Reference in New Issue
Block a user