应用程序沙箱:如何让用户在父应用程序打开XPC服务读取文件?(App sandbox: how to

2019-06-26 02:01发布

我有一个简单的可可图像预览应用程序。 用户选择使用一个文件NSOpenPanel和应用程序使用快速查找API生成的预览图像。

我想预览代移动到一个单独的XPC服务。 如果没有应用程序沙箱一切工作正常,但使应用程序沙箱父应用程序和服务XPC后, 将XPC服务被拒绝读取访问用户选择的文件

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

如何从父应用转移的“文件读取”权限的用户选择的文件到XPC过程,使得XPC过程可以读取生成预览文件?

我的XPC服务通过其权利要求的文件读访问,我添加了以下关键XPC服务的Info.plist,但没有帮助:

JoinExistingSession = YES

Answer 1:

我不是100%肯定,但我认为苹果建议传递一个NSFileHandle的XPC过程在这种情况下。 这样一来,XPC过程可以访问该文件的内容,但并不需要知道该文件的URL。

编辑: 此线程在苹果开发者论坛是有帮助的。 该建议是建立一个正常的(不是安全范围的)书签文件的URL。 然后,该书签可以被传递到XPC过程,并通过它访问。



文章来源: App sandbox: how to allow XPC service to read file that user opened in parent app?