首页 > 解决方案 > 如何将可可应用程序嵌入另一个可可应用程序并将其作为子进程启动

问题描述

我想在另一个应用程序 B 中嵌入一个应用程序 A。当应用程序 A 启动时,它应该充当一个包装器并在内部启动应用程序 B,而不在 docbar 中显示应用程序 B。应用程序 A 的目的只是一个包装器,它应该做一些初始化启动 App B,具体取决于它的启动位置

标签: swiftmacoscocoamacos-mojave

解决方案


在您的项目中,使用单独的目标构建两个应用程序。

在 App A > Target > Build Phases 中:

  • 将应用 B 添加到Target Dependancies
  • 将 App B 的产品添加到Copy Bundle Resources阶段。

现在,当您构建 App A 时,Xcode 将构建 App B 并将完成的 App B 复制到ResourcesApp A 的 bundle 文件夹中。

你没有解释你为什么要这样做,所以这里有一些想法可以帮助你开始......

选项 A:

使用NSBundle该类来定位嵌入式 App B 并以您认为合适的方式启动它(直接,使用launchd等)。

如果您不希望 App B 显示在 Dock 中或有菜单栏,则需要LSUIPresentationMode在应用程序中设置或以编程方式Info.plist调整应用程序的属性。activationPolicy

选项 B:

考虑创建 XPC 服务。XPC 服务是一种特殊的嵌入式可执行文件,macOS 将在您需要时为您启动它并为您设置 XPC 连接,以便您可以与它交谈并工作。

请参阅创建 XPC 服务

XPC 还具有一些功能,因此不露面的(非应用程序)助手进程可以在您的应用程序中显示 UI。(这就是 Safari 的工作方式;每个页面都由一个单独的辅助进程处理,使用 XPC 来控制页面并将其呈现在 Safari 窗口中。)


推荐阅读