一尘不染

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

swift

我正在尝试创建一个菜单栏应用程序,以隐藏桌面图标以及希望进行其他各种操作,主要是为了更多地了解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
}

我已经和Google上找到的可接受的解决方案进行了多种尝试,但是我不断收到相同的“不允许操作”的信息。当我在Xcode游乐场中运行相同的代码时,它工作正常。

提前致谢!


阅读 462

收藏
2020-07-07

共1个答案

一尘不染

Mac应用程序(如iOS应用程序)在默认情况下处于沙箱状态,这意味着它们对系统资源的访问非常有限。例如,仅允许它们读取和写入少量沙盒目录,并且usr/bin绝对不允许读取/写入/执行,也不允许您启动进程。

我记得,通过删除您的权利文件,您正在构建未沙盒化的应用程序。您可以从Xcode运行它,但是需要更改系统设置才能从查找程序运行它。

2020-07-07