Dov*_*Dov 12 macos objective-c nsopenpanel osx-lion appstore-sandbox
我正在将我的Lion应用程序转换为使用App Sandbox.我正在尝试使用10.7.3中引入的安全范围书签功能来允许对文件夹的持久访问.我下面的代码返回一个零书签,并生成以下日志消息:XPC couldn't look up the Mach service for scoped bookmarks agent.
我将User Selected File Access权利设置为Read/Write Access,并且在有和没有周围..AccessingSecurityScopedResource呼叫的情况下尝试.
我认为我根据文档做的一切正常,所以我很感激任何指针.在开始沙盒化应用程序之前,代码正在检索纯URL.
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setAllowsMultipleSelection:NO];
NSInteger result = [openPanel runModal];
if( result == NSFileHandlingPanelCancelButton ) {
return;
}
NSArray *urls = [openPanel URLs];
if( urls != nil && [urls count] == 1 ) {
NSURL *url = [urls objectAtIndex:0];
NSData *bookmark = nil;
NSError *error = nil;
bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil // Make it app-scoped
error:&error];
if (error) {
NSLog(@"Error creating bookmark for URL (%@): %@", url, error);
[NSApp presentError:error];
}
NSLog(@"bookmark: %@", bookmark);
}
Run Code Online (Sandbox Code Playgroud)
更新(x3)
现在我已经开始工作,我可以验证上面代码中的调用-startAccessingSecurityScopedResource和-stopAccessingSecurityScopedResource不必要,因为Powerbox在用户选择资源后授予对资源的访问权限NSOpenPanel.
如果您要从另一个安全范围的URL创建书签,例如从另一个应用程序会话中创建的应用程序范围的书签制作文档范围的书签,则需要首先访问该文件.
Dov*_*Dov 10
事实证明我错过了一个关键的权利,未在UI中列出,但在文档中列出:
com.apple.security.files.bookmarks.app-scope
Run Code Online (Sandbox Code Playgroud)
更新12/18/2018
根据这个Twitter帖子,可能不再需要此权利.谢谢@pkamb提醒我这个.
| 归档时间: |
|
| 查看次数: |
4777 次 |
| 最近记录: |