在iOS 8出现以前,第三方开发者社区就已经表现出了极大的创造力,试图在这个密闭的iOS生态花园里玩出一些“新花样”来。科技博客MacStories的创始人Federico Viticci举了这样一些例子:
- 使用URL schemes来快速启动其他应用的进程;
- 利用JavaScript代码在浏览器里与第三方应用交互;
- 开发者创建他们自己的SDK和应用生态系统来解决文件管理的问题;
- 第三方输入法Fleksy甚至推出了一套iOS SDK,让第三方应用可以内置他们的输入法。
这些看上去勉强算得上是“hack”的小伎俩,同时也透露出了当时iOS开发者们的无奈和执着。这些障碍终于要随着iOS 8的发布而被扫清,尽管来得有点晚——在iOS 8上,应用插件是最重要的新功能,它使得第三方应用之间的数据交换成为了可能。
(宿主应用和容器应用可以借助应用扩展进行数据交换。)
之前,我在OS X Yosemite评测里介绍过新的系统级别应用插件——从Yosemite开始,第三方应用可以将自己的功能集成到宿主应用(Host app)中去,这使得用户不必切换应用程序就可以使用容器应用(Containing app)的功能——WWDC上演示的Markup就是很好的例子。iOS 8上的情况与此类似,你能够在宿主应用里用上应用插件的功能。
换句话说,插件就是苹果提供给第三方应用来进行数据交换和功能桥接的工具。在OS X Yosemite上,苹果甚至在系统偏好面板里提供了一个跳转到Mac App Store的入口,使得用户可以快速获取第三方插件。
Federico Viticci整理了iOS和OS X所支持的插件类型:
- 今天(iOS和OS X):在通知中心的今日栏目里展示小工具(widget),例如苹果在OS X Yosemite的通知中心里增加了计算器小工具;
- 分享(iOS和OS X):将内容其他地方;
- 操作(iOS和OS X):在另一个应用里执行应用插件操作;
- 图片编辑(iOS):使用第三方应用插件在苹果自带的照片应用里编辑照片或视频;
- Finder同步(OS X):提供了一种修改Finder界面的方式;
- 云端文件管理器(iOS)::关联云服务(不仅仅是iCloud)后,你可以从第三方应用里直接从云端选取文件;
- 自定义输入法(iOS):替代系统输入法。
所有的插件只能被捆绑在应用内,所以用户并不可以单独下载iOS插件,开发者也不能向App Store提交单独的插件。苹果称他们希望让用户对插件有完全的控制权,这样用户就可以随时激活和关闭插件。开发者既不能在App Store上提交独立的插件,也不能提交只包含插件功能的应用。
不同的插件,需要以不同的方式来进行激活。例如,小工具插件需要在通知中心里进行激活或关闭;输入法需要在设置的相应区域里进行设置;照片编辑器和云端文件管理器只会在特定的情形下才会出现(比如你在使用照片应用时,或者你在选取文件时);分享和操作扩展能够在任何应用里被唤起,但开发者必须为扩展添加激活原则(Activation Rules),使得扩展只有在用户执行特定操作(比如分享链接或文档)时才会出现。
尽管必须被打包在容器应用里,但扩展却是独立于容器应用运行的,苹果这么做的原因是为了控制内存配额。小工具尤其受到限制,因为所有小工具是同时运作的。扩展也不能长时间运行,任务完成后系统就会杀掉相应的应用扩展进程。
总而言之,iOS 8应用之间仍然不能够直接进行数据交换。扩展就像是沙箱里的沙箱,使得容器应用与宿主应用之间只能在有限的范围内实现间接的数据交换。你看到的iOS 8,仍然没有Android那么开放,但是它还是相对安全的,可以更好地控制隐私权限,而且并没有比以前更耗电。
App Store正在变得越来越拥挤,应用开发商之间的竞争也已经变得越来越剧烈。但对所有的iOS和OS X开发者而言,应用扩展是全新的起点——在这里,没有人跑在你前面。
正如第三方输入法Fleksy的创始人Ioannis Verdelis所说的:“扩展开放了全新的可能性。”
图片出处:Apple;你可以在这里查看App Extension Programming Guide
相关阅读:
【PW晨报】Facebook“错误”发布Slingshot,亚马逊将推出订阅支付管理服务
“Tim Cook思维”和苹果9年来的首次拆股
【PW晚报】“把文章写好看了,别的管他妈!”互联网行业似乎与此相反
在iOS 8上开发移动健康服务?你不如生产配件