mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2024-09-20 17:17:33 +03:00
change scheme build targets schema
This commit is contained in:
parent
1daf6de16e
commit
7a390bb31a
@ -10,7 +10,9 @@ import Foundation
|
||||
import xcodeproj
|
||||
import JSONUtilities
|
||||
|
||||
public struct Scheme {
|
||||
public typealias BuildType = XCScheme.BuildAction.Entry.BuildFor
|
||||
|
||||
public struct Scheme: Equatable {
|
||||
|
||||
public var name: String
|
||||
public var build: Build
|
||||
@ -40,11 +42,15 @@ public struct Scheme {
|
||||
archive: .init(config: releaseConfig))
|
||||
}
|
||||
|
||||
public struct Build {
|
||||
public struct Build: Equatable {
|
||||
public var targets: [BuildTarget]
|
||||
public init(targets: [BuildTarget]) {
|
||||
self.targets = targets
|
||||
}
|
||||
|
||||
public static func ==(lhs: Build, rhs: Build) -> Bool {
|
||||
return lhs.targets == rhs.targets
|
||||
}
|
||||
}
|
||||
|
||||
public struct Run: BuildAction {
|
||||
@ -52,6 +58,10 @@ public struct Scheme {
|
||||
public init(config: String) {
|
||||
self.config = config
|
||||
}
|
||||
|
||||
public static func ==(lhs: Run, rhs: Run) -> Bool {
|
||||
return lhs.config == rhs.config
|
||||
}
|
||||
}
|
||||
|
||||
public struct Test: BuildAction {
|
||||
@ -59,6 +69,10 @@ public struct Scheme {
|
||||
public init(config: String) {
|
||||
self.config = config
|
||||
}
|
||||
|
||||
public static func ==(lhs: Test, rhs: Test) -> Bool {
|
||||
return lhs.config == rhs.config
|
||||
}
|
||||
}
|
||||
|
||||
public struct Analyze: BuildAction {
|
||||
@ -66,6 +80,10 @@ public struct Scheme {
|
||||
public init(config: String) {
|
||||
self.config = config
|
||||
}
|
||||
|
||||
public static func ==(lhs: Analyze, rhs: Analyze) -> Bool {
|
||||
return lhs.config == rhs.config
|
||||
}
|
||||
}
|
||||
|
||||
public struct Profile: BuildAction {
|
||||
@ -73,6 +91,10 @@ public struct Scheme {
|
||||
public init(config: String) {
|
||||
self.config = config
|
||||
}
|
||||
|
||||
public static func ==(lhs: Profile, rhs: Profile) -> Bool {
|
||||
return lhs.config == rhs.config
|
||||
}
|
||||
}
|
||||
|
||||
public struct Archive: BuildAction {
|
||||
@ -80,25 +102,43 @@ public struct Scheme {
|
||||
public init(config: String) {
|
||||
self.config = config
|
||||
}
|
||||
|
||||
public static func ==(lhs: Archive, rhs: Archive) -> Bool {
|
||||
return lhs.config == rhs.config
|
||||
}
|
||||
}
|
||||
|
||||
public struct BuildTarget {
|
||||
public struct BuildTarget: Equatable {
|
||||
public var target: String
|
||||
public var buildTypes: [XCScheme.BuildAction.Entry.BuildFor]
|
||||
public var buildTypes: [BuildType]
|
||||
|
||||
public init(target: String, buildTypes: [XCScheme.BuildAction.Entry.BuildFor] = XCScheme.BuildAction.Entry.BuildFor.default) {
|
||||
public init(target: String, buildTypes: [BuildType] = BuildType.all) {
|
||||
self.target = target
|
||||
self.buildTypes = buildTypes
|
||||
}
|
||||
|
||||
public static func ==(lhs: BuildTarget, rhs: BuildTarget) -> Bool {
|
||||
return lhs.target == rhs.target && lhs.buildTypes == rhs.buildTypes
|
||||
}
|
||||
}
|
||||
|
||||
public static func ==(lhs: Scheme, rhs: Scheme) -> Bool {
|
||||
return lhs.build == rhs.build &&
|
||||
lhs.run == rhs.run &&
|
||||
lhs.test == rhs.test &&
|
||||
lhs.analyze == rhs.analyze &&
|
||||
lhs.profile == rhs.profile &&
|
||||
lhs.archive == rhs.archive
|
||||
}
|
||||
}
|
||||
|
||||
protocol BuildAction {
|
||||
protocol BuildAction: Equatable {
|
||||
var config: String { get }
|
||||
|
||||
init(config: String)
|
||||
}
|
||||
|
||||
|
||||
extension Scheme.Run: JSONObjectConvertible {
|
||||
|
||||
public init(jsonDictionary: JSONDictionary) throws {
|
||||
@ -150,27 +190,40 @@ extension Scheme: NamedJSONDictionaryConvertible {
|
||||
extension Scheme.Build: JSONObjectConvertible {
|
||||
|
||||
public init(jsonDictionary: JSONDictionary) throws {
|
||||
|
||||
var targets: [Scheme.BuildTarget] = []
|
||||
let dictionary: [String: String] = try jsonDictionary.json(atKeyPath: "targets")
|
||||
|
||||
for (key, value) in dictionary {
|
||||
let buildTypes: [XCScheme.BuildAction.Entry.BuildFor]
|
||||
switch value {
|
||||
case "all": buildTypes = [.running, .testing, .profiling, .analyzing, .archiving]
|
||||
case "none": buildTypes = []
|
||||
case "testing": buildTypes = [.testing, .analyzing]
|
||||
case "indexing": buildTypes = [.testing, .analyzing, .archiving]
|
||||
default: buildTypes = [.running, .testing, .profiling, .analyzing, .archiving]
|
||||
}
|
||||
targets.append(Scheme.BuildTarget(target: key, buildTypes: buildTypes))
|
||||
}
|
||||
|
||||
self.targets = targets
|
||||
targets = try jsonDictionary.json(atKeyPath: "targets")
|
||||
}
|
||||
}
|
||||
|
||||
extension XCScheme.BuildAction.Entry.BuildFor: JSONPrimitiveConvertible {
|
||||
extension Scheme.BuildTarget: JSONObjectConvertible {
|
||||
|
||||
public init(jsonDictionary: JSONDictionary) throws {
|
||||
target = try jsonDictionary.json(atKeyPath: "target")
|
||||
if jsonDictionary["buildTypes"] == nil {
|
||||
buildTypes = BuildType.all
|
||||
} else {
|
||||
if let types: String = jsonDictionary.json(atKeyPath: "buildTypes") {
|
||||
switch types {
|
||||
case "all": buildTypes = BuildType.all
|
||||
case "none": buildTypes = []
|
||||
case "testing": buildTypes = [.testing, .analyzing]
|
||||
case "indexing": buildTypes = [.testing, .analyzing, .archiving]
|
||||
default: buildTypes = BuildType.all
|
||||
}
|
||||
} else {
|
||||
let types: [String: Bool] = try jsonDictionary.json(atKeyPath: "buildTypes")
|
||||
var buildTypes: [BuildType] = []
|
||||
for (type, build) in types {
|
||||
if build , let buildType = BuildType.from(jsonValue: type) {
|
||||
buildTypes.append(buildType)
|
||||
}
|
||||
}
|
||||
self.buildTypes = buildTypes
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension BuildType: JSONPrimitiveConvertible {
|
||||
|
||||
public typealias JSONType = String
|
||||
|
||||
@ -184,4 +237,8 @@ extension XCScheme.BuildAction.Entry.BuildFor: JSONPrimitiveConvertible {
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
|
||||
public static var all: [BuildType] {
|
||||
return [.running, .testing, .profiling, .analyzing, .archiving]
|
||||
}
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ public class ProjectGenerator {
|
||||
|
||||
let buildableReference = XCScheme.BuildableReference(referencedContainer: "container:\(spec.name).xcodeproj", blueprintIdentifier: targetReference.reference, buildableName: "\(target.target).\(targetReference.productType!.fileExtension!)", blueprintName: scheme.name)
|
||||
|
||||
return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: XCScheme.BuildAction.Entry.BuildFor.default)
|
||||
return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: target.buildTypes)
|
||||
}
|
||||
|
||||
let buildableReference = buildActionEntries.first!.buildableReference
|
||||
|
@ -133,7 +133,7 @@ func projectGeneratorTests() {
|
||||
guard let xcscheme = project.sharedData?.schemes.first else { throw failure("Scheme not found") }
|
||||
try expect(scheme.name) == "MyScheme"
|
||||
guard let buildActionEntry = xcscheme.buildAction?.buildActionEntries.first else { throw failure("Build Action entry not found") }
|
||||
try expect(buildActionEntry.buildFor) == XCScheme.BuildAction.Entry.BuildFor.default
|
||||
try expect(buildActionEntry.buildFor) == BuildType.all
|
||||
|
||||
let buildableReferences: [XCScheme.BuildableReference] = [
|
||||
buildActionEntry.buildableReference,
|
||||
|
@ -66,13 +66,26 @@ func specLoadingTests() {
|
||||
|
||||
$0.it("parses schemes") {
|
||||
let schemeDictionary: [String: Any] = [
|
||||
"build": ["targets": ["Target": "all"]],
|
||||
"build": ["targets": [
|
||||
["target": "Target"],
|
||||
["target": "Target", "buildTypes": "testing"],
|
||||
["target": "Target", "buildTypes": "none"],
|
||||
["target": "Target", "buildTypes": "all"],
|
||||
["target": "Target", "buildTypes": ["testing": true]],
|
||||
["target": "Target", "buildTypes": ["testing": false]],
|
||||
]],
|
||||
]
|
||||
let scheme = try Scheme(name: "Scheme", jsonDictionary: schemeDictionary)
|
||||
let target = scheme.build.targets.first!
|
||||
let expectedTargets: [Scheme.BuildTarget] = [
|
||||
Scheme.BuildTarget(target: "Target", buildTypes: BuildType.all),
|
||||
Scheme.BuildTarget(target: "Target", buildTypes: [.testing, .analyzing]),
|
||||
Scheme.BuildTarget(target: "Target", buildTypes: []),
|
||||
Scheme.BuildTarget(target: "Target", buildTypes: BuildType.all),
|
||||
Scheme.BuildTarget(target: "Target", buildTypes: [.testing]),
|
||||
Scheme.BuildTarget(target: "Target", buildTypes: []),
|
||||
]
|
||||
try expect(scheme.name) == "Scheme"
|
||||
try expect(target.target) == "Target"
|
||||
try expect(target.buildTypes) == [.running, .testing, .profiling, .analyzing, .archiving]
|
||||
try expect(scheme.build.targets) == expectedTargets
|
||||
}
|
||||
|
||||
$0.it("parses settings") {
|
||||
|
Loading…
Reference in New Issue
Block a user