加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 创建安全范围书签的麻烦

发布时间:2020-12-16 05:49:46 所属栏目:百科 来源:网络整理
导读:我正在将我的Lion应用程序转换为使用App Sandbox.我试图利用10.7.3中引入的 security-scoped bookmarks功能来允许持久访问一个文件夹.下面的代码返回一个零书签,并产生以下日志消息:XPC无法查找作用域书签代理的Mach服务. 我将用户选择的文件访问权限设置为
我正在将我的Lion应用程序转换为使用App Sandbox.我试图利用10.7.3中引入的 security-scoped bookmarks功能来允许持久访问一个文件夹.下面的代码返回一个零书签,并产生以下日志消息:XPC无法查找作用域书签代理的Mach服务.

我将用户选择的文件访问权限设置为读/写访问,并且还尝试使用和不使用周围的..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);
}

更新(x3)

现在我已经开始工作了,我可以在上面的代码中验证对-startAccessingSecurityScopedResource-stopAccessingSecurityScopedResource的调用是不必要的,因为Powerbox在用户在NSOpenPanel中选择资源后,才允许访问资源.

如果您正在从另一个安全范围的URL创建书签,例如从在另一个应用程序会话中创建的应用范围的书签制作文档范围的书签,则需要首先访问该文件.

解决方法

事实证明,我缺少一个关键的权利,未列在UI中,但在 the documentation中列出:
com.apple.security.files.bookmarks.app-scope

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读