macos - 从外部 App 调用嵌入式 XPCService
问题描述
我有两个独立的应用程序(可可),一个是主应用程序,另一个是从属应用程序。
主应用程序应用程序嵌入了一个 XPCService,该服务在应用程序打开时正确启动。到目前为止,与该服务连接和交换数据没有问题(我还在活动监视器中看到了这个 XPCService)。
但我希望其他从属应用程序在主应用程序启动后连接并发送数据到该 XPC 服务(然后发送到主第一个应用程序)。使用 NSXPCConnection(带有 initWithMachServiceName),并且正确的服务包标识符不起作用:没有调用 NewConnection 委托,因此从属应用程序永远不会到达服务。
我错过了什么?NSXPCConnection 可以实现我想要的吗?是因为我需要以某种方式共享 XPCService(在 plist 中)吗?在那种情况下我该怎么办?
我找不到有关这种排序连接的任何信息!非常感谢你的帮助 !
解决方案
“我有两个独立的应用程序”
正如Apple 的 XPC 文档中所述:
XPC 服务是私有的,仅对包含它的主应用程序可用。
为安全起见,包含 XPC 助手应用程序的应用程序会被签名,以确保仅允许主应用程序调用其助手。
但是,应该注意的是,文档还指出
连接是一个虚拟端点;它与服务二进制文件的实际实例是否正在运行无关。服务二进制文件按需启动。
连接也可以作为 XPC 消息中的一条数据发送。因此,您可以通过 XPC 传递连接以允许一个服务与另一个服务进行通信(例如)。
虽然我在实践中没有看到这一点,但这确实意味着您可以启动从主应用程序到 XPC 助手的连接,并将此连接发送到您的“从属”应用程序。
推荐阅读
- c - Scanf 只会在 For 循环中扫描一次
- sql - 如何不选择某些列相同而一列不同的行?
- java - 无法将类型化集合作为方法参数传递
- user-interface - 我被困在我的 GUI [wxpython] 中使用绝对定位
- javascript - 为什么 DIV 认为 Element 是字符串?
- json - Bash 创建 JSON 文件清单
- view - Windows 10 快速访问 将默认视图更改为详细信息
- css - 到底为什么底部 0 在这里不起作用?
- cucumber - 对黄瓜使用 SoftAssertion
- java - 当我用 sbt 运行 play 框架时出现一些错误