diff --git a/Sources/ProjectSpec/Scheme.swift b/Sources/ProjectSpec/Scheme.swift
index da9cb256..921fc57b 100644
--- a/Sources/ProjectSpec/Scheme.swift
+++ b/Sources/ProjectSpec/Scheme.swift
@@ -111,7 +111,7 @@ public struct Scheme: Equatable {
public var config: String?
public var gatherCoverageData: Bool
- public var coverageTargets: [CoverageTarget]
+ public var coverageTargets: [TargetReference]
public var disableMainThreadChecker: Bool
public var commandLineArguments: [String: Bool]
public var targets: [TestTarget]
@@ -122,24 +122,6 @@ public struct Scheme: Equatable {
public var region: String?
public var debugEnabled: Bool
- public struct CoverageTarget: Equatable, ExpressibleByStringLiteral {
- public let name: String
- public var externalProject: String?
-
- public init(
- name: String,
- externalProject: String? = nil
- ) {
- self.name = name
- self.externalProject = externalProject
- }
-
- public init(stringLiteral value: String) {
- name = value
- externalProject = nil
- }
- }
-
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
public static let randomExecutionOrderDefault = false
public static let parallelizableDefault = false
@@ -177,7 +159,7 @@ public struct Scheme: Equatable {
public init(
config: String,
gatherCoverageData: Bool = gatherCoverageDataDefault,
- coverageTargets: [CoverageTarget] = [],
+ coverageTargets: [TargetReference] = [],
disableMainThreadChecker: Bool = disableMainThreadCheckerDefault,
randomExecutionOrder: Bool = false,
parallelizable: Bool = false,
@@ -385,7 +367,7 @@ extension Scheme.Test: JSONObjectConvertible {
public init(jsonDictionary: JSONDictionary) throws {
config = jsonDictionary.json(atKeyPath: "config")
gatherCoverageData = jsonDictionary.json(atKeyPath: "gatherCoverageData") ?? Scheme.Test.gatherCoverageDataDefault
- coverageTargets = jsonDictionary.json(atKeyPath: "coverageTargets") ?? []
+ coverageTargets = try (jsonDictionary.json(atKeyPath: "coverageTargets") ?? []).map { try TargetReference(string: $0) }
disableMainThreadChecker = jsonDictionary.json(atKeyPath: "disableMainThreadChecker") ?? Scheme.Test.disableMainThreadCheckerDefault
commandLineArguments = jsonDictionary.json(atKeyPath: "commandLineArguments") ?? [:]
if let targets = jsonDictionary["targets"] as? [Any] {
@@ -421,7 +403,7 @@ extension Scheme.Test: JSONEncodable {
"config": config,
"language": language,
"region": region,
- "coverageTargets": coverageTargets.map { $0.toJSONValue() },
+ "coverageTargets": coverageTargets.map { $0.toString() },
]
if gatherCoverageData != Scheme.Test.gatherCoverageDataDefault {
@@ -440,24 +422,6 @@ extension Scheme.Test: JSONEncodable {
}
}
-extension Scheme.Test.CoverageTarget: JSONObjectConvertible {
-
- public init(jsonDictionary: JSONDictionary) throws {
- name = try jsonDictionary.json(atKeyPath: "name")
- externalProject = jsonDictionary.json(atKeyPath: "externalProject")
- }
-}
-
-extension Scheme.Test.CoverageTarget: JSONEncodable {
- public func toJSONValue() -> Any {
- guard let externalProject = externalProject else { return name }
- return [
- "name": name,
- "externalProject": externalProject
- ]
- }
-}
-
extension Scheme.Test.TestTarget: JSONObjectConvertible {
public init(jsonDictionary: JSONDictionary) throws {
diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift
index 3c4b3628..8947d1a8 100644
--- a/Sources/XcodeGenKit/SchemeGenerator.swift
+++ b/Sources/XcodeGenKit/SchemeGenerator.swift
@@ -75,17 +75,10 @@ public class SchemeGenerator {
public func generateScheme(_ scheme: Scheme) throws -> XCScheme {
- func getBuildableReference(_ target: String, externalProject: String?) throws -> XCScheme.BuildableReference {
+ func getBuildableReference(_ target: TargetReference) throws -> XCScheme.BuildableReference {
let pbxProj: PBXProj
-<<<<<<< HEAD
- let projectFilename: String
- if let externalProject = externalProject {
- pbxProj = try XcodeProj(pathString: externalProject).pbxproj
- projectFilename = externalProject
- } else {
-=======
let projectFilePath: String
- switch buildTarget.target.location {
+ switch 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")
@@ -93,41 +86,25 @@ public class SchemeGenerator {
pbxProj = try XcodeProj(pathString: externalProject.path).pbxproj
projectFilePath = externalProject.path
case .local:
->>>>>>> external-target-ref
pbxProj = self.pbxProj
projectFilePath = "\(self.project.name).xcodeproj"
}
-<<<<<<< HEAD
- guard let pbxTarget = pbxProj.targets(named: target).first else {
- fatalError("Unable to find target named \"\(target)\" in \"PBXProj.targets\"")
+ guard let pbxTarget = pbxProj.targets(named: target.name).first else {
+ fatalError("Unable to find target named \"\(target.name)\" in \"PBXProj.targets\"")
}
let buildableName = pbxTarget.productNameWithExtension() ?? pbxTarget.name
return XCScheme.BuildableReference(
- referencedContainer: "container:\(projectFilename)",
+ referencedContainer: "container:\(projectFilePath)",
blueprint: pbxTarget,
buildableName: buildableName,
- blueprintName: target
+ blueprintName: target.name
)
}
func getBuildEntry(_ buildTarget: Scheme.BuildTarget) throws -> XCScheme.BuildAction.Entry {
- let buildableReference = try getBuildableReference(
- buildTarget.target, externalProject: buildTarget.externalProject
-=======
- 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:\(projectFilePath)",
- blueprint: pbxTarget,
- buildableName: buildableName,
- blueprintName: buildTarget.target.name
->>>>>>> external-target-ref
- )
+ let buildableReference = try getBuildableReference(buildTarget.target)
return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes)
}
@@ -175,7 +152,7 @@ public class SchemeGenerator {
}
let coverageBuildableTargets = try scheme.test?.coverageTargets.map {
- try getBuildableReference($0.name, externalProject: $0.externalProject)
+ try getBuildableReference($0)
} ?? []
let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) }
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
index 3ce0ffdb..b769ac52 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/App_Scheme.xcscheme
@@ -26,31 +26,8 @@
buildConfiguration = "Production Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- codeCoverageEnabled = "YES"
shouldUseLaunchSchemeArgsEnv = "YES">
-
-
-
-
-
-
-
-
-
-
diff --git a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
index ecc9364b..0390c9c5 100644
--- a/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
+++ b/Tests/Fixtures/TestProject/Project.xcodeproj/xcshareddata/xcschemes/Framework.xcscheme
@@ -44,9 +44,6 @@
buildConfiguration = "Production Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- language = "ja"
- region = "en"
- codeCoverageEnabled = "YES"
shouldUseLaunchSchemeArgsEnv = "YES">
@@ -59,8 +56,6 @@
ReferencedContainer = "container:Project.xcodeproj">
-
-
diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
index 927e83a9..ed3c5b6d 100644
--- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
+++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift
@@ -267,26 +267,26 @@ class SchemeGeneratorTests: XCTestCase {
try! writer.writePlists()
}
let externalProject = fixturePath + "scheme_test/TestProject.xcodeproj"
- let externalTarget = Scheme.BuildTarget(target: "ExternalTarget", externalProject: externalProject.string)
- let scheme = Scheme(
+ let externalTarget = Scheme.BuildTarget(target: .init(name: "ExternalTarget", location: .project("TestProject")))
+ let scheme = try Scheme(
name: "CodeCoverageScheme",
build: Scheme.Build(targets: [externalTarget]),
test: Scheme.Test(
config: "Debug",
gatherCoverageData: true,
coverageTargets: [
- Scheme.Test.CoverageTarget(
- name: externalTarget.target,
- externalProject: externalTarget.externalProject
- ),
- Scheme.Test.CoverageTarget(name: framework.name)
+ TargetReference(string: "TestProject/ExternalTarget"),
+ TargetReference(string: framework.name),
]
)
)
let project = Project(
name: "test",
targets: [framework],
- schemes: [scheme]
+ schemes: [scheme],
+ externalProjects: [
+ ExternalProject(name: "TestProject", path: externalProject.string),
+ ]
)
let xcodeProject = try project.generateXcodeProject()
guard let xcscheme = xcodeProject.sharedData?.schemes.first else {