Swift中NSWorkspace.OpenConfiguration()配置不生效问题如何解决?
问题根因
- 代码中先调用了无配置的
workspace.open(bundleURL)方法,这个调用会直接正常启动、激活并显示Safari,后续带配置的openApplication执行时,Safari已经处于运行状态,而NSWorkspace.OpenConfiguration的activates、hides参数仅对新启动的应用进程生效,对已经运行的应用不会触发状态变更。 - 重复调用启动方法时,系统默认会触发已运行应用的激活逻辑,反而抵消了你的配置效果。
修复后的代码
let workspace = NSWorkspace.shared if let bundleURL = workspace.urlForApplication(withBundleIdentifier: "com.apple.Safari"){ let conf = NSWorkspace.OpenConfiguration() conf.activates = false conf.hides = true workspace.openApplication(at: bundleURL, configuration: conf){ (app, err) in print(app as Any) print(err as Any) } }
补充说明
如果需要兼容Safari已经在后台运行的场景,可以在回调中额外添加隐藏逻辑:
workspace.openApplication(at: bundleURL, configuration: conf){ (app, err) in if let app = app { // 针对已运行的应用主动触发隐藏 app.hide() } print(app as Any) print(err as Any) }
内容的提问来源于stack exchange,提问作者a_kira
相关产品推荐
相关产品推荐

