Objective c 助手应用程序沙盒和安全范围的书签

Objective c 助手应用程序沙盒和安全范围的书签,objective-c,appstore-sandbox,xpc,nsxpcconnection,Objective C,Appstore Sandbox,Xpc,Nsxpcconnection,所以我一直在用这个扯我的头发 我有一个主应用程序和一个助手应用程序。两者都是沙盒,并使用应用程序组共享数据。我通过NSXPCConnection与助手应用程序交谈。我已使用SMLoginItemSetEnabled将helper应用程序设置为登录项。当用户激活helper应用程序时,它将作为守护程序运行 这一切都很好。 问题在于安全范围的书签 助手应用程序需要访问系统文件。当我需要授予对新位置的访问权限时,这是由主应用程序通过NSXPCConnection完成的,方法是使用以下类打开帮助程序并打

所以我一直在用这个扯我的头发

我有一个主应用程序和一个助手应用程序。两者都是沙盒,并使用应用程序组共享数据。我通过NSXPCConnection与助手应用程序交谈。我已使用SMLoginItemSetEnabled将helper应用程序设置为登录项。当用户激活helper应用程序时,它将作为守护程序运行

这一切都很好。 问题在于安全范围的书签

助手应用程序需要访问系统文件。当我需要授予对新位置的访问权限时,这是由主应用程序通过NSXPCConnection完成的,方法是使用以下类打开帮助程序并打开NSOpenPanel:() 这一切似乎都起作用了

该类告诉我文件访问权已被授予,但我在控制台中也收到一个沙盒冲突

Sandbox: com.my.app.helper deny file-read-data
我在helper应用程序中拥有正确的权限:

com.apple.security.files.user-selected.read-write
com.apple.security.files.bookmarks.app-scope
我还看到有人在后台线程上访问书签时遇到问题,因此我尝试将所有与书签相关的调用包装到:

dispatch_sync(dispatch_get_main_queue(), ^{ });
还是没有快乐。 非常感谢您的帮助

**沙箱真是一场噩梦。。。。 我的应用程序所做的就是在没有用户干预的情况下删除一些系统文件。
这么简单的任务之前的沙箱。。。。现在我需要处理loginItems,XPC。。。。这么多头疼的事(

我在我的应用程序中有一个类似的任务,并为我解决了它。你基本上让父应用程序解析书签并访问其安全范围,然后将一个普通NSURL传递给XPC服务。我让我的XPC服务调用一个完成块,该块停止访问安全范围。答案中的Apple Dev Forum链接给出了一个mo重新详细解释。

我的问题实际上要简单得多。。。。 我对书签的所有调用都是这样包装的:

dispatch_sync(dispatch_get_main_queue(), ^{ });
一旦我从主调度块中删除呼叫并将其移动到调度队列中,一切都开始工作了吗? 我不知道为什么,但是我非常高兴它现在能工作

dispatch_queue_t queue = dispatch_queue_create(WorkerQueue, NULL);
dispatch_sync(queue, ^{ });

此外,我仍然会收到拒绝消息,但我的应用程序确实可以完全访问这些文件。。。。