我想在 Mac 上的 Sandbox 中通过 LSOpenApplication() 启动另一个自己的应用程序。
当然,我在启动授权文件的“com.apple.security.temporary-exception.files.absolute-path.read-write”中添加了一行。
但是,启动时,控制台抛出错误,不允许进程 xxxx 启动“foo.app”,因为用户之前尚未启动它。 手动启动一次进程后即可正常启动。
即使之前没有启动过,如何启动该进程? 这和沙箱没有关系吗?
最佳答案
在极少数情况下,您能够启动另一个应用程序并获得所需的结果。 com.apple.security.temporary-exception.files.absolute-path.read-write 不会为您带来任何与 LaunchServices 相关的信息,因此您可以删除该权利。
作为沙盒应用程序,您实际上可以子启动的内容相当有限,这是一种故意行为,因为启动另一个应用程序在技术上违反了沙盒模型。您可以选择的方式有:
- 在您的应用程序中包含 XPC 服务并已为您启动
- 您可以通过 NSTask 运行应用程序,这将导致该应用程序在启动时继承您的沙箱
- 您可以按名称启动应用程序,但据我所知,这通常仅在应用程序位于您的/Applications 文件夹中时才有效,即 -[NSWorkspace launchApplication:]
- 您可以启动包含您的应用程序的应用程序,但前提是您已启用 SMLoginItemSetEnabled()
我想说 osascript 调用有效,因为它的功能与 -[NSWorkspace launchApplication:] 大致相同。接受包标识符或绝对/相对路径的 LS 调用都不会起作用。
关于macos - 如何在Mac上的沙箱中启动另一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12594380/