问题标签 [xpc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1602 浏览

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

我想知道第三方开发人员是否有办法通过 XPC 或 Mach 与启动代理和守护进程进行交互。我的理解是第三方必须知道 XPC 的字典格式或有权访问 Mach 的 .defs 文件。这些是否可用于预安装的启动服务?如果没有,那么还有其他方式可以通过代码与服务交互吗?

0 投票
1 回答
961 浏览

cocoa - NSXPCConnection 或 XPCKit

为 Mac 实现 XPC 客户端和服务有两种选择(或者至少我知道两种)。NSXPCConnection 是在 10.8 和XPCKit中引入的。我应该使用什么来实现驻留在菜单栏中并使用 XPC 从主应用程序读取数据的帮助应用程序。

我看到的主要区别是XPCKit它将在 10.7 Lion 中工作,而NSXPCConnection仅在 10.8 Mountain Lion 中可用。在它们之间进行选择时,我还应该考虑什么。对于使用这两种方法的开发人员的回复,我将不胜感激。

PS 我的应用程序仍然可以在 10.7 中运行,但是根据我以前的经验,在发布后 2-3 个月内需要最新版本的 OS X 不是问题。

0 投票
3 回答
2167 浏览

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

我正在尝试创建 XPC 服务,但似乎没有创建该服务。在我的服务的主要方法中,我做的第一件事是调用 syslog,以便我可以查看服务是否开始运行。这些日志消息永远不会出现在日志中。

我检查了所有包标识符、可执行文件名称和包层次结构,但似乎仍然没有创建服务。在应用程序中,当我通过 XPC 服务连接创建并发送消息后,立即调用我的事件处理程序并出现 XPC_ERROR_CONNECTION_INVALID 错误。我正在使用基于 C 的 XPC API。

还有什么我可以尝试做的以确保至少创建 XPC 服务吗?

0 投票
0 回答
941 浏览

launchd - 终止 Launchd-launched Privileged Helper

我的应用程序 (Cocoa) 包含一个特权帮助工具 (C),该工具使用 安装SMJobBless,模仿 Nathan de Vries 的SMJobBlessXPC 示例代码。它在尝试连接到其导出的 Mach XPC 连接时成功启动。到目前为止,一切都很好。

我不知道以后如何终止该过程。当我的应用程序终止时,辅助工具不再运行任何业务——事实上,它明确地不应该再运行了。不过,我一生都无法弄清楚如何退出它。

从处理程序调用exit(0)XPC 事件似乎没有效果,可能是因为exit终止当前线程的文档状态,而不是进程。我的main功能如下所示:

我知道dispatch_main永远不会返回,所以这可能与它有关,但必须有一些方法可以让进程正常退出。我需要切换到使用CFRunLoop吗?

作为推论,我如何确保该过程不会过早终止?辅助工具或主应用程序都将准确地知道终止的正确时间。一旦作业开始,它会继续运行直到终止吗?我对 launchd 的生命周期管理有点模糊,而且它在launchd.plist(5).

0 投票
5 回答
3504 浏览

objective-c - 运行同一个 XPC 服务的多个实例 (NSXPCConnection)

是否可以使用 Foundation.framework (NSXPCConnection等) 中的 XPC API 运行同一 XPC 服务的多个实例?文档没有提供关于这个问题的太多见解。

编辑:做了一个快速测试,似乎只有一个服务实例在运行,即使我创建了两个 XPC 连接。有没有办法让它运行另一个实例?

0 投票
1 回答
1477 浏览

objective-c - 通过 NSXPCConnection 传递 xpc_object_t

我是 XPC 服务编程的新手,我正在尝试将在 XPC 服务中创建的 IOSurface 共享给主机应用程序。我可以使用 NSXPCConnection API 设置一个简单的主机和服务,现在我想我应该使用这两种方法(在IOSurfaceAPI.h中找到)将 IOSurface 传递给主机:

有没有办法可以使用 NSXPCConnection API 传递 xpc_object_t,还是应该使用 C API(如 xpc.h 中定义)?

0 投票
1 回答
907 浏览

objective-c - 混合 NSXPCConnection 和 xpc C API

我正在使用NSXPCConnection包装器处理 XPC 服务,并且由于 Objective-C 包装器无法处理IOSurfaceRef对象,我想对 xpc.h 中定义的 C API 进行一些直接函数调用。但是我找不到检索底层xpc_connection_t引用的方法(正如我在 NSXPCConnection.h 中看到的,有一个名为的私有 ivar_xconnection可能是我需要的引用)。我是否遗漏了一些愚蠢的东西,或者不能简单地将 Objective-C 包装器和 C API 一起使用?

0 投票
1 回答
247 浏览

macos - XPC 是否需要 MAS 沙盒

我有一个沙盒应用程序。

此应用程序具有未沙盒化的 XPC 服务。

XPC 服务是否也需要经过沙盒处理才能提交到 Mac App Store?

0 投票
2 回答
1013 浏览

xcode - 与多个包共享框架的单个副本

我有一个在我的应用程序中使用的框架,以及包含在应用程序包中的一些 XPC 服务。如何将所有捆绑包链接到应用程序的 Frameworks 文件夹中包含的框架的单个副本(而不是将框架复制到每个捆绑包)?所有的服务和应用程序都是沙盒的,所以我不确定 XPC 服务是否能够访问主应用程序包中的框架,因为它会在沙盒之外。

0 投票
1 回答
5848 浏览

objective-c - NSXPCConnection 通过代理传递对象

Daemons and Services Programming Guides告诉我们可以通过打开的 XPC 连接返回代理对象,甚至作为回复块参数。

通过代理传递对象

大多数时候,复制对象并将它们发送到连接的另一端是有意义的。然而,这并不总是可取的。尤其:

如果您需要在客户端应用程序和助手之间共享数据的单个实例,则必须通过代理传递对象。如果一个对象需要调用应用程序中其他对象上的方法,而这些方法您不能或不希望通过连接传递(例如用户界面对象),那么您必须通过代理传递一个对象——调用者、被调用者(其中可能),或者您专门为此目的构建的中继对象。通过代理传递对象的缺点是性能显着降低(因为对对象的每次访问都需要进程间通信)。因此,如果无法通过复制传递对象,则应仅通过代理传递对象。

您可以配置其他代理对象,类似于配置初始连接的 remoteObjectInterface 属性的方式。首先,确定应该由代理传递方法的哪个参数,然后指定一个 NSXPCInterface 对象,该对象定义该对象的接口。

第一个问题来了:代理传递的对象应该如何定义?作为符合 NSXPCProxyCreating 协议的对象?那么是否应该实现 remoteObjectProxy 和 remoteObjectProxyWithErrorHandler: 方法?

下面是一个例子,这对我来说根本不清楚。特别是我不明白我应该在哪里调用 NSXPCInterface 方法 (setInterface:forSelector:argumentIndex:ofReply:) 将参数作为代理列入白名单:在 XPC 服务代码或主机中?

方法的第一个参数是参数 0,然后是参数 1,依此类推。

在这种情况下,为 ofReply 参数传递值 NO,因为此代码正在修改方法本身的参数之一的白名单。如果您将方法的回复块的参数的类列入白名单,请改为传递 YES。

所以问题是:任何人都可以为我提供一个关于如何在 XPC 方法调用的块回复中将对象作为代理返回的清晰教程吗?