无法获取文件的应用程序作用域书签 - OS X沙盒

11

我一直在搜索互联网和苹果帮助,以获取有关此事的指导,但没有结果。 我想知道是否有人遇到过类似情况,或者可能对正在发生的事情有一些见解。

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

然而,尝试获取安全范围的书签以便稍后访问它并不起作用。

这是我正在做的:

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

我尝试过使用从字符串 path 生成的 url 和只是用 NSSavePanel 的 URL 结果来测试它。因为传统原因,我希望能够使用字符串 path.

我必须使用 bookmarkDataWithOptions 的值而不是常量,因为由于其他传统代码的原因,我被迫使用10.6 SDK进行编译,其中不存在 NSURLBookmarkCreationWithSecurityScope

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

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

无论如何,这不起作用。代码的结果是 bookmarkData 为 0x0,error 也为 0x0,并且控制台显示:ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.

如果我将 relativeToURL 更改为 url 而不是 nil 并更改授权为 com.apple.security.files.bookmarks.document-scope,那么它似乎可以正常工作——也就是说,bookmarkData 至少得到了一个非零值,并且不会记录任何错误。但我几乎可以肯定这不是我想要的(即文档范围书签)。

我做错了什么明显的事吗?

2个回答

10

我永远感到羞愧,这是我的错。

在将项目移动到另一台机器进行测试和调试时,开发版的代码签名被关闭了。

显然这会导致事情(几乎)悄无声息地失败,没有错误代码,控制台中只有一个神秘的消息,并且没有任何其他指示表明其他内容没有正常工作。

如果其他人错误地做同样的事情,可以留下此处。


我可以确认,未签名的构建会导致这种情况。对于任何在这里遇到问题的人,我正在调试开源的Mac Linux USB Loader,这解决了我的问题。 - Maen

0

大家好,2019年及以后的谷歌员工们。我遇到了同样的问题,并通过重新制作我的开发证书来解决它。只需取消“自动管理签名”,然后重新勾选(可能切换到不同的团队,再切换回来)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接