2012-05-30 30 views
0

我在Mac App Store中,显示一些图形编写程序时。偶尔会更新这些关闭互联网。与大多数人一样,我现在不得不Sandbox我的应用程序。“sandboxd:拒绝文件的写入创建”写入应用程序本身的包

几乎一切正常,但在更新时,它保存在我的应用程序本身的包文件和失败,“sandboxd:拒绝文件的写入创建”

我只是使用的fopen(...,“WB” )

送入的fopen路径是: /Users/MyUser/Library/Developer/Xcode/DerivedData/MyApp-czuwveatgjffaggwqjdqpobjqqop/Build/Products/Debug/My.app/Contents/Resources/the_file.foo

使用创建的路径

我做得显然是错误的吗?我的应用程序是多平台,所以我会继续使用fopen/etc。据我了解,应该允许应用程序写入自己的包,即使它被阻止在别处做任何事情?

谢谢!

回答

6

OS X应用程序应该从不写入应用程序包(即使它们没有沙箱)。在OS X中,应用程序没有比用户自己更多的文件系统访问权限,并且用户(通常)不具有修改/ Applications中的任何内容的权限。请注意,这与iOS应用程序完全不同,后者通常将数据存储在应用程序包中。

在OS X,应用数据通常存储在每个用户的库文件夹,在一些这取决于它是数据类型的子文件夹中的一个;请参阅Apple主页上的“The Library Directory Stores App-Specific Files”注释。沙箱使这变得复杂,因为每个应用都有自己的Container inside the user's Library。 Apple为确定各种数据的正确位置提供了许多方法;见“Determining Where to Store Your App-Specific Files”。

+3

100%正确,但你永远不应该写为您的应用程序包的另一个原因是,你会失效代码签名。 (是的,你可以在留有空隙什么密封,并写入到这些差距,或编辑自己之后,你甚至可以重新签上你的包,但显然你不应该这样做。) – abarnert

+0

谢谢!对不起,延迟回复。有趣的是,在退出时编写一个设置文件似乎没有触发沙箱的任何问题。 –