在Finder Sync Extension中使用Security Scoped Bookmark与App Group UserDefaults

Ani*_*lik 7 macos objective-c findersync

在我的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];
Run Code Online (Sandbox Code Playgroud)

在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];
Run Code Online (Sandbox Code Playgroud)

我还添加了此权利密钥: com.apple.security.files.bookmarks.app-scope在Finder Sync Extension和Container应用程序中.

我是可可节目的新手,并没有找到任何运气查找问题.

我究竟做错了什么?有人可以帮我从这里出去吗?

小智 0

问题是您正在尝试解析查找器扩展中的书签数据。您需要解析包含应用程序本身的书签数据。

你可以得到selected item urlstargeted url延伸。

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.mycomp.xyz"];
NSURL* target = [[FIFinderSyncController defaultController] targetedURL];
NSArray* items = [[FIFinderSyncController defaultController] selectedItemURLs];
Run Code Online (Sandbox Code Playgroud)