你可以在插件中运行 XPC 服务吗? (例如,打印对话框扩展插件)

Posted

技术标签:

【中文标题】你可以在插件中运行 XPC 服务吗? (例如,打印对话框扩展插件)【英文标题】:Can you run an XPC service inside a plugin? (e.g. a Print Dialog Extension plugin) 【发布时间】:2013-04-08 07:43:22 【问题描述】:

我正在创建一个打印对话框扩展 (PDE) 插件。 当用户从不同的应用程序打印时调用并显示此插件, 例如TextEdit、Preview、Xcode 等。请注意,插件运行在调用打印插件的应用程序之上(例如,TextEdit)。

在插件内部,我需要运行 XPC 服务。我需要 XPC 服务,因为主应用程序上的权利可能不足以满足我的需求,例如我需要连接到网络,而 TextEdit 没有网络连接所需的权利。

问题是,我无法创建 XPC 连接。处理程序总是以 XPC_ERROR_CONNECTION_INVALID 触发。

1.) 这是因为 PDE 插件不在主包/主应用程序中,例如文字编辑? 2.) 如果是,我怎样才能在 PDE 插件中运行 XPC 服务? 3.) 如果没有,那为什么我不能成功创建 XPC 连接?

【问题讨论】:

我看到你几个月前问过这个问题,从那以后你有什么发现吗?你让它工作了吗? 请看我的回答。 【参考方案1】:

我没有设法让 XPC 在 PDE 插件中工作。

XPC 包必须位于主应用程序包的 Contents/XPCServices 目录中,但在我的情况下,主应用程序包会有所不同 - 取决于打开 PDE 插件的应用程序,例如文本编辑或预览。将 XPC 包放入 PDE 包中不起作用。

由于这个限制,我重新设计了 PDE 插件内部的操作流程。它现在调用外部应用程序(独立)来执行需要网络连接的操作。

【讨论】:

以上是关于你可以在插件中运行 XPC 服务吗? (例如,打印对话框扩展插件)的主要内容,如果未能解决你的问题,请参考以下文章

线程和 XPC

我可以更改 XPC 服务的服务质量级别吗?

XPC 客户端等待服务加载

macOS:在用户退出主应用程序后保持 XPC 服务(捆绑)运行

XPC 没有为 XPC 服务创建任何进程

通过 XPC 或 MACH 在 OSX 上启动服务