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

objective-c - 应该如何编写带状态的 XPC 服务?

我已经阅读了 NSXPC* 文档,该文档建议使出售的服务尽可能无状态。这是一个好主意,至少对于我读过的文档和示例而言,因为服务和调用应用程序将彼此视为单例,并且一次只运行一个服务实例。这意味着这些方法本质上是非成员函数(使用 C++ 术语)。

我为什么要解决这个问题?我想将网络代码放入 XPC。由于 XPC 将使用具有多个窗口的 GUI 应用程序,因此我需要支持多个同时连接。这不适用于单身人士,至少直接如此。

网络 API 是基于 C 的,主要状态类型是指向自定义struct. 那么我们为什么不做类似的事情:

  1. 让创建函数返回一个值类型,比如NSUUID什么。(跨进程传递指针是个坏主意。)
  2. 在服务中,在 API C 指针和 API C 指针之间创建NSDictionarystd::map或其他)映射。NSUUID
  3. 各种服务 API 获取UUID并将其转换为 C 指针以使用网络 API。

另外:由于token是随机的,如果XPC服务崩溃,XPC重启后主应用会有一个无用的token。也许我应该使用一个 URL(它将包含所有重新启动的信息)。但是,如果两个连接碰巧在同一台服务器上,我们就会遇到潜在的冲突。也许我可以将这些想法与作为 URL/UUID 对的令牌结合起来。(UUID 值将从服务返回变为由主应用程序提供。)

这是实现全状态 XPC 的好方法吗?

0 投票
1 回答
106 浏览

objective-c - XPC 服务中未调用 ASIHTTPRequestDelegate 方法

我在 XPC 服务中使用出色的 ASIHTTPRequest 从 Internet 获取一些数据。

我正在创建一个简单的请求。但是,由于某种原因,它的委托函数没有被调用。我启用了 ASIHTTPRequest 的调试日志,所以我看到请求确​​实执行了。经过一番挖掘,我发现可能是什么原因:

在 ASIHTTPRequest.m 中,在 requestFinished 方法的最后,有一个调用:

reportFinished 方法是调用委托的方法。由于某种原因,它永远不会被解雇。如果我将此行替换为:

然后调用委托。但是,我认为它是在错误的线程上调用的,因为我正在运行异步请求。

我应该如何调整代码以便它调用委托的方法,而不修改它的逻辑/线程?

0 投票
0 回答
629 浏览

cocoa - 获取 XPC 进程的负责 PID

我正在尝试获取 XPC 进程的负责进程的 PID。

例如,Safari 的 PID 为 500,并且正在与 com.apple.WebKit.WebContent.xpc 的 3 个实例通信,PID 分别为 510、520 和 530。

Activity Monitor.app 似乎知道这 3 个 XPC 进程与 Safari 有关。它声称“进程组”是“Safari Web 内容”。

但这与真正的unix进程组ID无关。GPID 不是 Safari.app 的。事实上,Safari.app 甚至不是进程父进程——launchd 是。

所以问题是 - 我如何知道 com.apple.WebKit.WebContent.xpc 实例的“负责”PID(即 Safari 或 Mail)?

0 投票
1 回答
230 浏览

macos - 用户首选项未从 XPC 服务中保存

在我的主应用程序包中,我包含了支持 XPC 服务。应用程序是沙盒的,一切正常,除了当我从 XPC 服务应用程序调用[[NSUserDefaults standardUserDefault] setObject:forKey:]方法和- synchronize方法时,不会写入首选项,并且下次需要时无法检索数据。

我在 Apple 的文档中没有找到与此问题相关的任何内容,除了沙盒应用程序无法访问其他应用程序的首选项。没关系,我不需要。XPC 服务在 ~/Library/Containers 中有自己的容器,我想它应该能够存储自己的数据。但显然由于某种原因并非如此。

我可能错过了一些东西,但找不到什么。为了完成这项工作,是否需要做一些特别的事情(添加一些权利等)?

感谢您的任何提示。

0 投票
0 回答
265 浏览

objective-c - 未使用 NSValue 的 NSArray 作为参数调用 XPC 方法

我有一个为 OS-X 编译 32 位的 XPC 服务。它的一种方法将单个参数作为参数,并在主进程上调用给定的块。

这个块需要 3 个 NSStrings 和一个应该只包含 NSValues 的 NSArray。每个 NSValue 对象都持有一个 NSRect。

由于某种原因,当 NSArray 不为零时,不会调用给定的块。如果不是保存 NSValues,而是让数组保存 NSStrings,则该块被正确调用。

我不确定如何解决这个问题,因为没有明显的原因会发生这种情况。根据苹果文档,NSValue 确实符合 NSSecureCoding。

我什至尝试使用以下方法将 NSValue 类列入白名单(这实际上并不需要):

这似乎没有任何改变。

知道如何通过 NSArray 吗?我想我可以将所有 NSRects 格式化为 NSStrings,并传递一个我知道可行的 NSStrings 数组,但这会导致我宁愿避免的性能下降。

0 投票
0 回答
208 浏览

objective-c - 使用 Instruments 对 XPC 服务进行内存分析

我很好奇这是否可能。我在编写的 XPC 服务中遇到了严重的内存泄漏或废弃内存,但我似乎无法找到它。我无法弄清楚如何将仪器附加到 XPC 服务。

0 投票
0 回答
851 浏览

cocoa - XPC 服务,作为 Launch Agent 启动

我确实创建了一个 XPC 服务,它在后台运行并创建定期任务

  • 将其放入路径 /Users/Peter/Library/Application Support/AGENT TEST APPS/CS Agent.xpc

  • 我可以通过直接执行文件来运行它

  • 我将 .plist 放入 LaunchAgents 中,对可执行文件进行裁判

    /li>

但它不会在启动时启动,因为它应该


更新

确实尝试手动加载

但我没有在活动监视器中看到它,也没有看到它应该产生的任何输出(创建文件)

当我做launchctl list时,我看到了

0 投票
1 回答
285 浏览

objective-c - NSWorkspace runningApplications 不返回我的 XPC mach 服务

返回正在运行的应用程序和代理,但我看不到我正在运行的 XPC mach 服务(尽管它正在运行并且在活动监视器进程中可见)

即使我在活动监视器中查找 PID

我得到 res nil,虽然在其他进程中这很好用

0 投票
4 回答
2364 浏览

objective-c - 在 finder 同步扩展和 XPC 之间进行通信

我正在为 OS X 开发 Finder 同步扩展,并希望使用后台 XPC 服务。

我可以在主应用程序中启动并让它启动 XPC 并正确运行,但是当我尝试从 Finder Sync 访问它时没有任何反应。finder 同步和 XPC 都是它们自己的捆绑包,所以这可能就是原因。我想要的是 finder 同步与 XPC 讨论文件的状态,主应用程序与 finder 同步和 XPC 讨论要观看的文件夹列表。

有没有人有这方面的运气?按需后台服务有更好的方法吗?是否可以在两个 XPC 服务之间进行通信?

0 投票
1 回答
1328 浏览

macos - 如何终止/重置捆绑 XPC 助手?

有谁知道如何终止或重置 XPC 助手?根据 Apple 文档,launchd 会在 XPC 助手崩溃时处理它。但是,如果您需要中断或取消正在运行的助手,则没有指示该怎么做。

例如,如果我有一个正在渲染 32 位 QuickTime 电影的 XPC 客户端,我如何让我的 64 位“父”应用程序向 XPC 助手发出信号以取消作业并进行清理?

此外,XPC 助手应用程序处理具有“退出”的父级的正确方法是什么?

目前,要在父应用程序端终止,我正在使用(NSXPCConnection):

  • (无效)暂停
  • (无效)无效

这些似乎关闭了连接。但我没有看到任何证据表明助手应用程序正在关注。

提前致谢!