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

时间:2012-07-06 11:07:43

标签: cocoa sandbox appstore-sandbox xpc

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

我想将预览生成移动到单独的XPC服务中。没有应用程序沙箱,一切正常,但在为父应用程序和XPC服务启用应用程序沙箱后, XPC服务被拒绝对用户选择的文件进行读取访问

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

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

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

JoinExistingSession = YES

1 个答案:

答案 0 :(得分:10)

我不是100%肯定,但我认为Apple建议在这种情况下将NSFileHandle传递给XPC进程。这样,XPC进程可以访问文件的内容,但不需要知道文件的URL。

修改:This thread in the Apple Developer Forums很有帮助。建议为文件的URL创建一个普通(非安全范围)书签。然后可以将此书签传递给XPC进程并由其访问。