如何将 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 连接,以便您可以与其交谈和工作。

Creating XPC Services

XPC 也有一些设施,这样一个不露面的 (non-app) 辅助进程可以有一个 UI 出现在你的应用程序中。 (这是 Safari 的工作方式;每个页面都由一个单独的辅助进程处理,使用 XPC 控制页面并将其呈现在 Safari window。)