相关疑难解决方法(0)

App沙箱:如何让XPC服务读取用户在父应用中打开的文件?

我有一个简单的Cocoa图像预览应用程序.用户使用a选择文件NSOpenPanel,应用程序使用Quick Look API生成预览图像.

我想将预览生成移动到单独的XPC服务中.如果没有应用程序沙盒,一切正常,但在为父应用程序和XPC服务启用应用程序沙盒后,XPC服务将被拒绝对用户所选文件的读取权限.

允许父应用程序读取文件(因为它是通过NSOpenPanel选择的).

如何将用户选择的文件的"文件读取"权限从父应用程序传输到XPC进程,以便XPC进程可以读取文件以生成预览?

我的XPC服务通过其权利请求文件读取访问,我将以下密钥添加到XPC服务Info.plist,但这没有帮助:

JoinExistingSession = YES
Run Code Online (Sandbox Code Playgroud)

cocoa xpc sandbox appstore-sandbox

10
推荐指数
1
解决办法
2658
查看次数

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

在我的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应用程序中.

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

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

macos objective-c findersync

7
推荐指数
1
解决办法
380
查看次数

标签 统计

appstore-sandbox ×1

cocoa ×1

findersync ×1

macos ×1

objective-c ×1

sandbox ×1

xpc ×1