扩展运行机制

  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及以上。

时间: 2024-08-09 22:00:48

扩展运行机制的相关文章

SSL/TLS协议运行机制的概述

转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险. (1) 窃听风险(eavesdropping):第三方可以获知通信内容. (2) 篡改风险(tampering):第三方可以

JavaWeb三大组件——过滤器的运行机制理解

过滤器Filter 文章前言:本文侧重实用和理解. 一.过滤器的概念. lFilter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 二.过滤器的运行机制. 没有加Filter的web项目运行机制如下: 加上Filter的web运行机制: 由

(十三)Maven插件解析运行机制

这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其所以然. 1.插件保存在哪里? 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的.在用到插件的时候会先从本地仓库查找插件,如果本地仓库没有则从远程仓库查找插件并下载到本地仓库. 与普通的依赖构件不同的是,Maven会区别对待普通依赖的远程仓库与插件的远程仓库.前面提到的配置远程仓库只会对普通的依赖有效果.当Maven需要的插件在本地仓库不存在时是不会去我们以前配置的远程仓库查找插件的,而是需要有专门的插件远

小学生之浅谈Struts2与struts1的运行机制

Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.(面向对象思想) 2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器. 3.form填充:struts的总控制器ActionServlet在用户提交请求时将数

[转载] PHP工作模型与运行机制

转载自http://www.nowamagic.net/librarys/veda/detail/350 PHP的工作模型非常特殊.从某种程度上说,PHP和ASP.ASP.NET.JSP/Servlet等流行的Web技术,有着本质上的区别. 以Java为例,Java在Web应用领域,有两种技术:Java Servlet和JSP(Java Server Page).Java Servlet是一种特殊类型的Java程序,它通过实现相关接口,处理Web服务器发送过来的请求,完成相应的工作.JSP在形式

ASP.NET的运行原理与运行机制 -转

转自:原文  http://www.cnblogs.com/sntetwt/archive/2011/03/11/1980500.html 当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的页面类型为其加载相应的.dll文件,然后在处理过程中将这条请求发送给能够处理这个请求的模块.在ASP.NET 3.5中,这个模块叫做HttpHandler(HTTP处理程序组件),之所以.aspx文件可以被服务器处理,就是因为在服务器端有默认的HttpHandler专门处理.aspx文

《快速创建网站》2.1 在Azure上创建网站及网站运行机制

现在让我们开始一天的建站之旅. 本文是<快速创建网站>系列的第2篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 1. 网站管理平台WordPress和云计算平台Azure简介2.1 在Azure上创建网站及网站运行机制2.2 域名绑定操作和Azure负载均衡机制2.3 WordPress 初始化和网站管理功能3.1 WordPress 数据导入3.2 WordPress 多站点支持和Azure在线代码编辑器3.3 WordPress 多语言支持 Multi

ASP.NET 运行机制续(完结)

上一篇说到applicationInstance会执行一些列的事件.下面是我在msdn上找到有关asp.net程序生命周期相关的描述及图片 声明周期的起始 ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点. ASP.NET 是 Web 服务器下的 ISAPI 扩展. Web 服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个 ISAPI 扩展处理该请求,然后将该请求传递给合适的 ISAPI 扩展. A

Windows程序内部运行机制

Windows程序内部运行机制 一.        API与SDK Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序,这些函数是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称为API函数.我们在编写Windows程序时所说的API函数,就是指系统提供的函数,所有主要的Windows函数都在Windows.h头文件中进行了说明. SDK的全称是Software Development Kit