Mac app沙盒和forkpty()

时间:2012-02-19 22:31:08

标签: objective-c c cocoa sandbox appstore-sandbox

我希望沙盒应用程序符合Mac App Store的3月1日沙盒要求。我的应用程序包括一个内置的终端模拟器,它利用forkpty()调用在伪tty环境中启动进程。不幸的是,虽然fork()调用工作得很好,但是这个调用在沙箱下失败并且出现错误"操作不允许"据推测,forkpty()调用需要对/ dev /目录进行读/写访问才能创建伪tty(根据手册页)。我尝试添加一个临时的沙盒权利(com.apple.security.temporary-exception.files.absolute-path.read-write),对/有读/写权限,我现在确实可以在任何地方读写文件在文件系统上,forkpty()调用仍然失败并出现相同的错误。有谁知道我如何让forkpty()在沙箱下工作?

我的应用程序是一个带有内置终端模拟器和文件浏览器的编程文本编辑器,因此它基本上需要访问整个文件系统。除forkpty()问题外,这个临时权利似乎可以满足我的需要。但Apple会接受一个具有如此松散定义的临时例外权利的应用程序吗?

先谢谢你们。我真的希望我可以启动并运行这个沙盒,所以我继续通过App Store分发我的应用程序。

1 个答案:

答案 0 :(得分:2)

在沙盒应用程序中实现一个有用的终端模拟器是不可能的 - 即使在为PTY设备添加权利之后,shell也会在与应用程序相同的沙箱中结束,从而阻止它做很多事情。