安全范围书签停止在Yosemite 10.10上工作

时间:2014-11-04 10:59:25

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

我使用以下代码生成安全范围的书签。这在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,但它不是安全范围的。因此,当记录时,它是通常的文件路径,而不是之前发生的?然后是大堆的人物。

感谢任何帮助或想法

1 个答案:

答案 0 :(得分:2)

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