gpt4 book ai didi

macos - XPC 到 XPC 通信

转载 作者:行者123 更新时间:2023-12-02 20:52:59 25 4
gpt4 key购买 nike

我正在开发一个应用程序,其中我从主应用程序中分离出了两个不同的 XPC 服务。我希望 XPC 服务与其他 XPC 服务进行通信,其他 XPC 服务将进行一些处理并将数据返回到第一个服务,第一个服务将进行自己的处理,然后将数据返回到主应用程序。我什至尝试过这个,但服务之间的通信给出了“无法与帮助应用程序通信”的错误。

我的问题是这可能还是不可能?如果是的话需要什么?

如有任何帮助,我们将不胜感激。

最佳答案

是的,这是可能的,但并不明显。我断断续续地问了一年关于这个问题的问题,直到一位苹果工程师的模糊提示让我偶然发现了答案。

诀窍在于您需要将一个进程的 NSXPCListenerEndpoint 传输到另一个进程。然后,第二个进程可以使用该端点对象来创建与第一个进程的直接连接。问题是,虽然 NSXPCListenerEndpoint 符合 NSCoding 规范,但它只能通过现有的 XPC 连接进行编码,这使得这个问题听起来像是一个 catch-22(你可以'在创建连接之前不要传输端点,并且在拥有端点之前无法创建连接)。

解决方案(“技巧”)是您需要一个中间进程(我们称之为“基石”),该进程已经具有可以在其他两个进程之间交换端点的 XPC 连接。

在我的应用程序中,我最终创建了一个守护进程作为我的基石,但我认为您可以直接在应用程序中执行此操作。您需要执行以下操作:

  1. 创建一个包含两个 XPC 服务“A”和“B”的应用
  2. 在“A”中获取进程的监听器对象:获取自动创建的服务监听器 (listener = NSXPCListener.serviceListener) 或为第二个进程创建专用的匿名监听器(使用listener = NSXPCListener.anonymousListener)。
  3. 获取监听器的端点 (listener.endpoint)
  4. 应用程序应询问“A”其端点。
  5. 然后,应用程序可以启动“B”,并再次使用 XPC,将从“A”获得的端点传递到“B”。
  6. “B”现在可以使用从“A”(通过应用程序)获取的端点对象,通过 [[NSXPCConnection alloc] initWithListenerEndpoint:aEndpoint]] 创建与“A”的直接连接 .

关于macos - XPC 到 XPC 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com