aba*_*ert 29
是的,但它需要"临时例外"权利."临时"意味着它可能会在操作系统的某个未来版本中消失,但这并不是一个风险.更大的问题是"异常"一词:这意味着您必须证明您使用权利是合理的,或者App Store审核人员可能会拒绝您.
提交一份错误报告,准确解释您认为应该能做什么,但今天无法访问~/Library
,并且理想情况下也可以在该主题上启动论坛帖子.他们可能建议使用一种变通方法来代替访问~/Library
(甚至可能使用私有API),在这种情况下,做他们说的话.或者他们可能会说现在使用临时例外,在这种情况下,这样做.或者他们可能没有回应,在这种情况下,您使用临时例外并交叉手指.在任何情况下,请确保您的App Store提交审核说明具有指向错误报告和/或论坛帖子的链接.
您必须手动编辑项目的权利plist才能执行此操作,但这并不是很难.创建一个com.apple.security.temporary-exception.files.home-relative-path.read-only
包含一个字符串的数组"/Library/"
.像这样:
<key>com.apple.security.temporary-exception.files.home-relative-path.read-only</key>
<array>
<string>/Library/</string>
</array>
Run Code Online (Sandbox Code Playgroud)
最后的额外内容/
是沙盒知道您想要访问目录而不是文件的方式.如果你关闭它,你将可以访问所有文件~/Library
,这是你要求的,但不能访问(递归)子目录中的文件~/Library
,比如说~/Library/LaunchAgents/com.mycompany.myapp.myoldagent.12345678-ABCD-EF00-1234-567890ABCDEF.plist
,这是你可能想要的.请参阅权利密钥参考文档中的文件访问临时扩展.
此外,请注意您已经"免费"访问某些内容~/Library
,因为它们被复制到您的容器中,或者在您使用适当的API而不是使用路径时间接访问.因此,可能有更好的方法来完成您正在做的事情 - 例如,要读取以前的非沙盒版本的应用程序留下的文件,您可以将它们迁移到容器中并在那里读取它们.
还有一两件事:只要有访问〜/ Library不改变什么NSHomeDirectory()
,URLsForDirectory:inDomains:
等等.将返回- you'll仍然得到~/Containers/com.mycompany.myproduct/Data/Library
代替.Apple处理此问题的半官方建议是使用BSD API获取用户的真实主目录,最简单的方法是:
const char *home = getpwuid(getuid())->pw_dir;
NSString *path = [[NSFileManager defaultManager]
stringWithFileSystemRepresentation:home
length:strlen(home)];
NSURL *url = [NSURL fileURLWithPath:path isDirectory:YES];
Run Code Online (Sandbox Code Playgroud)
几点说明:
getpwuid
过于频繁地打电话通常不是一个好主意.最好的解决方案是尽早调用此代码,然后缓存生成的代码NSURL
.Library
目录),但App Store几乎肯定不会允许任何实际尝试的软件.~/Library
被认为是一个"实施细节",可能会改变一天,这是另一个原因(在权利之上),这必须被视为临时解决方案,直到Apple为您的更高层提供真正的解决方案水平问题,在您的评论中可能值得一提. 归档时间: |
|
查看次数: |
4146 次 |
最近记录: |