问题标签 [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 回答
338 浏览

cocoa - 在 XPC 服务中使用 FSEventStream 不起作用

我在我的 XPC 服务中使用 FSEventStream 时遇到了很大的麻烦(代码如下)。服务启动,流被创建,但回调函数从未被调用。当我将完全相同的代码复制到我的主应用程序并运行它时,它工作得很好。它在 XPC 服务中不起作用的原因可能是什么?我试图在这两个部分都禁用 AppSandbox,但它没有改变任何东西。对此的任何帮助都将受到高度赞赏。

代码:

我的回调函数:

0 投票
1 回答
1669 浏览

macos - XPC 服务的替代方案

我正在尝试将 Wine 1.7.13 移植到现代可可。我正在考虑在 XPC 服务的进程中运行 Windows 二进制文件,以实现安全隔离和防崩溃。但是,有一个问题:据我所知,XPC 服务是单例的。一次只允许运行一个 XPC 服务进程。这是一个问题,因为如果我使用线程来使多个 Windows 二进制文件同时运行,一个 Windows 二进制文件中的段错误或其他硬崩溃导致所有其他二进制文件随之崩溃。

就像这里提到的,一般来说,上面的断言是正确的。如果是这样,我似乎无法在单个 XPC 服务进程中实现这种隔离。

我的另一种选择是使用沙盒继承(使用 GUI 应用程序分支并使用更传统的 IPC 让 Windows 进程相互通信)而不是 XPC 服务。使用它而不是 XPC 服务的优缺点是什么?我了解继承其父沙箱的进程不会拥有自己的权利。还有哪些缺点?

我也理解 Apple 不鼓励使用沙盒继承来支持 XPC,但这仍然是一个可用的设计决策。他们一定是有原因的。沙盒化的 Mac App Store 应用程序能否以这种方式使用沙盒继承?

0 投票
1 回答
373 浏览

objective-c - 如何防止子进程在 Dock 中弹跳?

我有一个产生子进程的应用程序。这些子流程需要 XPCServices,它们在同一个应用程序包中。

我的主应用程序有它的可执行文件 my.app/Contents/MacOS/my

我的 XPC 服务位于my.app/Contents/XPCServices/com.my.service.xpc

当子进程驻留在 中my.app/Contents/Resources/mysubprocess,并且正在启动应用程序时,我的子进程无法连接到 XPC 服务(为什么不呢?),但它没有出现在 Dock 中。

另一方面,如果子进程在my.app/Contents/MacOS/mysubprocess子进程中成功连接到我的 XPC 服务(主应用程序不需要此 XPC 服务的任何内容),子进程会突然在 Dock 中获得一个自己的弹跳图标。我猜 OS X 会检测到是否从内部启动了某些东西*.app/Contents/MacOS/*并将其视为应用程序。

我显然需要它以这种方式工作,子进程可以连接到 XPC 服务,但子进程保持隐藏并且不会出现在 Dock 中。我尝试在运行时将 LSUIElement 和 LSBackgroundOnly 注册到我的用户默认值,但这并没有成功。如果我将 LSUIElement 写入用户默认值,我的主应用程序不会获得主菜单,这也是不希望的(但如果 LSUIElement 是NO绝对正确的行为)。

基本上我有两个问题:当我将我的子进程二进制文件移到它之外时,my.app/Contents/MacOS/找不到 XPCServices。我觉得这有点奇怪,因为服务的相对路径保持不变,如果子进程位于my.app/Contents/Resources/. 我还在[NSBundle mainBundle]调试我的子进程时检查了它,它有一个有效的路径,即使它在Resources文件夹中也是如此。有没有办法以某种方式告诉我的子进程它应该在哪里寻找我的 XPC 服务?

另一种方法是我可以防止在 Dock 中弹跳的子进程。我的主应用程序需要它的图标和菜单。那么有没有办法在运行时指定子进程不会启动 Dock 图标,即使它在my.app/Contents/MacOS/文件夹中?

谢谢你

0 投票
1 回答
1808 浏览

cocoa - 自行终止 MacOS XPC 服务的正确方法是什么?

我已经成功地遵循了守护进程和服务指南 - 创建 XPC 服务教程,以及SandboxedFetch示例代码,并且有一个使用新NSXPCConnection类的有效客户端/服务设置。

我仍然不完全清楚的是,一旦服务应用程序完成其工作,如何正确地自行终止它。我认识到,在许多情况下,该服务有望保持活动状态,但在我想到的用例中,该服务将用于仅执行一些我不会在主应用程序中执行的处理。一旦该处理完成,服务应用程序就没有理由保留。如果客户以后需要另一项服务,它可以重新创建一个新服务。

由于该服务是轻量级的、非 nibbed 的NSApplication,我试图通过invalidate从 inside 调用来自行终止它applicationWillTerminate,但这几乎每次都会触发 EXC_BAD_ACCESS 异常。调用invalidate该服务会[NSXPCListener serviceListener]产生稍微不太可靠的崩溃,但它仍然会崩溃。

invalidate从客户端应用程序内部调用它NSXPCConnection也几乎每次都会生成一个 EXC_BAD_ACCESS 异常。

所以我很好奇正确的步骤顺序是干净地关闭 XPC 服务然后退出服务应用程序。理想情况下,服务会在对客户端进行最后一次 XPC 调用后自行终止。

附件是一个异常堆栈跟踪的小屏幕截图。(是的,这是在服务中加载的 webview。一旦 webview 完成加载,我希望服务自行终止)

在此处输入图像描述

0 投票
2 回答
306 浏览

xpc - 不能在 SMJobBless 示例中包含 XPC

我正在尝试在苹果提供的 SMJobBless 示例中包含 XPC api 框架:

https://developer.apple.com/librarY/mac/samplecode/SMJobBless/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010071-Intro-DontLinkElementID_2

但是添加这个:

到 SMJobBlessHelper.c 文件给了我这个:

Xpc/xpc.h:没有这样的文件或目录。

缺少什么,应该在哪里?

0 投票
1 回答
1500 浏览

macos - 通过 XPC 与应用程序通信并启动以 root 身份运行的守护进程

是否可以与以 root 身份运行的启动守护程序和通过 XPC 的应用程序进行通信?当我的守护进程以我的用户身份运行时,我可以与它正常通信,当以 root 身份运行时,它会停止接收我的消息。这是 Mac OS X 内部的预期安全性吗?我需要使用低级 xpc(也可以在 Lion 上运行)。我知道我可以为我的应用程序创建一个以 root 身份运行的特权和签名帮助工具。我是否能够通过 XPC 或套接字与另一个进程进行通信?

谢谢!

从我的守护程序代码中提取的小片段:

0 投票
2 回答
2741 浏览

ios - 如何解决 xpc.h not found 错误?

我正在开发一个 iOS 应用程序,在这个应用程序中,我在内部发送 SMS,无需用户参与。谷歌搜索后,我找到了答案,我正在使用这段代码。

现在我们有了 XPC 连接 myconnection 到 SMS 发送服务。然而,XPC 配置提供了暂停连接的创建——我们需要再采取一步来激活。

连接已激活。就在此时,iOS 6 将在电话日志中显示一条消息,禁止此类通信。现在我们需要生成一个类似于 xpc_dictionary 的字典,其中包含消息发送所需的数据。

所剩无几:将消息发送到 XPC 端口并确保它已送达。

但是为了使用这个代码,我必须添加 xpc.h 头文件,但是找不到 xpc.h 头文件。所以,建议我实际上需要做什么。

在此处输入图像描述

0 投票
3 回答
15360 浏览

macos - 使用 XPC 与另一个应用程序通信

我有一个窗口应用程序,要添加一些功能,我需要另一个应用程序,它在登录时启动并将数据同步到服务器(如果有)。

我尝试过使用 NSDistributionNotification,但它在沙盒应用程序中几乎没有用。我查看了 XPC 并希望它能够工作,但我只是不知道如何让它与助手一起工作。到目前为止,我已经使用 XPC 完成了这项工作。

主应用

XPC服务

这工作正常,现在我需要将此结果传递给 Helper 应用程序。我怎样才能做到这一点 ?如果 XPC 不是这里交流的答案,那么我应该使用哪一个?请问有什么指点吗?

0 投票
1 回答
1212 浏览

macos - OSX 活动监视器如何将 XPC 任务与其发起程序进程相匹配?

当一个应用程序进程启动一个 XPC 辅助进程时,它实际上并没有以经典的 UNIX 风格执行 fork()/exec() 本身。相反,它会向 launchd 发送一条消息,后者会为它做脏活。因此,如果您在 XPC 进程上查询父进程,它会作为 launchd 进程返回。

但是,如果您在分层进程视图中打开 Activity Monitor,则 XPC 帮助进程都显示在请求它们的原始应用程序下方,例如:

Safari 的 XPC 助手示例,显示启动为父进程

在我正在开发的软件中,了解进程之间的这种关系将非常有用。到目前为止,我们一直在使用常规的 BSD 父进程信息,但是随着一切都朝着 XPC 发展,这不再有用了。

所以:

  • XPC 进程的“原始”父进程信息存储在哪里?
  • 活动监视器如何访问它?

涉及到一个 kext,所以我很乐意直接在内核而不是用户空间中提取这些信息,但我似乎什至无法弄清楚它的存储位置。

更新:关于 Apple 的darwin-kernel邮件列表的讨论:http: //lists.apple.com/archives/darwin-kernel/2015/Mar/msg00001.html

0 投票
2 回答
425 浏览

macos - 从 NSXPCConnection 传递非空参数时未调用应用程序回复

我正在使用 XPC 将一个项目分成两个项目 - 一个为 os x @ 64 位构建的主项目,以及一个为 os x @ 32 位构建的 XPC 服务,因为它使用的库不适用于32位,无法更换。两者使用 NSXPCConnection 进行通信。

我从服务到主应用程序的回调有一个问题:
当回复采用复杂的参数(即:作为 nsimage 或 nsdata 的类)时,它是否不会从 xpc 服务回调。没有错误或异常,只是没有任何反应。这有时也会以另一种方式发生,即在调用代理对象时。它不是随机发生的,它只发生在某些回复签名中,尽管我不确定是哪个。

我需要在 xpc 服务和主应用程序之间以某种方式传递 nsimage。我尝试同时传递 NSImage 和 NSData,但没有调用回复(值得一提 - 当传递 nil 而不是真实对象时调用它)。

我尝试使用 [NSData bytes] 发送指针,然后使用 [NSData initWithData:length:] 重新创建数据。当我尝试此操作时,会调用回复,但在调用 initWithData 时会收到 EXC_BAD_ACCESS。我认为这是因为 32 位和 64 位寻址之间存在一些混乱。

一些代码示例:

当回复采用 nsimage 时:

导出界面

回复来自

当回复将 ptr 指向数据时:

导出界面

回复来自: