我一直在搜索网络,Apple对此提供了一些帮助,并且提供了一些指导。我想知道是否有人遇到过类似的情况,或者可能对某些事情(或者没有)有所了解。无法获取适用于文件的应用程序书签 - OS X沙箱
我正试图获得应用程序在后面的会话中调用的文件的应用程序范围的书签。我可以确认路径本身已被用户选择后正确添加到沙箱中,因为我可以在会话期间打开(并重新打开它)。
但是,试图获取安全范围的书签以后访问它不起作用。
下面是我在做什么:
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
。
无论如何,这是行不通的。在这两个代码结果为0x0的bookmarkData
和为0x0的error
,并在控制台显示:ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.
如果我改变relativeToURL
为url
,而不是nil
,改变有权com.apple.security.files.bookmarks.document-scope
,那么似乎正常工作 - 这是,bookmarkData
至少获得一个非零值,并没有记录错误。但我非常确定这不是我想要的(即文档范围书签)。
有什么明显的我做错了吗?
那么,我可以确认一个未签名的版本会导致这种情况。对于任何人在这里磕磕绊绊,我正在调试开源[Mac Linux的USB加载器](https://github.com/SevenBits/Mac-Linux-USB-Loader),这解决了我的问题。 – Bigood