objective-c - 帮助应用程序沙箱和安全范围书签

标签 objective-c appstore-sandbox xpc nsxpcconnection

所以我一直在为此抓狂......

我有一个主应用程序和一个辅助应用程序。两者都处于沙盒状态,并使用应用程序组共享数据。我通过 NSXPCConnection 与帮助程序应用程序进行通信。我使用 SMLoginItemSetEnabled 将帮助程序应用程序设置为登录项。当用户激活帮助程序应用程序时,该应用程序将作为守护程序运行。

这一切都运作良好。 问题出在安全范围的书签上。

帮助应用程序需要访问系统文件。当我需要授予对新位置的访问权限时,这是由主应用程序通过 NSXPCConnection 打开帮助程序并使用此类打开 NSOpenPanel 来完成的:( https://github.com/leighmcculloch/AppSandboxFileAccess ) 这一切似乎也有效......

该类告诉我文件访问权限已被授予,但我还在控制台中收到沙盒违规。

Sandbox: com.my.app.helper deny file-read-data

我在助手应用程序中拥有正确的权利:

com.apple.security.files.user-selected.read-write
com.apple.security.files.bookmarks.app-scope

我还读到有人在后台线程上访问书签时遇到问题,因此我尝试将与书签相关的所有调用包装在:

dispatch_sync(dispatch_get_main_queue(), ^{ });

还是没有喜悦。 非常感谢任何帮助。

**沙箱是真正的噩梦...... 我的应用程序所做的只是删除一些系统文件,无需用户干预。 在沙箱之前这是一个简单的任务......现在我需要处理loginItems,XPC......这么多令人头痛的事情。 :(

最佳答案

我的应用程序中有类似的任务,并且 this answer为我解决了。您本质上是让父应用程序解析书签并访问其安全范围,然后将纯 NSURL 传递给 XPC 服务。我让我的 XPC 服务调用依次调用一个完成 block 来停止访问安全范围。该答案中的 Apple Dev Forum 链接提供了更详细的解释。

关于objective-c - 帮助应用程序沙箱和安全范围书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27288760/

相关文章:

ios - 有没有办法记录对给定类的每个方法的每次调用?

iOS 粘贴板奇怪的随机崩溃

objective-c - 重复使用 Apple Sandbox 安全范围的书签

swift - 验证是否安装了帮助工具

swift - 从 XPC 服务创建 NSXPCConnection

iphone - 在 iPhone 的 TextView 中显示数组值

ios - 如何将属性添加到使用数据模型创建的核心数据类?

ios - 如何确保只显示来自 Rest api 的更新数据

objective-c - 如何为 IOKit 属性设置临时权利?

objective-c - cocoa 沙盒应用程序 : Spawn FFMPEG