小编Jac*_*ing的帖子

用NSTask启动的沙盒子进程无声地失败

我正在构建一个包含命令行可执行文件的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的任何输出(包括outputStringerrorReport为空字符串).不会生成错误(error始终为nil),并且不会发生控制台输出.

我的应用程序具有以下权利:

<key>com.apple.security.app-sandbox</key> …
Run Code Online (Sandbox Code Playgroud)

macos cocoa sandbox nstask swift

5
推荐指数
0
解决办法
466
查看次数

标签 统计

cocoa ×1

macos ×1

nstask ×1

sandbox ×1

swift ×1