我有一个简单的Cocoa图像预览应用程序.用户使用a选择文件NSOpenPanel,应用程序使用Quick Look API生成预览图像.
我想将预览生成移动到单独的XPC服务中.如果没有应用程序沙盒,一切正常,但在为父应用程序和XPC服务启用应用程序沙盒后,XPC服务将被拒绝对用户所选文件的读取权限.
允许父应用程序读取文件(因为它是通过NSOpenPanel选择的).
如何将用户选择的文件的"文件读取"权限从父应用程序传输到XPC进程,以便XPC进程可以读取文件以生成预览?
我的XPC服务通过其权利请求文件读取访问,我将以下密钥添加到XPC服务Info.plist,但这没有帮助:
JoinExistingSession = YES
Run Code Online (Sandbox Code Playgroud) 在我的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应用程序中.
我是可可节目的新手,并没有找到任何运气查找问题.
我究竟做错了什么?有人可以帮我从这里出去吗?