从6月1日开始,Apple要求所有提交到App Store的应用程序都必须运行在沙盒环境中,这可苦了我们这些悲催的码农。一则受到沙盒环境的种种限制,一些很常用的操作都没法实现;二则App Sandbox本身就是BUG重重,这个更是有理没处说。
举个例子,常规环境中,一般使用Shared File List API来设置程序随系统自动运行。到了沙盒环境中,Apple不许我们使用此API了,而建议使用Service Management来实现类似功能。Service Management不如传统方法直接,必须将一个Helper程序设置为启动项,由Helper程序唤起主程序,而且创建的启动项不能显示在系统设置中。这就算了,问题是Helper程序怎么也不能唤起主程序,这个BUG直到10.7.4才解决。
言归正传,本文要说的是另一个BUG。通常,如果需要展示某个文件夹的内容,我们会使用NSWorkspace的OpenURL方法。即使在沙盒环境中,只要已经取得了该文件夹的相关权限,此方法显然也应该没问题。但Apple不这么想,直到目前的Lion 10.7.4中,即便是打开沙盒容器中的目录都无法成功,可以在控制台看见这样的信息。