Introduce ProjectName/Target syntax to reference target

This commit is contained in:
Yuta Saito
2019-09-23 00:23:11 +09:00
parent e4844e927c
commit 30fc642b04
6 changed files with 138 additions and 56 deletions
+16 -12
View File
@@ -77,32 +77,36 @@ public class SchemeGenerator {
func getBuildEntry(_ buildTarget: Scheme.BuildTarget) throws -> XCScheme.BuildAction.Entry {
let pbxProj: PBXProj
let projectFilename: String
if let externalProject = buildTarget.externalProject {
pbxProj = try XcodeProj(pathString: externalProject).pbxproj
projectFilename = externalProject
} else {
let projectFilePath: String
switch buildTarget.target.location {
case .project(let project):
guard let externalProject = self.project.getExternalProject(project) else {
fatalError("Unable to find external project named \"\(project)\" in project.yml")
}
pbxProj = try XcodeProj(pathString: externalProject.path).pbxproj
projectFilePath = externalProject.path
case .local:
pbxProj = self.pbxProj
projectFilename = "\(self.project.name).xcodeproj"
projectFilePath = "\(self.project.name).xcodeproj"
}
guard let pbxTarget = pbxProj.targets(named: buildTarget.target).first else {
guard let pbxTarget = pbxProj.targets(named: buildTarget.target.name).first else {
fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"")
}
let buildableName = pbxTarget.productNameWithExtension() ?? pbxTarget.name
let buildableReference = XCScheme.BuildableReference(
referencedContainer: "container:\(projectFilename)",
referencedContainer: "container:\(projectFilePath)",
blueprint: pbxTarget,
buildableName: buildableName,
blueprintName: buildTarget.target
blueprintName: buildTarget.target.name
)
return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes)
}
let testTargets = scheme.test?.targets ?? []
let testBuildTargets = testTargets.map {
Scheme.BuildTarget(target: $0.name, externalProject: $0.externalProject, buildTypes: BuildType.testOnly)
Scheme.BuildTarget(target: TargetReference(name: $0.name, location: .local), buildTypes: BuildType.testOnly)
}
let testBuildTargetEntries = try testBuildTargets.map(getBuildEntry)
@@ -119,7 +123,7 @@ public class SchemeGenerator {
return XCScheme.ExecutionAction(scriptText: action.script, title: action.name, environmentBuildable: environmentBuildable)
}
let target = project.getTarget(scheme.build.targets.first!.target)
let target = project.getTarget(scheme.build.targets.first!.target.name)
let shouldExecuteOnLaunch = target?.type.isExecutable == true
let buildableReference = buildActionEntries.first!.buildableReference
@@ -217,7 +221,7 @@ extension Scheme {
public init(name: String, target: Target, targetScheme: TargetScheme, debugConfig: String, releaseConfig: String) {
self.init(
name: name,
build: .init(targets: [Scheme.BuildTarget(target: target.name)]),
build: .init(targets: [Scheme.BuildTarget(target: TargetReference(name: target.name, location: .local))]),
run: .init(
config: debugConfig,
commandLineArguments: targetScheme.commandLineArguments,