天哪,这个沙盒让我绝望:我有一个应用程序已经在 Apple 的商店发布(所以,理论上,它已经通过了审查......),它是一个幻灯片播放器 - 没什么太花哨的 - 用户可以拖放图像到 NSTableView 或通过 NSOpenPanel 选择。无论如何,我想我自己会使用它,所以我在笔记本电脑上重新编译了一个副本,突然之间我不允许安全书签:
QuickSlide(1412) deny mach-lookup com.apple.scopedbookmarksagent.xpc
每当我拖放图像或通过 NSOpenPanel 选择它们时,就会出现上述情况。
我有以下权利:
我用来生成书签的代码是:
-(NSData*)genSec:(NSURL*)aURL
{
NSError *error;
NSData *secData = [aURL bookmarkDataWithOptions:(NSURLBookmarkCreationWithSecurityScope | NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess | NSURLBookmarkCreationPreferFileIDResolution)
includingResourceValuesForKeys:nil relativeToURL:nil error:&error];
if (error) {
[self setReport: [NSString stringWithFormat:@"Can't access %@ due to SandBoxing",aURL]];
return nil;
}
return secData;
}
果然,该report
方法也与控制台日志记录一起被触发。
在我进行开发的几个月中,以前从未这样做过。我还在我的开发 Mac Pro 板条箱上尝试过,尝试使用不同签名或不签名的代码签名,甚至从 App Store 下载它(使用 2 个不同的帐户尝试了两次);都具有相同的结果。我还使用了非常方便的 Receigen 应用程序来检查编译包中的权利。我正在运行 10.7.5。阻止它抛出错误的唯一方法是,如果我取消选中 Xcode 中的“启用沙盒”选项并进行编译。
啊啊啊。有人能指出一个令人眼花缭乱的明显错误,不知怎的,我和 App Store 的 2 位测试人员、我和一位 App Store 评论员都漏掉了……?!!!!
它必须是显而易见的不是吗?
更新:我让一位同事将新副本下载到他的笔记本电脑上,沙盒没有问题。如果有人能对我的安装发生的事情有所了解,我仍然会很感激......
托德。