ios进阶酷

AppExtension:扩展的学习笔记

2021-04-20  本文已影响0人  双鱼子曰1987

一、概述

“扩展”的原理网上有很多,官网也清晰讲明,具体参见以下官方链接。
本文旨在整理笔记,简述相关原理,以备后续查看。

二、AppExtension基本原理

1、搞清楚几个

概念

2、iOS是如何处理扩展?

3、扩展的生命周期问题(App Extension’s Life Cycle)。

app_extensions_lifecycle_2x.png

主要有以下四个步骤:
1、用户触发“扩展”,如UI触发或者代码触发。
2、iOS系统自动唤起“扩展”。
3、执行“扩展”代码。
4、执行完成后,系统杀死“扩展”,回收资源。

三、扩展相关的通信

1、通信归类

2、扩展与ContainingApp的有限通信

the limited interaction available between an app extension and its containing app.

3、request/response模型的理解

request/response是通过 ”上下文“ 机制实现。HostApp为”扩展“提供运行的上下文(an extension context)。大致流程是,HostApp将 RequestData 通过上下文(an extension context) 输送给 扩展AppExtension,扩展进行处理(UI显示,用户交互,代码处理等),处理完成后将 ResponseData 返回给HostApp。

由于”扩展“是一个独立的进程,一般一个App也是一个独立进程,因此它们间通信应该是基于进程间的通信方式。例如Socket、管道等,至于哪一种官方好像未说明(待研究)。

4、扩展(App Extension)与宿主App(Containing App)的数据共享shared container

虽然AppExtension的Bundle被导入如ContainingApp的包内,但是彼此的沙盒是没办法访问的。Apple发明了share container的中间层,来实现彼此的数据共享问题。也被称之为AppGroup的概念。
这也映射软件工程的一句经典话语:多了个中间层,一切都显得那么美好。

基本原理如下:Apple允许 App进程扩展进程 都可以对SharedContainer的共享数据区进行操作。

app_extensions_container_restrictions_2x.png
如何集成AppGroup能力?
支持的系统框架
共享数据的数据同步问题!

可以使用CoreData、SQList或者Posix locks锁技术,来实现数据同步问题。
Use Core Data, SQLite, or Posix locks to help coordinate data access in a shared container.

四、代码能力相关

1、能力限制

2、代码复用

扩展Framework的要求

五、实例

见另外一篇推送支持图片,详见:
AppExtension:NotificationServiceExtension集成、调试、打包的实践


参考

官网-Adding an App to an App Group.
官网-App Extensions Increase Your Impact
iOS 8新特性之扩展
App Extension编程指南(iOS8/OS X v10.10)中文版
iOS扩展开发攻略(一) - Share Extension
活久见的重构 - iOS 10 UserNotifications 框架解析

上一篇 下一篇

猜你喜欢

热点阅读