我正在构建一个包含命令行可执行文件的OS X应用程序.应用程序调用可执行文件,传递用户选择的文件名,并使用管道获取输出.执行此操作的代码如下所示:
let bundle = NSBundle(forClass: self.dynamicType)
let binaryPath = bundle.URLForResource("myBundledBinary", withExtension: nil)
let task = NSUserUnixTask(URL: binaryPath!, error: nil)
let stdout = NSPipe()
let stderr = NSPipe()
task.standardOutput = stdout.fileHandleForWriting
task.standardError = stderr.fileHandleForWriting
task.executeWithArguments([filename], completionHandler: { (error) -> Void in
let output = stdout.fileHandleForReading.readDataToEndOfFile()
let error = stderr.fileHandleForReading.readDataToEndOfFile()
let outputString = NSString(data: output, encoding: NSUTF8StringEncoding) ?? ""
let errorReport = NSString(data: error, encoding: NSUTF8StringEncoding) ?? ""
handler([outputString, errorReport], nil)
})
Run Code Online (Sandbox Code Playgroud)
这很好,直到我尝试沙盒应用程序.当这个代码在沙盒应用程序运行时,任务似乎完成,但没有在任stdout或stderr的任何输出(包括outputString和errorReport为空字符串).不会生成错误(error始终为nil),并且不会发生控制台输出.
我的应用程序具有以下权利:
<key>com.apple.security.app-sandbox</key> …Run Code Online (Sandbox Code Playgroud)