【问题标题】:Security scoped bookmark stopped working on Yosemite 10.10安全范围的书签在 Yosemite 10.10 上停止工作
【发布时间】:2014-11-04 10:59:24
【问题描述】:

我正在使用以下代码来生成安全范围的书签。这在 10.8 和 10.9 上运行良好,但在 10.10 上已停止运行。我不知道要检查什么?

 NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:NO];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:NO];
[panel setResolvesAliases:YES];
[panel setCanCreateDirectories:YES];
[panel setTitle:@"Choose a directory as your input folder"];
[panel setPrompt:@"Choose"];

NSInteger result = [panel runModal];

if (result == NSFileHandlingPanelOKButton){
    NSURL *urlPath = [[panel URLs] objectAtIndex:0];
    NSError *error = nil;
    NSData *bookmark = nil;
    bookmark = [urlPath bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                         includingResourceValuesForKeys:nil
                                          relativeToURL:nil 
                                                  error:&error];

    if (error) {
        [NSApp presentError:error];
    }

    BOOL bookmarkDataIsStale;
    NSURL *url = [NSURL URLByResolvingBookmarkData:     bookmark
                                           options:NSURLBookmarkResolutionWithSecurityScope
                                     relativeToURL:nil
                               bookmarkDataIsStale:&bookmarkDataIsStale                                                              error:nil];
}

我已启用 App Sandbox 权利并添加了 com.apple.security.files.user-selected.read-write 和 com.apple.security.files.bookmarks.app-scope 权利。

上面是生成一个 URL,但它不是安全范围的。因此,当记录它时,它是通常的文件路径,而不是以前发生的 ?然后是一堆字符。

感谢任何帮助或想法

【问题讨论】:

  • 我已经看到您在我自己的应用程序中描述的行为,但 URL 似乎仍然具有安全范围(它们可以授予对文件的访问权限)。您只是无法再在查询字符串中看到安全令牌。我在 Apple Dev Forums 上找到了这个帖子:devforums.apple.com/message/1059959
  • 这仍未解决,但似乎与您链接到的问题相同。非常感谢。
  • 我已经解决了这个问题。上面的代码用于使用 [[NSUserDefaults standardUserDefaults] setURL:url forKey:@"basePath"] 将安全范围的书签存储为 NSURL。这在 10.8 和 10.9 中运行良好,但在 10.10 中不再运行。如果我将书签数据保存为数据对象,然后根据需要检索它并转换为 NSURL,那么一切都会再次正常。
  • 您应该将其发布为答案,而不是评论,并接受它。另外,您现在在查询字符串中看到“applesecurityscope”参数了吗?因为我一直将书签存储为数据,而它们在 Yosemite 中为我消失了。
  • 谢谢 Dov,抱歉我是新手。我在 10.10 中也看不到 applesecurityscopeargument,但书签工作正常。

标签: objective-c appstore-sandbox security-scoped-bookmarks


【解决方案1】:

我已经解决了这个问题。上面的代码用于使用[[NSUserDefaults standardUserDefaults] setURL:url forKey:@"basePath"] 将安全范围的书签存储为NSURL。这在 10.8 和 10.9 中运行良好,但在 10.10 中不再运行。如果我将书签数据保存为数据对象,然后根据需要检索它并转换为 NSURL,那么一切都会再次正常工作。

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多