Launch application in background from launcher
Requires disabling sandbox for launcher to receive arguments. https://developer.apple.com/documentation/appkit/nsworkspace/openconfiguration/3172708-arguments Refine some minor things about launcher: - Pass invoker to NSApp.terminate() calls - Use legacy version of .openApplication() to drop Concurrency
This commit is contained in:
parent
3f4b55a003
commit
f33380b4e2
|
@ -33,6 +33,9 @@ class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject {
|
||||||
#if targetEnvironment(macCatalyst)
|
#if targetEnvironment(macCatalyst)
|
||||||
mac.configure()
|
mac.configure()
|
||||||
mac.menu.install()
|
mac.menu.install()
|
||||||
|
if ProcessInfo.processInfo.arguments.contains(Constants.Global.appArgumentBackground) {
|
||||||
|
mac.utils.sendAppToBackground()
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,5 +44,7 @@ enum Constants {
|
||||||
static let appBuildNumber = Int(Bundle.main.infoDictionary![kCFBundleVersionKey as String] as! String)!
|
static let appBuildNumber = Int(Bundle.main.infoDictionary![kCFBundleVersionKey as String] as! String)!
|
||||||
|
|
||||||
static let appVersionString = "\(appVersionNumber) (\(appBuildNumber))"
|
static let appVersionString = "\(appVersionNumber) (\(appBuildNumber))"
|
||||||
|
|
||||||
|
static let appArgumentBackground = "-background"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,18 +37,18 @@ class AppDelegate: NSObject, NSApplicationDelegate, ObservableObject {
|
||||||
|
|
||||||
func applicationDidFinishLaunching(_ notification: Notification) {
|
func applicationDidFinishLaunching(_ notification: Notification) {
|
||||||
guard !isAppRunning else {
|
guard !isAppRunning else {
|
||||||
NSApp.terminate(nil)
|
NSApp.terminate(self)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Task {
|
|
||||||
do {
|
|
||||||
let cfg = NSWorkspace.OpenConfiguration()
|
let cfg = NSWorkspace.OpenConfiguration()
|
||||||
cfg.hides = true
|
cfg.hides = true
|
||||||
try await NSWorkspace.shared.openApplication(at: appURL, configuration: cfg)
|
cfg.arguments = [Constants.Global.appArgumentBackground]
|
||||||
} catch {
|
NSWorkspace.shared.openApplication(at: appURL, configuration: cfg) { app, error in
|
||||||
|
if let error = error {
|
||||||
NSLog("Unable to launch main app: \(error)")
|
NSLog("Unable to launch main app: \(error)")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
await NSApp.terminate(nil)
|
NSApp.terminate(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<true/>
|
<false/>
|
||||||
<key>com.apple.security.files.user-selected.read-only</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
Loading…
Reference in New Issue