XPC服务

持续更新中...

Posted by CoderLeonidas on September 2, 2019

XPC服务

简介

XPC Services API提供了基于序列化属性列表的低级(libSystem)进程间通信机制。

Access a low-level (libSystem) interprocess communication mechanism that is based on serialized property lists.

一个复杂的应用内部往往有多个协作的功能单元。传统架构上的应用一个模块的 Bug 经常会导致整个应用 Crash 奔遗。XPC 引入的进程间通信的机制可以很好的解決这个问题。

XPC 带来了 2 个明显的优势:

    1. 增强了应用的稳定性单独的模块 Crash 不会导致整个应用的 Crash. Launchd 会自动重启 Crash的 XPC 模块服务
    1. 更好的隔离,XPC 服务仅仅暴漏服务接口。内部的数据结构、私有据都在自己独立的沙盒里面得到了更好的隔离保护

XPC技术同时适用于OS/OSX 平台。

XPC 目的是提高 App 的安全性和稳定性。XPC 让进程间通信变得更容易,让我们能够相对容易地将 App 拆分成多个进程的模式。更进一步的是,XPC 帮我管理了这些进程的生命周期,当我们需要与子进程通信的时候,子进程已经被 XPC 给运行起来了。

当我们希望让别的进程分担自己的任务,同时又能够及时的和主进程进行通信(比如一些网络处理的服务),这时候XPC就派上用场了。

XPC架构

XPC 是一种双向通信进程间通信架构。主应用可以调用 XPC 服务提供的接口获取特定功能,XPC 服务也可以反向调用主应用提供的服务

从图中可以看出App是服务的请求方,而XPC Service是服务的提供方:

  • XPC 服务请求方:
      1. 通过服务名称查找服务
      1. 注册服务接口
      1. 调用服务
  • XPC 服务提供方:
      1. 监听服务调用,建立通信通道
      1. 绑定服务接口到服务请求连接
    • 3.绑定服务对象到服务请求连接
    • 4.等待服务调用

exportedobject为服务实现者对象,exportedInterface为服务协议接口。 从上面架构图来看 App<-> XPC 之间都可以设置 exportedObjectexportedInterface,因此可以实现双向接口调用。

XPC编程实现

1 XPC服务接口对象

2 XPC服务提供方编程

3 XPC服务请求方编程

4 XPC服务反向接口调用

参考资料

XPC 苹果文档

macOS App应用开发

Introducing XPC