如何将 cocoa 应用程序嵌入另一个 cocoa 应用程序并将其作为子进程启动
How to embed a cocoa app in another cocoa app and launch it as a subprocess
我想在另一个应用程序 B 中嵌入一个应用程序 A。当应用程序 A 启动时,它应该充当包装器并在内部启动应用程序 B 而不会在应用程序 A 的 docbar.Purpose 中显示应用程序 B 只是一个包装器,它应该做一些初始化来启动应用程序 B,这取决于它从哪里启动
在您的项目中,使用不同的目标构建这两个应用程序。
在应用程序 A > 目标 > 构建阶段中:
- 将应用程序 B 添加到
Target Dependancies
- 将应用程序 B 的产品添加到
Copy Bundle Resources
阶段。
现在当您构建应用程序 A 时,Xcode 将构建应用程序 B 并将完成的应用程序 B 复制到应用程序 A 的捆绑包的 Resources
文件夹中。
你没有解释为什么你想这样做,所以这里有一些想法可以帮助你开始...
选项A:
使用 NSBundle
class 找到嵌入式应用程序 B 并以您认为合适的方式启动它(直接,使用 launchd
,等等)。
如果您不希望应用程序 B 出现在 Dock 中或有菜单栏,您需要在应用程序的 Info.plist
中设置 LSUIPresentationMode
或调整应用程序的 activationPolicy
属性 以编程方式。
选项 B:
考虑创建一个 XPC 服务。 XPC 服务是一种特殊的嵌入式可执行文件,macOS 会在您需要时为您启动它,并为您设置 XPC 连接,以便您可以与其交谈和工作。
XPC 也有一些设施,这样一个不露面的 (non-app) 辅助进程可以有一个 UI 出现在你的应用程序中。 (这是 Safari 的工作方式;每个页面都由一个单独的辅助进程处理,使用 XPC 控制页面并将其呈现在 Safari window。)
我想在另一个应用程序 B 中嵌入一个应用程序 A。当应用程序 A 启动时,它应该充当包装器并在内部启动应用程序 B 而不会在应用程序 A 的 docbar.Purpose 中显示应用程序 B 只是一个包装器,它应该做一些初始化来启动应用程序 B,这取决于它从哪里启动
在您的项目中,使用不同的目标构建这两个应用程序。
在应用程序 A > 目标 > 构建阶段中:
- 将应用程序 B 添加到
Target Dependancies
- 将应用程序 B 的产品添加到
Copy Bundle Resources
阶段。
现在当您构建应用程序 A 时,Xcode 将构建应用程序 B 并将完成的应用程序 B 复制到应用程序 A 的捆绑包的 Resources
文件夹中。
你没有解释为什么你想这样做,所以这里有一些想法可以帮助你开始...
选项A:
使用 NSBundle
class 找到嵌入式应用程序 B 并以您认为合适的方式启动它(直接,使用 launchd
,等等)。
如果您不希望应用程序 B 出现在 Dock 中或有菜单栏,您需要在应用程序的 Info.plist
中设置 LSUIPresentationMode
或调整应用程序的 activationPolicy
属性 以编程方式。
选项 B:
考虑创建一个 XPC 服务。 XPC 服务是一种特殊的嵌入式可执行文件,macOS 会在您需要时为您启动它,并为您设置 XPC 连接,以便您可以与其交谈和工作。
XPC 也有一些设施,这样一个不露面的 (non-app) 辅助进程可以有一个 UI 出现在你的应用程序中。 (这是 Safari 的工作方式;每个页面都由一个单独的辅助进程处理,使用 XPC 控制页面并将其呈现在 Safari window。)