无法获取文件的应用程序范围书签 - OS X沙箱

时间:2012-11-15 05:34:56

标签: macos appstore-sandbox

我一直在搜索网络,而苹果公司则提供了一些关于此问题的指导,并提出了简短的建议。我想知道是否有人遇到类似的情况,或者可能对发生的事情有什么了解。

我正在尝试为应用程序在以后的会话中调用的文件获取应用程序范围的书签。我可以确认在用户选择后路径本身已正确添加到沙箱中,因为我可以在会话期间打开(并重新打开)它。

但是,尝试获取安全范围的书签以便以后访问它是行不通的。

这就是我正在做的事情:

NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
NSError *error = nil;
NSData *bookmarkData = [url
           bookmarkDataWithOptions:(1UL << 11) //NSURLBookmarkCreationWithSecurityScope
           includingResourceValuesForKeys:nil
           relativeToURL:nil
           error:&error];
[url release];

我已经尝试了从字符串url生成的path以及仅使用NSSavePanel URL的结果进行测试。 (由于遗留原因,字符串path是我希望能够使用的字符串。)

我必须使用bookmarkDataWithOptions的值而不是常量,因为出于其他遗留代码的原因,我不得不使用10.6 SDK进行编译,其中NSURLBookmarkCreationWithSecurityScope不是可用。

我可以确认该路径指向所讨论的文件为“/Users/me/Documents/document.ext”,并且NSURL似乎正确初始化(或至少反映了相同的路径)。

该应用程序包含权利com.apple.security.files.bookmarks.app-scope

无论如何,这不起作用。该代码导致{0}的bookmarkData和0x0的error,并且控制台显示:ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.

如果我将relativeToURL更改为url而不是nil并将权利更改为com.apple.security.files.bookmarks.document-scope,那么它似乎正常工作 - 即{{1}至少得到一个非零值,没有记录错误。但我很确定这不是我想要的(即文档范围书签)。

有什么明显的东西我做错了吗?

2 个答案:

答案 0 :(得分:9)

对我永远的耻辱,这是我的错。

不知何故,在将项目移动到另一台机器进行测试和调试时,开发构建的代码签名已关闭。

显然这会导致事情(几乎)无声地失败,没有错误代码,只有控制台中有一个神秘的消息,没有其他迹象表明其他任何东西都无法正常工作。

将此问题留在这里以防其他人错误地做同样的事情。

答案 1 :(得分:0)

Hello 2019及以后的Google员工。我遇到了相同的问题,并通过重做我的开发证书进行了修复。只需取消选中“自动管理签名”并重新选中(也许切换到其他团队然后再切换回来)即可。