什么是App Extension
众所周知,iOS的安全性是非常高的。其对应用程序中的数据存储是通过沙盒模式进行的。所以在当时要实现应用之间的数据共享来说是非常困难的。功能共享就更加棘手了。但是在iOS8系统之后,苹果就引入一个非常有前瞻性的功能:扩展。在之后我们可以通过扩展来使app见数据甚至是功能进行共享。在app extension出现后,突破了两个重要的iOS限制,那就是由Open In系统创建的应用程序之间的不必要的数据复制和无法替换苹果键盘。(虽然如此,但它和安卓的intent还是不太一样,具体区别大家可以下去了解一下)
说到这可能大家还是有点糊涂。咱们来举个例子吧。在iOS14中,通知栏的UI进行了一次大的修改。里面的有些内容,比如说地图,股市等等消息和通知是不必我们专门跑到app中去查阅的,而是可以在通知栏中直观的看到。所以现在的通知中心可以显示越来越多的应用扩展。所以extension就是一种扩展类型。apple为每一种扩展点分别加入了API。所以应用扩展并不是只有一个APP,而是每个扩展点都有自己的API。虽然iOS系统层面的原因,导致很多东西不能像安卓一样自定义等等,但是有了应用扩展,现在的iOS系统也变得越来越开放和灵活。
在了解了app extension到底是什么了之后,我们来看看它的工作原理和生命周期
工作原理
应用扩展本身不是一个app,而只是对于某个app内容和功能的扩展,所以不能够单独的上架app store,而是跟着你的app一起打包,这个包含应用扩展一起打包的aoo就叫做container app(容器app)。虽然应用扩展是包含在containeraoo 中打包的,但是运行时它并不是跟你的app在同一个进程上面,而是有可能同一个app extension 会同时运行在不同的进程,因为有可能同时又几个程序都打开了这个app extension。这个用来打开某个app extension的应用就叫做host app(宿主应用)。即当一个应用扩展在运行的时候,它可以和host app直接进行通信,但是无法和container app进行通信。
一些常用的扩展
Today extensions (今日扩展)
Today extension就是我们上面所看到的一种扩展。这个扩展的作用很简单,能够让用户更快速方便的看到app最及时的信息,比如中国移动的流量显示,用户不用再每次打开移动的app去查看流量,而是直接在通知中心,甚至锁屏界面就可以查看
Share extensions
分享扩展可以使用户在不同的app之间分享内容。这个功能在iOS5的时候就已经出来了,但是仅限于相册分享图片到tweeter,iOS6中可以分享到Facebook,但是现在,我们可以写分享扩展来分享到我们自己的服务器。
比如我有一张相册中的图片想要通过微信发送给我的朋友,如果没有分享扩展,我只能打开微信与朋友聊天的界面 -> 选择发送图片 -> 到相册中选择图片 -> 然后发送。但是有了分享扩展,我可以直接在相册中点击分享按钮,点击微信,选择好友后,直接分享给好友,而不用打开微信来发送了。
extension的生命周期
因为应用扩展不是一个完整,独立的app,所以它的生命周期跟我们正常的app并不一样。应用扩展是在用户从其它软件的界面或者系统界面打开它的时候启动,一般都是 host app 发出一个 request,app extension 对应的响应这个请求,在 response 结束之后,app extension 的生命周期也就终止了。