Improved Application Extension scheme generation (#932)

* Default extensions to launchAutomaticallySubstyle "2"

* Don't use debugger launcher with extensions

Xcode schemes don't use the LLDB launcher, even when debugging is enabled.

Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
This commit is contained in:
Brentley Jones
2020-09-06 15:40:32 +10:00
committed by GitHub
co-authored by Yonas Kolb
parent c8b24acbdd
commit 5ac96741bc
4 changed files with 42 additions and 10 deletions
+32 -3
View File
@@ -240,8 +240,8 @@ public class SchemeGenerator {
preActions: scheme.run?.preActions.map(getExecutionAction) ?? [],
postActions: scheme.run?.postActions.map(getExecutionAction) ?? [],
macroExpansion: shouldExecuteOnLaunch ? nil : buildableReference,
selectedDebuggerIdentifier: (scheme.run?.debugEnabled ?? Scheme.Run.debugEnabledDefault) ? XCScheme.defaultDebugger : "",
selectedLauncherIdentifier: (scheme.run?.debugEnabled ?? Scheme.Run.debugEnabledDefault) ? XCScheme.defaultLauncher : "Xcode.IDEFoundation.Launcher.PosixSpawn",
selectedDebuggerIdentifier: selectedDebuggerIdentifier(for: schemeTarget, run: scheme.run),
selectedLauncherIdentifier: selectedLauncherIdentifier(for: schemeTarget, run: scheme.run),
askForAppToLaunch: scheme.run?.askForAppToLaunch,
allowLocationSimulation: allowLocationSimulation,
locationScenarioReference: locationScenarioReference,
@@ -251,7 +251,7 @@ public class SchemeGenerator {
environmentVariables: launchVariables,
language: scheme.run?.language,
region: scheme.run?.region,
launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle,
launchAutomaticallySubstyle: scheme.run?.launchAutomaticallySubstyle ?? launchAutomaticallySubstyle(for: schemeTarget),
customLLDBInitFile: scheme.run?.customLLDBInit
)
@@ -290,6 +290,14 @@ public class SchemeGenerator {
)
}
private func launchAutomaticallySubstyle(for target: Target?) -> String? {
if target?.type.isExtension == true {
return "2"
} else {
return nil
}
}
private func makeProductRunnables(for target: Target?, buildableReference: XCScheme.BuildableReference) -> (launch: XCScheme.Runnable, profile: XCScheme.BuildableProductRunnable) {
let buildable = XCScheme.BuildableProductRunnable(buildableReference: buildableReference)
if target?.type.isWatchApp == true {
@@ -303,6 +311,22 @@ public class SchemeGenerator {
return (buildable, buildable)
}
}
private func selectedDebuggerIdentifier(for target: Target?, run: Scheme.Run?) -> String {
if target?.type.canUseDebugLauncher != false && run?.debugEnabled ?? Scheme.Run.debugEnabledDefault {
return XCScheme.defaultDebugger
} else {
return ""
}
}
private func selectedLauncherIdentifier(for target: Target?, run: Scheme.Run?) -> String {
if target?.type.canUseDebugLauncher != false && run?.debugEnabled ?? Scheme.Run.debugEnabledDefault {
return XCScheme.defaultLauncher
} else {
return "Xcode.IDEFoundation.Launcher.PosixSpawn"
}
}
}
enum SchemeGenerationError: Error, CustomStringConvertible {
@@ -380,6 +404,11 @@ extension Scheme {
}
extension PBXProductType {
var canUseDebugLauncher: Bool {
// Extensions don't use the lldb launcher
return !isExtension
}
var isWatchApp: Bool {
switch self {
case .watchApp, .watch2App: