【问题标题】:XPC on Mac osx implementationMac osx 上的 XPC 实现
【发布时间】:2013-10-29 13:47:17
【问题描述】:

XPC 服务不是作为一个单独的目标,而是一个在应用程序中实现侦听器委托的内置类。我在网上看到的所有示例都有单独的目标,它们创建一个 xpc 服务工具并将其复制到应用程序资源文件夹以支持传入连接。有没有办法按照我的意愿去做?

【问题讨论】:

  • 使用 XPC 的全部意义在于创建单独的二进制文件,其代码仅限于其功能,为它们分配有限的权限并通过进程间通信相互通信。我不知道是否可以在单个二进制文件中使用任何 XPC api,但是除非您打算将应用程序的组件分开,否则为什么还要使用 XPC?
  • XPC 正在处理一个单独的进程。如果您没有单独的流程,那么您有更好的沟通方式...通知、kvo、自定义委托等。
  • 只是为了纠正@BergQuester。运行 XPC 服务的默认方式是通过二进制文件,但它们可以包括几个,即库等……99.9999% 的时间我从来不需要单独的二进制文件(除非许可证要求我这样做)。

标签: macos cocoa xpc


【解决方案1】:

不,没有.. 很抱歉直言破坏了您的周末。

XPC 作为服务运行,例如

YouApp.app
   Contents
   XPCServices/
          SomeService.xpc

不要让“xpc”扩展名欺骗您,用外行的话来说,它只是一个“应用程序”。

当“YouApp.app”启动时,launchd(制作你的 mac tic 的老大哥)会收到通知并开始调查。

launchd 对它们如此挑剔的原因 (libxpc) 是因为它们在低级别运行并且可能有害,但是......因为它们在允许级别运行,所以它们非常活泼并且高效地完成工作.

初学者入门的一个很好的例子是:

https://developer.apple.com/library/mac/samplecode/SandboxingAndNSXPCConnection/SandboxingAndNSXPCConnection.zip

基本上,有 1 个应用和 2 个 XPC 服务。

流程如下:

1) 应用启动 2)launchd(除其他外,授权 XPC 服务运行) 3) 该应用程序要求一项服务从互联网上下载某些内容您可以在 URL 中输入 4)该服务下载它,将其保存在所有服务(和应用程序)也可以访问的地方,即应用程序组。 5)然后应用程序要求其他服务“压缩”它。

就是这样。

一开始确实需要一段时间,最令人沮丧的是代码签名。

只是一个预警。如果你想让它运行得很好,你可能会从终端结束编码,而不是让 XCode 它。

另一件值得关注的事情是“计划”。确保您正确设置了 XPC 调试设置,否则它看起来就像什么都没有发生

最后,Console 是你的朋友 :D 在调试 XPX 时保持打开状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2014-07-25
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多