【问题标题】:Calling an embedded XPCService from external App从外部 App 调用嵌入式 XPCService
【发布时间】:2018-05-17 07:11:03
【问题描述】:

我有两个独立的应用程序(可可),一个是主应用程序,另一个是从属应用程序。

主应用程序嵌入了一个 XPCService,当应用程序打开时它会正确启动。到目前为止,与该服务连接和交换数据没有问题(我还在活动监视器中看到了这个 XPCService)。

但我希望其他从属应用程序在主应用程序启动后连接并发送数据到该 XPC 服务(然后到主第一个应用程序)。 使用 NSXPCConnection(带有 initWithMachServiceName),并且正确的服务包标识符不起作用:没有调用 NewConnection 委托,因此从属应用程序永远不会到达服务。

我错过了什么? NSXPCConnection 可以实现我想要的吗? 是因为我需要以某种方式共享 XPCService(在 plist 中)吗?那我该怎么办呢?

我找不到有关此排序连接的任何信息! 非常感谢您的帮助!

【问题讨论】:

    标签: macos


    【解决方案1】:

    “我有两个独立的应用程序”

    Apple's Documentation for XPC中所述:

    XPC 服务是私有的,仅对包含它的主应用程序可用。

    为了安全起见,对包含 XPC 助手应用程序的应用程序进行签名,以确保仅允许主应用程序调用其助手程序。

    但是,应该注意的是文档中还声明了

    连接是一个虚拟端点;它与服务二进制文件的实际实例是否正在运行无关。服务二进制文件按需启动。

    连接也可以作为 XPC 消息中的一条数据发送。因此,您可以通过 XPC 传递连接以允许一个服务与另一个服务进行通信(例如)。

    虽然我在实践中没有看到这一点,但这确实意味着您可以启动从主应用程序到 XPC 帮助程序的连接,并将此连接发送到您的“从属”应用程序。

    【讨论】:

    • 谢谢。我会检查的。我现在完全理解为什么不能直接从外部应用程序访问嵌入式服务。我还将尝试通过一个独立的项目(未嵌入到应用程序中)创建此服务,并将返回这里查看结果。
    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多