Я хочу разработать приложение MacOS для управления некоторыми своими собственными процессами. Я думал, что должен использовать launchd, но я обнаружил, что когда я использую launchd для запуска процесса, он всегда терпит неудачу. Ошибка выглядит следующим образом:
0:86: execution error: 2020-03-11 17:15:02.213472+0800 launchctl[9835:373247] [All] launchctl start: launchctl start com.example.myprocess (3)
Я закрыл песочницу. Я использовал Apple Script, чтобы подать заявку на root разрешения. Как:
do shell script \"launchctl start com.example.myprocess\" with administrator privileges
Как мне с этим бороться, спасибо.
Вот мой быстрый код:
Button(action: {
// let bundle = Bundle.main
// let cmd = bundle.path(forResource: "test", ofType: "sh")!
// let cmd = "launchctl load ~/Library/LaunchAgents/com.example.myprocess.plist"
let cmd = "launchctl start com.example.myprocess"
let process = Process()
process.launchPath = "/usr/bin/osascript"
let arg = String.init(format: "do shell script \"%@\" with administrator privileges with prompt \"XXXXX\"", cmd)
print(arg)
process.arguments = ["-e", arg]
process.launch()
process.waitUntilExit()
print("status: ", process.terminationStatus)
}) {
Text("Start")
}.disabled(isRunning).padding(.trailing)
Вот мой plist-код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.myprocess</string>
<key>ProgramArguments</key>
<array>
<string>/Users/tang/bin/myprocess</string>
<string>start</string>
</array>
<key>StandardOutPath</key>
<string>/Users/tang/myprocess.log</string>
<key>StandardErrorPath</key>
<string>/Users/tang/myprocess.log</string>
<key>WorkingDirectory</key>
<string>/Users/tang/</string>
</dict>
</plist>