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

macos - OS X - 真正的“按需”特权帮助工具

我的应用程序需要将文件写入文件系统上的受限位置。
为此,我使用了一个以 root 身份运行的帮助工具。

一切正常,按照这个示例,我的帮助工具已正确安装并运行。我使用此解决方案能够“唤醒”辅助工具,否则在初始加载后它不会启动超过一次。

辅助工具正在等待来自主应用程序的消息,并正确执行它们。我还有一条消息要求该工具关闭,它也可以正常工作。

问题是launchd每次退出时都会重新启动该工具,无论我在launchd.plist文件中指定什么键。
我不希望帮助工具永远运行,等待消息,而是仅按需启动。

问题:辅助工具每次结束都重启正常吗?如果没有,如何让它死掉并按需重启?

这是launchd.plist内容:

当然,我尝试了各种键和值的组合,以及帮助工具的各种退出状态代码。它没有以任何方式改变launchd管理过程。

0 投票
1 回答
2251 浏览

plugins - 核心音频用户空间插件驱动程序 - 沙箱防止来自另一个进程的数据交互

我正在开发基于示例 developer.apple.com/library/mac/samplecode/AudioDriverExamples/Introduction/Intro.html 的 coreaudio 用户空间 hal 插件

在插件实现中,我打算从另一个进程即CFMessagePort获取音频数据

但是,我在控制台中尝试创建端口 CFMessagePortCreateLocal 时出现以下错误...

sandboxd[251]: ([2597]) coreaudiod(2597) 拒绝 mach-register com.mycompnay.audio

我做了一些谷歌搜索并来到这篇文章

技术问答 QA1811 https://developer.apple.com/library/mac/qa/qa1811/_index.html 关于在 plist 中添加 AudioServerPlugIn_MachServices 但仍然没有成功。

我还需要做些什么来完成这项工作(比如添加权利、代码签名)或者这不是正确的方法。?我不确定 MessagePort 机制在沙箱下是否可以工作。XPC 服务是否可行?

非常感谢您的宝贵时间。任何帮助是极大的赞赏


更新1:

我应该在音频插件中创建一个远程端口而不是本地端口。话虽如此,使用 plist 中的 AudioServerPlugIn_MachServices 属性。现在没有sandboxd[559]: ([552]) coreaudiod(552)在控制台中拒绝 mach-lookup / register 消息。

但是,在我的音频 hal 插件(客户端)中,我有

CFStringRef port_name = CFSTR("com.mycompany.audio.XPCService"); CFMessagePortRef port = CFMessagePortCreateRemote(kCFAllocatorDefault, port_name); 端口返回值 0。我在不同的应用程序中尝试过这个,它工作得很好。

这是我的服务器端:

我确实收到了关于此的控制台消息。

com.apple.audio.DriverHelper[1314]:名为 SimpleAudioPlugIn.driver 的插件需要扩展名为 com.mycompnay.audio.XPCService 的 mach 服务的沙箱

有谁知道为什么??


更新 2

我注意到,当我将调试模式与 coreaudiod 一起使用时,它确实成功获取了 mach 服务的对象引用。(当我尝试 xpc_service 方法时发生了同样的事情) 项目方案设置

任何人??

0 投票
0 回答
385 浏览

macos - 如何在 OSX 上嵌入启动守护程序的配置文件?

我正在开发一个 Mac 应用程序,它还安装了一个启动守护程序。应用程序和守护程序都以不同的身份和不同的权利进行了代码签名,但启动守护程序拒绝启动。

查看系统日志,我看到以下消息:

taskgated-helper [7269]:找到 0 个配置文件

taskgated-helper[7269]:不允许 com.test.MyApplication[pid 7268] 因为没有找到配置文件

通常对于 Mac 应用程序,配置文件被复制到包中并在 MyApplication.app/Contents/embedded.provisionprofile 中可用。但是我还没有找到一种让守护程序在启动时找到配置文件的好方法。我发现最好的方法是双击配置文件并将其安装在系统上,以便它出现在系统偏好设置中,但这对于此应用程序的用户来说是不可接受的用户体验。

如何让启动守护程序找到配置文件?我可以指定其位置的路径还是可以将其嵌入二进制文件中(与 -sectcreate 链接器标志相同的方式)?

更新:

我尝试了各种组合,其中一种似乎最适合我的需要。我创建了一个具有单独权利和配置文件的单独应用程序,并驻留在 MyApplication.app 的包中,启动守护进程是一个进程,其唯一目的是运行服务应用程序。此解决方案的优点和缺点是:

  • 服务具有独立于主机应用程序的一组独立权利(+)
  • 当应用程序被删除时,服务也会消失,因此您不必担心仍在安装服务或不直观的卸载过程(+)
  • 启动守护程序以提升的权限运行,并在特定位置调用某些应用程序;如果没有适当的措施,这是一个巨大的安全漏洞。(-)

我上面描述的与 XPC 服务非常相似,只是我需要我的服务始终运行,即使在主应用程序没有运行时也是如此。与仅按需运行并在长时间空闲时被终止的 XPC 服务相反。

有什么方法可以让我使用 XPC 服务并让它一直运行,而不仅仅是在消费者应用程序执行请求时?

0 投票
2 回答
2062 浏览

ios - iOS 崩溃:XPC API 滥用

我们的 iOS 应用程序发生崩溃,由 crashlytics 报告:

崩溃:XPC API 滥用:尝试发送一条期望回复到 (com.apple.networking.connection.0x46bf35a0) 的消息

堆栈跟踪是:

它发生在 iPhone 5 上的 iOS 9.0.2 下。我们无法重现崩溃,我们不知道如何开始调试/修复。似乎我们并不孤单

也许这里有人有任何想法。

0 投票
1 回答
871 浏览

xcode - NSXPCInterface 构造函数无法识别 Swift 中的协议

我正在快速创建 XPC 服务,并创建了我的协议:

当我尝试通过使用协议初始化 NSXPCInterface 的新对象来设置导出对象实现的接口(在我的 main.swift 中)时,出现错误:

错误是:无法将类型“(MyProtocol).Protocol”(又名“MyProtocol.Protocol”)的值转换为预期的参数类型“Protocol”

谁能帮我解决这个错误?

0 投票
0 回答
321 浏览

ios - XPC 通信错误:XPC 在从通讯录导入 4k+ 联系人期间关闭应用程序。如何解决这个问题并保留功能?

我被分配到一个我还没有完全掌握领域知识的应用程序。在该应用程序中,我将联系人从通讯录导入到我的应用程序。它在其他设备上运行良好,但 iPod 给我带来了一定数量的联系人问题。如果联系人<3k,则一切正常。如果联系人为 4k+,则内存使用统计数据将超出图表:

在此处输入图像描述

疯了吧。现在,如果我幸运的话,有时它只会给我一个低内存警告并继续工作。否则它只是将应用程序发送到后台,在控制台中我看到这个异常:

当我尝试将应用程序带到前台时,我发现它回到了登录页面(起始页面)而不是我离开的页面。所以我不确定它是崩溃还是什么。我猜它会在清除所有应用程序数据后重新启动应用程序。

在阅读了这个这个和Stackoverflow 上的这个问题并查看了统计数据后,我确信这是 XPC 这样做的,因为 App 占用了大量内存

我可能会引入诸如分页之类的东西,以便在某一点仅检索有限数量的联系人并在 tableview 滚动时检索其他联系人,但问题是我需要在某一点或另一个点检索所有联系人(以发送到我的服务器),如果用户决定在我的应用程序上将这些联系人添加到他的团队,所以无论如何这一定会发生。我正确地重新分配了用于保存大量数据的数据结构,但它从来没有真正解决过该部分,因为它在从通讯簿中读取联系人时崩溃。还有一些循环对联系人进行分类、按字母顺序排序、过滤掉等,因此它们也会增加开销。所以基本上代码是一团糟,但客户端是无情的,否决了我们为重构代码而提出的所有建议。

我该如何摆脱这种混乱?由于可能主要基于意见,因此征求建议将是题外话,但我真的需要这里的资深和有经验的人的指导来处理这件事。

TL;DR 当我需要将大量数据集以过滤状态完整发送到服务器时,我该如何处理?

0 投票
1 回答
764 浏览

objective-c - SMJobBless 和 NSXPCConnection

有一个 Apple SMJobBless示例展示了如何安全地安装帮助工具。SMJobBlessXPC在 Mach 端口上使用 XPC (c API) 用于应用程序和特权帮助工具之间的通信。

我需要 SMJobBlessXPC 使用 NSXPCConnection(Objective c API)。

0 投票
1 回答
406 浏览

xpc - 在应用程序购买提醒显示中,iOS 9 的 XPC 连接中断

购买版本时,iTune Store 有一个登录对话框。

登录或输入凭据后,应用程序变得无响应,并记录“XPC 连接中断” 消息。

我们尝试了以下解决方案,但没有解决
1. 从项目中删除 UIWebView、UITextView
2. 删除现有的 UIImageView 并再次添加 UIImageView

大多数时候,在搜索此问题的解决方案时,我们找到了包含其中使用的故事板的项目的解决方案。
我们的项目不使用故事板。

0 投票
0 回答
30 浏览

watchkit - iOS 目标删除 Watch App(但不重新安装)

每当我启动我的 iOS/iPhone Target 时,应用程序就会从 Watch 中删除。

同样有趣的是:当从 Xcode 部署手表应用程序时,它会以 退出signal 9,与 XPC 相关

0 投票
1 回答
580 浏览

ios9 - XPC 连接中断在所有异常情况下都会中断应用程序在启动时崩溃

该应用程序在启动时崩溃,唯一的错误是“XPC 连接中断”没有其他信息,我在情节提要中搜索了“keyCommands,keyCommand”标签,但没有运气,没有这样的标签,我没有 seagues。