Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Operation not permitted when executing 'killall' with Swift

I'm trying to create a menu bar app to hide desktop icons and hopefully various other things mostly to learn more about Swift, and for some reason I can't get it to work. When I run this program and click on one of the menu items, nothing happens and I get this warning in the console:

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

Other commands work, but any variant I try on "killall" spits out something like the above. Currently my code looks like this:

@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
}

I've tried numerous variations on the accepted solutions found here, here, and what I've found on Google, but I keep getting the same "Operation not permitted." When I run the same code in an Xcode playground, it works just fine.

Thanks in advance!

like image 967
twistedbagel Avatar asked Dec 01 '22 10:12

twistedbagel


2 Answers

If you're creating it as a local app for yourself you can open your entitlements file and change "App Sandbox" to NO. I would not recommend doing that for a production app. enter image description here

like image 97
Christopher Larsen Avatar answered Dec 04 '22 06:12

Christopher Larsen


Mac apps, like iOS apps, are sandboxed by default, which means they have very limited access to system resources. They are only allowed to read and write to a small number of sandboxed directories, for example, and read/write/execute from usr/bin is most definitely not allowed, and nor will you be allowed to launch processes.

As I recall, by deleting your entitlements file you are building an app that isn't sandboxed. You can run it from Xcode, but will need to change your system settings in order to be able to run it from the finder.

like image 36
Duncan C Avatar answered Dec 04 '22 04:12

Duncan C