我编写了一个简单的 OSx (10.11) 应用程序,以便在按下按钮时执行 shell 命令。当我从 xcode 运行它时它可以工作,但是当我通过“存档”导出应用程序时,其中一个按钮不再工作。我没有收到错误,也没有得到任何输出。我使用的是绝对路径,所以我不明白为什么它在 xcode 中工作但不能作为导出的应用程序工作,我也不明白为什么一个按钮工作而另一个按钮不工作。
这是我使用 make shell 命令的主要功能
func runCommand(path : String, args : [String]) -> (output: [String], error: [String], exitCode: Int32) {
var output : [String] = []
var error : [String] = []
let task = NSTask()
task.launchPath = path
task.arguments = args
let outpipe = NSPipe()
task.standardOutput = outpipe
let errpipe = NSPipe()
task.standardError = errpipe
task.launch()
let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
output = string.componentsSeparatedByString("\n")
}
let errdata = errpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(errdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
error = string.componentsSeparatedByString("\n")
}
//task.waitUntilExit()
let status = task.terminationStatus
return (output, error, status)
}
这是有效的按钮:
// Check for configurator 2 app installation
let (output, error, status) = self.runCommand("/bin/bash", args: ["-c", "/bin/ls", "/Applications/Apple Configurator 2.app"])
这是没有的按钮:
// Check if the phone is plugged in and paired
let (output, error, status) = self.runCommand("/bin/bash", args: ["-c", "/usr/local/bin/cfgutil", "get", "isPaired"])
更奇怪的是,我发现(通过纯粹的挫败感),如果我反复单击不起作用的按钮,它有时最终会起作用。