2014-11-04 107 views
2

我正在使用以下代码来生成安全范围的书签。这在10.8和10.9上运行正常,但在10.10停止工作。我不知道要检查什么?安全范围书签在优胜美地停止工作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]; 
} 

我已经启用了应用程序沙箱的权利,并且增加了com.apple.security.files.user-selected.read写入和com.apple.security.files.bookmarks.app范围的权利。

以上是生成的URL,但它不是安全范围。所以当它被记录时它是通常的文件路径,而不是以前发生的?然后再堆积字符。

任何帮助或意见赞赏

+0

我已经看到你在我自己的应用程序中描述的行为,但这些URL仍然具有安全范围(他们可以授予对该文件的访问权限)。您再也看不到查询字符串中的安全令牌。我在Apple Dev论坛上发现了这个主题:https://devforums.apple.com/message/1059959 – Dov 2014-11-07 18:43:35

+0

这仍然没有解决,但似乎与您链接到的问题相同。非常感谢。 – 2014-11-19 11:48:03

+0

我已经解决了这个问题。上述代码用于使用[[NSUserDefaults standardUserDefaults] setURL:url forKey:@“basePath”]将安全范围书签存储为NSURL。这在10.8和10.9中运行正常,但不再在10.10中运行。如果我将书签数据保存为数据对象,然后根据需要检索它并将其转换为NSURL,则所有工作都会正常工作。 – 2014-11-21 10:57:07

回答

2

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

相关问题