从 iOS 应用扩展谈起

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,正式版发布之后可能有出入)

通知中心小部件

首先是通知中心小部件的改变,上面已经提到过一点了,目前用户下拉通知中心默认是不会看到小部件的,这使得使用的门槛提高了。另外,通知中心小部件被设计成有两种模式,折叠和展开,与之前扩展的高度由开发者控制不同,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 应用全新的交互方式。

作者:钟颖Cyan
链接:https://zhuanlan.zhihu.com/p/22081285
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值