And*_*rew 3 macos cocoa xpc entitlements appstore-sandbox
我的可可应用程序设计是单个 .app(UI)和三个 XPC 服务。
主应用程序需要文件只读才能显示电源箱并在 UI 中显示所选路径
两个 XPC 服务需要文件只读
一项 XPC 服务需要文件读写
由于用户交互的流程,主应用程序会打开一个 powerbox 对话框,以允许用户选择目录并将其显示在 UI 中。然后主应用程序将其保存为安全范围的书签。书签数据根据需要通过 XPC 连接发送,每个单独的 XPC 进程解析书签以访问其自己沙箱中的这些文件。
问题是,除非我将主应用程序(打开 powerbox)设置为具有文件读写访问权限,否则需要写访问权限的 XPC 服务将无法获得它,即使其权利文件指定了文件读写访问权限。以下记录在控制台中:
deny file-write-unlink <file path>
Run Code Online (Sandbox Code Playgroud)
是否唯一的方法是为打开 powerbox 文件的主应用程序提供读写权限,或者重新设计 UI 流程以便需要写访问权限的进程显示 powerbox?最终目标是让每个进程拥有尽可能少的权限。理想的权利是在主 .app 进程中没有文件访问权限,两个 XPC 服务具有文件只读和一个 XPC 服务文件读写。谢谢!
编辑:
与用户交互以扩展您的沙箱的 OS X 安全技术称为 Powerbox。Powerbox 没有 API。当您使用 NSOpenPanel 和 NSSavePanel 类时,您的应用程序会透明地使用 Powerbox。
我不是沙盒方面的专家,但是,嘿,即使是编写它的人也不是。赞!
无论如何,嵌入式 XPC 服务在架构上只允许包含应用程序的一个子集是有意义的,如果确实发生了这种情况。可以提出反对它的论点,但支持的论点是,如果应用程序必须在顶级声明一切,那么系统和用户更容易理解应用程序可能会做什么,而较低级别 (XPC) 只是允许做或多或少。
虽然尝试使您的权利尽可能小是令人钦佩的,但在这种情况下,您实际上是打开一个文件进行读取和写入,因此您不妨声明它。
| 归档时间: |
|
| 查看次数: |
1965 次 |
| 最近记录: |