2

天哪,这个沙盒让我绝望:我有一个应用程序已经在 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 评论员都漏掉了……?!!!!

它必须是显而易见的不是吗?

更新:我让一位同事将新副本下载到他的笔记本电脑上,沙盒没有问题。如果有人能对我的安装发生的事情有所了解,我仍然会很感激......

托德。

4

1 回答 1

2

果然,从您的权利看来,这是显而易见的事情。您还需要添加这个:

com.apple.security.files.bookmarks.app-scope

我不知道为什么它以前有效,现在无效,但我很肯定您需要声明此权利才能使安全范围的书签有效。

于 2013-03-24T15:21:17.380 回答