From 0595f07611438d35b3da1a415b46620462b45ed5 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Mon, 23 Sep 2019 00:55:42 +0900 Subject: [PATCH] Resolve conflicts --- Sources/ProjectSpec/Scheme.swift | 44 ++----------------- Sources/XcodeGenKit/SchemeGenerator.swift | 39 ++++------------ .../xcschemes/App_Scheme.xcscheme | 25 ----------- .../xcshareddata/xcschemes/Framework.xcscheme | 5 --- .../SchemeGeneratorTests.swift | 16 +++---- 5 files changed, 20 insertions(+), 109 deletions(-) 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 {