我在finder同步扩展程序中解析Security Scoped Bookmark时出现以下错误。
错误域= NSCocoaErrorDomain代码= 259"文件无法打开,因为它的格式不正确。"
也可能是相关的日志记录:
无法读取CFPrefsPlistSource中的值< 0x6080000ee380> (域:MyAppGroupName,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)):只允许使用带容器的kCFPreferencesAnyUser,系统容器,从cfprefsd分离
我正在使用以下代码在Container App中创建Security Scoped书签:
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSURL * theSelectedFolder = ....selected folder from NSOpenPanel....
NSData *bookmarkData = [theSelectedFolder bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope includingResourceValuesForKeys:nil relativeToURL:nil error:NULL];
[sharedDefaults setObject:bookmarkData forKey:@"BookmarkData"];
[sharedDefaults synchronize];
在Finder Sync Extension中,我使用以下代码:
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSData *bookmarkData = [sharedDefaults objectForKey:@"BookmarkData"];
BOOL bookmarkDataIsStale;
NSError *err;
NSURL *userSelectedUrl = [NSURL URLByResolvingBookmarkData:bookmarkData options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:&bookmarkDataIsStale error:&err];
我还添加了这个权利密钥:
Finder Sync Extension和Container app中的com.apple.security.files.bookmarks.app-scope
。
我是可可节目的新手,无法找到任何运气查找问题。
我做错了什么?任何人都可以帮助我吗?
答案 0 :(得分:0)
问题是您正在尝试在Finder扩展程序中解析书签数据。您需要在包含应用程序本身的情况下解析书签数据。
您可以扩展名为selected item urls
和targeted url
。
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSURL* target = [[FIFinderSyncController defaultController] targetedURL];
NSArray* items = [[FIFinderSyncController defaultController] selectedItemURLs];
答案 1 :(得分:0)
要保存只读书签数据,请使用位掩码[.withSecurityScope, .securityScopeAllowOnlyReadAccess]
; 不仅.securityScopeAllowOnlyReadAccess
。
.securityScopeAllowOnlyReadAccess
与
.withSecurityScope
选项结合使用时,指定您要创建一个安全范围内的书签,该书签在解析后会提供一个安全范围内的URL,从而允许对文件系统资源;可以在采用“应用沙箱”的应用中使用。
url.bookmarkData(options: [.withSecurityScope, .securityScopeAllowOnlyReadAccess], includingResourceValuesForKeys: nil, relativeTo: nil)
从主应用程序或扩展程序解析时,仅使用.securityScopeAllowOnlyReadAccess
会给我一个问题中提到的错误:
Error Domain = NSCocoaErrorDomain代码= 259“由于文件格式不正确,无法打开文件。”
答案 2 :(得分:0)
我收到了Apple开发人员技术支持的回复。发表在下面:
跟进:701518883
我对此进行了更多研究,所以让我在这里重新开始对话:
我需要在主Mac App及其Mac OS之间共享沙盒安全书签 FinderSync扩展。
这里的根本问题是,应用范围,安全范围的书签仅在创建它的应用中有效。剩下两个选择:
1)如果两个应用程序组件都同时运行,则可以将当前URL发送到另一个组件,后者可以创建并保存自己的应用程序范围,安全范围的书签。
2)如果这行不通,则另一种选择是创建文档作用域,安全作用域书签。
答案 3 :(得分:0)
您可以通过以下方式使用扩展程序中的书签:
url.bookmarkData(options: [.minimalBookmark], includingResourceValuesForKeys: nil, relativeTo: nil)
并将该书签保存到应用组用户默认设置中。