【发布时间】:2015-07-14 20:49:36
【问题描述】:
我有一个需要重新启动停靠应用程序的应用程序。我用两个 Apple Script 都试过了:
var errorDict: NSDictionary? = nil
let appleScript = NSAppleScript(source: "tell application \"Dock\" to quit")
var error = appleScript?.executeAndReturnError(&errorDict)
if let errorDict = errorDict {
println("An error occured: \(errorDict)")
}
...和NSTask:
let task = NSTask()
task.launchPath = "/usr/bin/killall"
task.arguments = ["Dock"]
task.launch()
...还有另一个NSTask:
func restartFinder () {
let task = NSTask()
task.launchPath = "/bin/bash"
task.arguments = ["killall Dock"]
task.launch()
}
但是,似乎不允许我的应用重新启动它。我想将我的应用程序发布到 AppStore,但如何重新启动扩展坞?
使用 Apple 脚本时出错:
An error occured: {
NSAppleScriptErrorAppName = Dock;
NSAppleScriptErrorBriefMessage = "Application isn\U2019t running.";
NSAppleScriptErrorMessage = "Dock got an error: Application isn\U2019t running.";
NSAppleScriptErrorNumber = "-600";
NSAppleScriptErrorRange = "NSRange: {27, 4}";
}
使用NSTask时出错:
killall: warning: kill -TERM 255: Operation not permitted
更新
我也用STPrivilegedTask 尝试过,这对我也不起作用。我也没有获得授权窗口。
【问题讨论】:
-
您无法从沙盒应用程序中执行此操作。你想完成什么?
-
我正在尝试重新启动 Dock,因为我使用
CFPreferencesSetAppValue将密钥mcx-expose-disabled更改为com.apple.dock。要使更改生效,我需要重新启动 Dock。 -
据我所知,您也无法从沙盒应用程序写入 Dock 首选项?
-
这似乎工作得很好,或者
CFPreferencesSetAppValue为我的应用程序单独保存值。每次应用重启后,它都会记住最新的设置。 -
尝试自己强制退出 Dock,或从终端运行
defaults read com.apple.dock,以查看是否实际应用了任何内容,但我强烈怀疑您正在将首选项写入您的应用沙箱。允许沙盒应用修改另一个应用的首选项将是一个巨大的安全漏洞。
标签: macos swift applescript nstask