swift - 如何将可可应用程序嵌入另一个可可应用程序并将其作为子进程启动
问题描述
我想在另一个应用程序 B 中嵌入一个应用程序 A。当应用程序 A 启动时,它应该充当一个包装器并在内部启动应用程序 B,而不在 docbar 中显示应用程序 B。应用程序 A 的目的只是一个包装器,它应该做一些初始化启动 App B,具体取决于它的启动位置
解决方案
在您的项目中,使用单独的目标构建两个应用程序。
在 App A > Target > Build Phases 中:
- 将应用 B 添加到
Target Dependancies
- 将 App B 的产品添加到
Copy Bundle Resources
阶段。
现在,当您构建 App A 时,Xcode 将构建 App B 并将完成的 App B 复制到Resources
App 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 窗口中。)
推荐阅读
- angular6 - 当我点击外部模式弹出(对话框)时,背景(父表单)应该是可编辑的
- java - Java 8 流 - 按最大重复次数降序排序
- java - 如果 Android API 级别低于 26,如何将存储访问框架与 MediaMuxer 一起使用
- python - “Doc2Vec”对象没有属性“get_latest_training_loss”
- python - sklearn - 为什么gridsearch cv参数的分数比默认值差?
- python - 如何通过烧瓶检查 db sqlite 中的布尔值是否为真
- excel - 有没有办法使用字符串引用范围变量?
- java - Spring`RestController`方法注释`@Transactional`,但是“当前没有事务处于活动状态”?
- python-3.x - Google App Engine 上的 run_local_server() 不起作用(errno98 地址已在使用中)
- javascript - 如何正确访问和输出 API 对象和数组数据?