扩展运行机制

  1. 简介

  在安装扩展之后,扩展并不会自动运行,用户必须执行特定的操作来启用扩展。如果是Today扩展,用户可以在通知中心的Today视图中编辑启用扩展。如果是自定义键盘扩展,用户需要在系统设置的通用选项下的键盘选项中启用自定义键盘扩展。如果是Share扩展,用户只需点击系统提供的分享按钮,即可在分享列表中找到分享扩展。

     一个扩展并不是一个app,他的生命周期和运行环境不同于普通app。在生命周期方面,扩展的生命周期从用户在另一个app中选择扩展开始,一直到扩展完成了用户的请求生命周期结束。在运行环境方面,扩展的限制要比普通的app严格,扩展的可用内存上限以及可用的API都比普通app要少。严格限制扩展的内存是因为在同一时间可能会有多个扩展同时运行,如widget扩展。

      调用扩展的应用称为host app,对于Widget扩展,host app就是Today。host app会在扩展的有效生命周期内定义一个扩展的上下文。通过扩展上下文,host app 可以和扩展互传数据。注意:扩展之和host app直接通信,扩展与containing app ,以及containing app和host app之间不存在通信关系。如果扩展需要打开containing app,则通过自定义URL scheme方式实现,而不是直接向containing app发送消息。

      扩展是一个单独的个体,扩展拥有独立的target,独立的bundle,独立的运行进程,独立的地址空间。这意味着即使你的containing app不在运行,系统也可以启动扩展。或者你的containing app处于挂起状态,同样不会影响扩展的运行。所以系统可以单独对扩展执行优化。

 

  2. 创建

  在创建扩展之前,你需要创建一个用来包含扩展的常规的app项目。这个包含扩展的app称为containing app。在创建好containing app之后,选择File-->New-->Target菜单,选择一个适当的扩展目标模板。每一个扩展目标模板都包含了与扩展点相关的文件和设置。一个containing app可以包含多个不同类型的扩展。

    每一个扩展目标模板包含一个头文件和实现文件,一个Info.plist文件,以及一个storyboard文件。Info.plist文件包含了对扩展的配置信息,其中最重要的键是NSExtension.

    为了将扩展提交苹果商店,你需要提交你的containing app。并且需要注意,除了扩展必须包含的功能以外,同时containing app还需要提供一些功能,而针对OS X平台的扩展则无此限制。当用户安装了你的containing app,containing app中包含的扩展也会一同被安装。

    注意64位架构:一个应用程序扩展在Architectures设置中必须要包含arm64的架构,否则在上传App Store时会被拒绝。创建完一个应用扩展后,可以在Xcode的“Standard architectures”设置选项中设置arm64架构。在最新的Xcode7中,这个已经是默认的64位架构了。

    如果你的包含扩展的应用程序使用了一些嵌入框架,那么你的应用程序也必须要包含arm64架构,否则也会被拒绝。

    在大多数情况下,你可以通过Perferences或Setting中启用应用扩展或者授予权限来测试默认的应用扩展,然后可以通过其他应用来访问他。比如你可以在OS X通过Safari中打开一个页面来测试分享扩展,点击分享按钮,然后选择要测试的扩展即可。

 

3.  详解

扩展Extension是iOS8中引入的非常重要的新特性。扩展让App之间的数据交互成为可能。用户可以在App中使用其他应用提供的功能,而无需离开当前的应用。

      在iOS8之前,每一个App在物理上都是彼此独立的,App之间不能互访彼此的私有数据。而在扩展引入之后,其他App可以与扩展进行数据交换。基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,他拥有自己的bundle,bundle后缀名是.appex.   扩展bundle必须包含在一个普通应用的bundle内部。

     iOS8系统有6个支持扩展的系统区域,分别是Today,Share,Action,Photo Editing,Storage Provider,Custom keyboard。支持扩展的系统区域也被称为扩展点。

注意:Finder扩展点只支持OS X,Today、Share、Action这3个扩展点同时支持iOS 和OS X。而Photo Editing、Storage Provider、Custom keyboard这3个扩展点只支持iOS。 所以说iOS支持6个扩展点。

1.Today/Widget

对于赛事比分,股票,天气,快递这类需要实时获取的信息,可以在下拉的通知中心的“Today视图”中创建一个Widget实现。Today扩展又称为Widget。

 

2.Share

在iOS8之前,用户只有Facebook,Twitter,Flickr,Vimeo、新浪微博、腾讯微博有限的6个分享选项可以选择。如果希望将内容分享到其他平台,则需要使用其他的第三方平台,如友盟、ShareSDK等,在iOS8中,开发者可以创建自定义的分享选项。

 

3.Action

Action在所有支持的扩展点中扩展性最强的一个。它可以实现转换另一个App上下文中的内容。苹果在WWDC大会上演示了一个Bing翻译动作的扩展,他可以将在Safari中选中的文本翻译成不同的语言。

 

4.Photo Editing

在iOS8之前,如果你想为你的照片添加一个特殊的滤镜,你需要进入第三方app中,这个过程是相当繁琐的。在iOS8中,你可以直接在Photos中使用第三方的app提供的Photo Editing扩展完成对图片的编辑,而无需离开当前的app。

 

5.Custom Keyboard

苹果公司在2007年率先推出了触摸屏键盘,但一直没有多大改进。Android则将键盘权限开放给了第三方开发者,所以出现了很多优秀的输入法。在iOS8中,苹果终于将键盘权限开放给了第三方开发者,自定义键盘输入法可以让用户在整个系统范围内使用。搜狗输入法在iOS8中推出,如果你想在iPhone中使用搜狗输入法,则必须安装iOS8及以上。

posted @ 2015-10-30 18:23  guangleijia  阅读(369)  评论(0编辑  收藏  举报