本文来自爱范儿
iOS应用扩展的历史
很久很久以前,我们在谈论 iOS 应用的时候,指的是桌面上那个图标,点击图标后打开的界面,就是iOS应用的全部(以下简称主应用)。对iOS工程师而言,开发iOS应用也就是开发这样一个部分,那个时候的 iOS 应用结构十分单纯,一直到iOS 7都是这样。
当然简单的架构必然有其局限性,早期iOS应用要想和系统有更深的交互可谓捉襟见肘。从iOS 8开始,苹果开放了iOS的应用扩展系统(App Extensions),这从根本上改变了上述的状况,iOS应用变得不再仅仅是主应用。
在第一批开放的扩展中,最被我们熟知的应该是Today Extension(通知中心小部件)和Custom Keyboard Extension(第三方键盘)。iOS 8之后这两类扩展犹如雨后春笋般茁壮成长,无数类似于快捷启动器和第三方输入法的应用扑向了我们,当然它们的成长并不顺利。
到今年iOS 10发布,应用扩展已经磕磕绊绊地走过了三个年头,可使用的扩展类型也有六七种变成了现在的19种,这其中有一些革命性的进步,甚至可以说从根本上改变了iOS应用的交互方式。
应用扩展的局限性
iOS应用扩展的局限性是非常多的,这里谈谈作为开发者而言,碰到最多的问题。
首先是学习的成本比较高,不管是通知中心小部件还是第三方键盘,甚至是分享面板的扩展,没有一种扩展是可以零设置就让用户上手的。
这导致一个非常尴尬的局面,开发者不得不为用户建立一些使用向导。要知道,iOS 8之后通知中心小部件多如牛毛,可是直到现在,我还是会经常看到有用户不会添加通知中心小部件。学习成本的增加导致了一些小白用户根本就无法使用到iOS的扩展。
其次,部分扩展的入口太深,使其在事实上成为了鸡肋。
比如照片扩展这个东西,它的本意是非常好的,可以让第三方应用给系统的照片提供照片编辑的功能。但是,用户用起它来是不太容易的:
首先要让照片进入编辑状态,然后点一个看起来是更多的按钮,会出现一排扩展。如果没有你想要的你还要继续点‘更多’,把它给添加进来,我想到这几步就很头疼,我干嘛不到主应用里面去用呢?
在iOS 10,通知中心小部件的入口进一步加深了,下拉通知中心默认展示的不是小部件的页面,必须要滑一下才可以用到。这一点可以说是对快捷启动类应用的重创。
扩展是无法独立存在的,这在iOS 8刚出来时被很多人吐槽过,你要想安装一个通知中心日历,就必须下载一个主应用,它的通知中心小部件就是这个日历。当然这不是特别大的问题,大部分的应用还是需要一个设置页面的,这个主应用长期以来就是充当了这个角色。这导致一个非常奇葩的现象:一个以扩展为主的应用,用户最先看到的是最不重要的设置界面,然后这个设置界面要教会用户怎么样使用到该应用的扩展。
扩展有一个最大的问题,一般用户可能意识不到,但是开发者对其是深有体会。那就是扩展的性能和稳定性其实是很差的。iOS分配给扩展运行的内存比主应用要少很多,导致扩展崩溃是非常频繁的事情。反映到用户层面,就是频繁地出现‘通知中心扩展白掉了’、‘键盘消失了’等事情。早期第三方键盘的稳定性非常差,频频出现切换到改键盘后无法弹出来的情况。
苹果在开发者文档明确地提到,在开发扩展的时候必须非常谨慎地使用内存,否则扩展会很容易被系统回收掉,导致扩展的崩溃和消失。
另外一个方面,iOS扩展的调试一直是开发者的一个心病,开发工具调试iOS扩展的稳定性很差。
过去巨大的进步
从iOS 8到iOS 10,扩展系统还是发生了不少变化,其中有一些变化是非常喜人的。
iOS 9引入的Network Extension,让iOS上面的网络调试成为可能,同时也孕育了目前最强大的网络工具Surge,而Content Blocker Extension则为AdBlocks一类的广告屏蔽扩展提供了技术基础。
在iOS 9的变化中,iOS扩展这一方面最重要的进步就是
网络相关的扩展。这让现在的iOS应用可以彻底掌控网络,方便地对其进行调试、过滤、代理等工作。
iOS 10的革命
作为一个开发者,以我个人的角度来看,iOS 10中最大的变化就是对扩展系统的改造。本次增加的扩展类型之多可以说史无前例,并且都是非常具有里程碑意义的改进。下面我们可以分析其中的几个。
首先是Call Directory Extension,一直以来,iOS被Android嘲笑很重要的一个点就是:连电话黑名单功能都没有。现在,利用这个扩展,开发者可以很轻松地做出类似于电话黑名单的应用。简单来说,iOS允许开发者通过这个扩展拦截来电,并作出一些处理,这一块可能会有更多的想象空间。
其次是Intents Extension和Intents UI,这两个扩展的名字可能不够明显,其实这两个扩展出自SiriKit框架,它是用来做Siri相关的扩展的。SiriKit为开发者开放了包括语音和视频通话、发送消息等在内的6类服务。可能这并不是最完美的结果,但却是Siri走向开放的一个开始。
然后是Notification Content Extension和Notification Service Extension,这两个扩展能进一步增强通知系统。众所周知,iOS的推送通知系统是一个强大的设计,可以让应用不运行在后台的情况下,通过统一的服务收到推送消息。
在iOS 8和iOS 9,推送通知也得到了进一步的提升,推出了可交互的通知(通知包含操作按钮)以及可以处理用户输入的通知(通知中心直接回复内容)。
在iOS 10,
开发者可以让通知更加灵活,例如通知的内容可以展现一个图片,甚至将通知中心内容拦截下来,做一个预处理之后再显示给用户(当然只能拦截主应用收到的通知),这可用作通知内容的加密,或者媒体内容推送后的下载操作。
接下来就是对中国人无关痛痒的iMessage Extension和Sticker Extension。可以看出在iOS 10,苹果非常重视iMessage的体验。首先,信息这个应用有了很大的变化,苹果增强了其趣味性,让它更加像是一个IM软件。
同时在iOS 10
开发者可以为iMessage建立扩展,可以用于处理会话场景中的内容。同时还可以为iMessage提供:表情包!没错,这就是Sticker Extension做的事情,表情包真是拯救世界呀,连苹果都看到这个蛋糕了。
这个扩展可以说是所有的应用扩展中开发成本最低的,因为它没有开发成本。你需要做的仅仅就是把表情包的内容放到这个扩展里面,然后就可以发布到App Store,用户可以下载这个表情包到自己的iMessage上面。当然对国内用户而言,如果iMessage有用的话,那要微信做什么。
哦顺带提一下,iOS 10将允许第三方键盘使用地球键的长按功能,这意味着对输入法多的用户而言,将是个效率提升的变化。
iOS 10的糟糕变化
说了那么多iOS 10的好话,终于到了吐槽时间。iOS 10的一些变化,对开发者和用户而言,可能并不是那么有趣的。(下面的讨论都基于iOS 10.0 Developer Beta 6,正式版发布之后可能有出入)
通知中心小部件
首先是通知中心小部件的改变,上面已经提到过一点了,目前用户下拉通知中心默认是不会看到小部件的,这提高了使用门槛。
另外,通知中心小部件被设计成 2 种模式:折叠和展开。与之前扩展的高度由开发者控制不同,iOS 10里面通知中心扩展的高度调节没有那么自由,你得在这两种模式之间切换。
然后就是小部件视觉的变化,iOS 10里小部件的整体风格是白色。这与iOS 9的截然相反,如果一个扩展要同时支持iOS 9 和iOS 10,对开发者而言将会是一件很痛苦的事。
URL Scheme
其次是URL Scheme,提到通知中心扩展,就不得不提到这个东西。URL Scheme是很多效率类软件的基石,比如Launcher Center Pro。其实苹果对URL Scheme的态度一直是谨慎和暧昧的。了解LCP历史的都知道,这个应用上线之初,苹果可是不允许的,后来才慢慢放开了(其实苹果也一直在试探开发者和用户的边界)。
在iOS 9,苹果加强了对预防URL Scheme滥用的限制,App检测是否可以打开URL Scheme需要将Scheme添加到白名单,而白名单的限制是50个。
同时在iOS 9,一个App在第一次打开一个URL Scheme的时候,是会提示给用户是否要打开,让用户确认的过程增加了其安全性。
iOS 10可以说是快捷启动类应用的灾难(可能有一点点夸张),首先是使用门槛的提高,让快捷启动根本就不快捷。不过更重要的是:iOS 10里面苹果去掉了所有跳转到设置应用的URL Scheme。
这意味着你再也无法在通知中心跳转到蜂窝数据设置界面,虽然你还是能用来打开其他App,但系统设置本身也是快捷启动类应用很重要的一部分功能,毕竟它原本能把你带到路径很深的页面里去。
用iOS 10 Beta版本的朋友,我相信你们已经体会到这一点了。这不是苹果第一次做这样的事了,早在iOS 6时,也有一部分关于系统设置的URL Scheme 被干掉了。
在iOS 10 Beta 5,除通知中心小部件以外的扩展(例如键盘扩展和分享扩展)上都无法打开URL Scheme,不过iOS 10 Beta 6上面这一点已经好了,算是虚惊一场。
结语
总的来说,iOS扩展从在iOS 8被发布,到现在已经逐渐走向成熟,越来越丰富的扩展也正让iOS应用的能力逐步完善。在这过程中我们可以看出,未来的iOS,主应用只是一个方面,对于一些应用来说甚至不是最主要的一个方面。因为iOS应用可以在系统层面的各个角落,通过扩展的方式与用户交互。
主应用将只是iOS应用的一个躯干,而扩展系统是应用的手脚,它们一起是一个整体,一起造就了iOS应用全新的交互方式。