通过Mac App Store出售的应用程序是否可以访问系统文件夹?
我的意思是:我的应用程序需要读取沙箱区域之外的目录的内容,让我们说/Library/StartupItems
之类的东西,如果用户愿意,可以在其中删除文件。
沙盒应用程序是否可以访问系统文件夹并在那里删除文件?如果无法删除,至少可以读取吗?
如果要在Mac App Store上销售,是否必须启用沙箱?
我已经尝试过随机执行此操作的目录:
NSString *path = @"/Library/StartupItems";
NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
我可以获得目录 list 。如果该应用程序标记为沙盒,我该如何阅读?我不明白
最佳答案
不可以,通过Mac App Store出售的OS X应用程序无法按照您所描述的方式访问资源。还需要对所有应用进行沙盒测试并使用有效的Mac Developer Program证书进行代码签名。
至于当您的应用程序标记为“沙盒”时能够读取/Library/StartupItems
(不建议使用);这不仅仅是检查选项的问题。您还必须确保选择了“使用权利文件”,并且应用程序已正确进行了代码签名。完成此操作后,您可以使用以下方法检查是否在Terminal中正确地将其沙箱化:
codesign -dvvv --entitlements :- Some.app/Contents/MacOS/Executable
此外,在某些目录中可以读取“世界可读”文件:
/bin
/sbin
/usr/bin
/usr/lib
/usr/sbin
/usr/share
/System
为了允许OS X应用程序像您的(较早的)示例那样与文件系统进行交互,该应用程序将需要使用通常使用
Authorization Services
的提升的特权-App Sandbox不允许这样做。看一下标题为“Determine Whether Your App Is Suitable for Sandboxing”的部分,它应该可以回答您可能遇到的其他问题。沙盒在很多方面都很好,但同时也有很大的局限性。如果您的应用程序需要做的事情不在允许的范围之内,则可以选择不通过Mac App Store进行销售并且不使用沙箱。一些开发人员还创建了两个不同版本的应用程序(Mac App Store版本和非Mac App Store)。如果您的应用依赖于容器外的任何东西,那么您肯定会考虑/权衡沙盒的利与弊。
关于macos - Mac App Store上出售的沙盒应用程序可以访问系统文件夹吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24594899/