Skip to content

Commit 78d2152

Browse files
authored
Add debugEnabled option for run and test (#657)
Add `debugEnabled` option for run and test
2 parents e981c72 + e3ca38a commit 78d2152

File tree

5 files changed

+48
-2
lines changed

5 files changed

+48
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Added `includes` to `sources` for a Target. This follows the same glob-style as `excludes` but functions as a way to only include files that match a specified pattern. Useful if you only want a certain file type, for example specifying `**/*.swift`. [#637](https://github.com/yonaskolb/XcodeGen/pull/637) @bclymer
88
- Support `dylib` SDK. [#650](https://github.com/yonaskolb/XcodeGen/pull/650)
99
- Added `language` and `region` options for `run` and `test` scheme [#654](https://github.com/yonaskolb/XcodeGen/pull/654)
10+
- Added `debugEnabled` option for `run` and `test` scheme [#657](https://github.com/yonaskolb/XcodeGen/pull/657)
1011

1112
#### Fixed
1213

Docs/ProjectSpec.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,7 @@ The different actions share some properties:
687687
- [ ] **disableMainThreadChecker**: **Bool** - `run` and `test` actions can define a boolean that indicates that this scheme should disable the Main Thread Checker. This defaults to false
688688
- [ ] **language**: **String** - `run` and `test` actions can define a language that is used for Application Language
689689
- [ ] **region**: **String** - `run` and `test` actions can define a language that is used for Application Region
690+
- [ ] **debugEnabled**: **Bool** - `run` and `test` actions can define a whether debugger should be used. This defaults to true.
690691

691692
### Execution Action
692693

Sources/ProjectSpec/Scheme.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public struct Scheme: Equatable {
6969

7070
public struct Run: BuildAction {
7171
public static let disableMainThreadCheckerDefault = false
72+
public static let debugEnabledDefault = true
7273

7374
public var config: String?
7475
public var commandLineArguments: [String: Bool]
@@ -78,6 +79,7 @@ public struct Scheme: Equatable {
7879
public var disableMainThreadChecker: Bool
7980
public var language: String?
8081
public var region: String?
82+
public var debugEnabled: Bool
8183

8284
public init(
8385
config: String,
@@ -87,7 +89,8 @@ public struct Scheme: Equatable {
8789
environmentVariables: [XCScheme.EnvironmentVariable] = [],
8890
disableMainThreadChecker: Bool = disableMainThreadCheckerDefault,
8991
language: String? = nil,
90-
region: String? = nil
92+
region: String? = nil,
93+
debugEnabled: Bool = debugEnabledDefault
9194
) {
9295
self.config = config
9396
self.commandLineArguments = commandLineArguments
@@ -97,12 +100,14 @@ public struct Scheme: Equatable {
97100
self.disableMainThreadChecker = disableMainThreadChecker
98101
self.language = language
99102
self.region = region
103+
self.debugEnabled = debugEnabled
100104
}
101105
}
102106

103107
public struct Test: BuildAction {
104108
public static let gatherCoverageDataDefault = false
105109
public static let disableMainThreadCheckerDefault = false
110+
public static let debugEnabledDefault = true
106111

107112
public var config: String?
108113
public var gatherCoverageData: Bool
@@ -114,6 +119,7 @@ public struct Scheme: Equatable {
114119
public var environmentVariables: [XCScheme.EnvironmentVariable]
115120
public var language: String?
116121
public var region: String?
122+
public var debugEnabled: Bool
117123

118124
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
119125
public static let randomExecutionOrderDefault = false
@@ -156,7 +162,8 @@ public struct Scheme: Equatable {
156162
postActions: [ExecutionAction] = [],
157163
environmentVariables: [XCScheme.EnvironmentVariable] = [],
158164
language: String? = nil,
159-
region: String? = nil
165+
region: String? = nil,
166+
debugEnabled: Bool = debugEnabledDefault
160167
) {
161168
self.config = config
162169
self.gatherCoverageData = gatherCoverageData
@@ -168,6 +175,7 @@ public struct Scheme: Equatable {
168175
self.environmentVariables = environmentVariables
169176
self.language = language
170177
self.region = region
178+
self.debugEnabled = debugEnabled
171179
}
172180

173181
public var shouldUseLaunchSchemeArgsEnv: Bool {
@@ -275,6 +283,7 @@ extension Scheme.Run: JSONObjectConvertible {
275283
disableMainThreadChecker = jsonDictionary.json(atKeyPath: "disableMainThreadChecker") ?? Scheme.Run.disableMainThreadCheckerDefault
276284
language = jsonDictionary.json(atKeyPath: "language")
277285
region = jsonDictionary.json(atKeyPath: "region")
286+
debugEnabled = jsonDictionary.json(atKeyPath: "debugEnabled") ?? Scheme.Run.debugEnabledDefault
278287
}
279288
}
280289

@@ -294,6 +303,9 @@ extension Scheme.Run: JSONEncodable {
294303
dict["disableMainThreadChecker"] = disableMainThreadChecker
295304
}
296305

306+
if debugEnabled != Scheme.Run.debugEnabledDefault {
307+
dict["debugEnabled"] = debugEnabled
308+
}
297309
return dict
298310
}
299311
}
@@ -323,6 +335,7 @@ extension Scheme.Test: JSONObjectConvertible {
323335
environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)
324336
language = jsonDictionary.json(atKeyPath: "language")
325337
region = jsonDictionary.json(atKeyPath: "region")
338+
debugEnabled = jsonDictionary.json(atKeyPath: "debugEnabled") ?? Scheme.Test.debugEnabledDefault
326339
}
327340
}
328341

@@ -347,6 +360,10 @@ extension Scheme.Test: JSONEncodable {
347360
dict["disableMainThreadChecker"] = disableMainThreadChecker
348361
}
349362

363+
if debugEnabled != Scheme.Run.debugEnabledDefault {
364+
dict["debugEnabled"] = debugEnabled
365+
}
366+
350367
return dict
351368
}
352369
}

Sources/XcodeGenKit/SchemeGenerator.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public class SchemeGenerator {
152152
testables: testables,
153153
preActions: scheme.test?.preActions.map(getExecutionAction) ?? [],
154154
postActions: scheme.test?.postActions.map(getExecutionAction) ?? [],
155+
selectedDebuggerIdentifier: (scheme.test?.debugEnabled ?? Scheme.Test.debugEnabledDefault) ? XCScheme.defaultDebugger : "",
155156
shouldUseLaunchSchemeArgsEnv: scheme.test?.shouldUseLaunchSchemeArgsEnv ?? true,
156157
codeCoverageEnabled: scheme.test?.gatherCoverageData ?? Scheme.Test.gatherCoverageDataDefault,
157158
disableMainThreadChecker: scheme.test?.disableMainThreadChecker ?? Scheme.Test.disableMainThreadCheckerDefault,
@@ -167,6 +168,8 @@ public class SchemeGenerator {
167168
preActions: scheme.run?.preActions.map(getExecutionAction) ?? [],
168169
postActions: scheme.run?.postActions.map(getExecutionAction) ?? [],
169170
macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference,
171+
selectedDebuggerIdentifier: (scheme.run?.debugEnabled ?? Scheme.Run.debugEnabledDefault) ? XCScheme.defaultDebugger : "",
172+
selectedLauncherIdentifier: (scheme.run?.debugEnabled ?? Scheme.Run.debugEnabledDefault) ? XCScheme.defaultLauncher : "Xcode.IDEFoundation.Launcher.PosixSpawn",
170173
disableMainThreadChecker: scheme.run?.disableMainThreadChecker ?? Scheme.Run.disableMainThreadCheckerDefault,
171174
commandlineArguments: launchCommandLineArgs,
172175
environmentVariables: launchVariables,

Tests/XcodeGenKitTests/SchemeGeneratorTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ class SchemeGeneratorTests: XCTestCase {
8787
try expect(xcscheme.profileAction?.buildConfiguration) == "Release"
8888
try expect(xcscheme.analyzeAction?.buildConfiguration) == "Debug"
8989
try expect(xcscheme.archiveAction?.buildConfiguration) == "Release"
90+
91+
try expect(xcscheme.launchAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger
92+
try expect(xcscheme.testAction?.selectedDebuggerIdentifier) == XCScheme.defaultDebugger
9093
}
9194

9295
$0.it("sets environment variables for a scheme") {
@@ -174,6 +177,27 @@ class SchemeGeneratorTests: XCTestCase {
174177
try expect(xcscheme.profileAction?.environmentVariables) == variables
175178
}
176179

180+
$0.it("generate scheme without debugger") {
181+
let scheme = Scheme(
182+
name: "TestScheme",
183+
build: Scheme.Build(targets: [buildTarget]),
184+
run: Scheme.Run(config: "Debug", debugEnabled: false)
185+
)
186+
let project = Project(
187+
name: "test",
188+
targets: [app, framework],
189+
schemes: [scheme]
190+
)
191+
let xcodeProject = try project.generateXcodeProject()
192+
193+
guard let xcscheme = xcodeProject.sharedData?.schemes.first else {
194+
throw failure("Scheme not found")
195+
}
196+
197+
try expect(xcscheme.launchAction?.selectedDebuggerIdentifier) == ""
198+
try expect(xcscheme.launchAction?.selectedLauncherIdentifier) == "Xcode.IDEFoundation.Launcher.PosixSpawn"
199+
}
200+
177201
$0.it("generates pre and post actions for target schemes") {
178202
var target = app
179203
target.scheme = TargetScheme(

0 commit comments

Comments
 (0)