我的cocoa app设计是单个.app(UI)和三个XPC服务。
主应用需要文件只读以显示powerbox并在用户界面中显示所选路径
其中两个XPC服务需要文件只读
一个XPC服务需要文件读写
由于用户交互流程,主应用程序打开一个电源箱对话框,允许用户选择目录并在UI中显示。然后主应用程序将其保存为安全范围的书签。书签数据根据需要通过XPC连接发送,每个单独的XPC进程都会解析书签,以便在自己的沙箱中访问这些文件。
问题是,除非我将主应用程序(打开电源箱)设置为具有文件读写访问权限,否则即使其权利,需要写访问权限的XPC服务也不会获得它file指定文件读写访问。控制台中记录以下内容:
deny file-write-unlink <file path>
唯一能解决这个问题的方法是打开powerbox文件读写权利的主应用程序,或重新设计UI流程,以便需要写访问权限的进程显示电源箱?最终目标是让每个进程拥有尽可能少的权限。理想的权利是在主.app进程中没有文件访问权限,两个XPC服务具有文件只读和一个XPC服务文件读写。谢谢!
修改
Powerbox and File System Access Outside of Your Container:
OS X安全技术,与用户交互以进行扩展 你的沙盒叫做Powerbox。 Powerbox没有API。您的应用使用 使用NSOpenPanel和NSSavePanel时,Powerbox透明 类。
答案 0 :(得分:4)
我不是沙盒中的专家,但是,嘿,甚至不是那些写它的人。诚!
无论如何,在架构上,嵌入式XPC服务只允许包含应用程序的一个子集,如果确实发生了这种情况,那么它是有道理的。可以针对它进行争论,但争论的结果是系统和用户更容易理解应用程序可能会做什么,如果它必须在顶级声明一切,而较低级别(XPC)只是允许做多或少。
虽然尝试保持您的权利尽可能小是令人钦佩的,但在这种情况下,您确实打开了一个用于读写的文件,所以您不妨声明它。