使用Swift执行'killall'时不允许操作

时间:2018-03-28 21:35:49

标签: swift xcode macos terminal

我正在尝试创建一个菜单栏应用程序来隐藏桌面图标,希望其他各种其他的东西主要是为了更多地了解Swift,并且由于某些原因我无法让它工作。当我运行该程序并单击其中一个菜单项时,没有任何反应,我在控制台中收到此警告:

killall: warning: kill -TERM 15175: Operation not permitted

其他命令有效,但我尝试“killall”的任何变种都会吐出类似上面的内容。目前我的代码如下所示:

@discardableResult
func killStuff(_ args: String...) -> Int32 {
    let task = Process()
    let pipe = Pipe()

    task.launchPath = "/usr/bin/killall"
    task.arguments = args
    task.standardOutput = pipe
    task.standardError = pipe
    task.launch()
    task.waitUntilExit()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    if let output = String(data: data, encoding: .utf8) {
        print(output)
    }

    return task.terminationStatus
}

我已经尝试了很多针对已发现的解决方案[{3}},here以及我在Google上发现的解决方案的各种变体,但我仍然保持相同的“不允许操作”。当我在Xcode游乐场中运行相同的代码时,它可以正常工作。

提前致谢!

2 个答案:

答案 0 :(得分:3)

如果您要自己创建一个本地应用程序,则可以打开权利文件并将“应用程序沙箱”更改为NO。我不建议对生产应用程序这样做。 enter image description here

答案 1 :(得分:1)

Mac应用程序(如iOS应用程序)默认为沙盒,这意味着它们对系统资源的访问权限非常有限。例如,它们只允许读取和写入少量沙盒目录,绝对不允许从usr/bin读取/写入/执行,也不允许启动进程。

我记得,通过删除您的权利文件,您正在构建一个没有沙盒的应用程序。您可以从Xcode运行它,但需要更改系统设置才能从finder中运行它。