App Extensions 基本学习 iOS8

翻译 2015年07月07日 23:12:18

Extension的类型

Extension有多种类型,每一种类型都绑定到一个称为“扩展点(Extension point)”的系统区域:

“今日(Today,又称为Widget)”:可以快速获取更新或者在通知中心的今日视图中执行一项快速任务。
共享:发布到一个共享网站或者与其它应用程序共享内容。
动作:在另一个应用程序的上下文中操作或查看内容。
照片编辑(仅限于iOS):在照片应用程序中编辑照片或视频。
查找器(仅限于iOS):在查找器中直接显示文件同步的状态信息。
文档提供程序(仅限于iOS):提供对文件库的访问和管理。
自定义键盘(仅限于iOS):用自定义键盘替代iOS系统键盘,并用于所有的应用程序中。

由于每个扩展点都有与之相关的使用策略和专门的API,开发人员必须为他们想要提供的那种功能选择恰当的扩展点。例如,在默认情况下,键盘Extension“不能访问网络,而且不能与其包含应用程序共享同一容器”。通过对Extension进行恰当的配置,这样的限制可以移除,但开发人员仍然需要遵守苹果应用商店审查指南和iOS开发者计划许可协议中的具体的网络键盘指南。

沙箱和安全

众所周知,每个iOS应用程序都有自己的沙箱。通过Mac苹果应用商店分发的OS X应用程序也有类似的要求,不过许多OS X应用程序是在Mac苹果应用商店之外分发的,并不需要遵守这一沙箱要求。

沙箱是苹果iOS安全策略的基石之一。沙箱是为了限制应用程序对文件、首选项、网络资源、硬件等的访问,具体来讲,其目的是为了限制受损的应用程序可能对系统造成的损害。

考虑到并不是所有可以用在应用程序中的API都可以用在Extension中,所以与通常的应用程序相比,App Extension运行在有更多限制的沙箱中。不能在Extension中使用的API标记为不可用宏,如NS_EXTENSIONS_UNAVAILABLE,它会在链接时导致失败。

此外,对于Extension与其它应用程序之间的通信,苹果有几项强制规定:

调用Extension的应用程序即主应用程序不能启动Extension;只有系统可以启动Extension。
当Extension启动后,主应用程序就和它直接通信。
主应用程序永远不和包含应用程序直接通信。
Extension不是一个应用程序,但它由系统生成,并有它自己单独的进程。
为了在包含应用程序和它的Extension之间共享数据,包含应用程序及其Extension都必须是应用程序组的一部分。对于应用程序组的其中两个成员,部分数据可以在两者沙箱之外的第三个容器中共享。
正如Ars Technica的Andrew Cunningham总结的那样,这些规则的最终结果主要是一个应用程序不能进入另一个应用程序的沙箱。这与Android相反,在Android上,内容提供程序和解析程序仍然可以一起工作来为应用程序提供对其它应用程序中数据的访问。

Extension的生命周期

正如苹果文档中的描述,Extension是通过“包含应用程序(containing app)”提供的专门的二进制文件。包含应用程序只负责提供Extension,后者是独立运行的。尽管如此,一个iOS包含应用程序实际上还需要提供Extension之外的某些功能。OS X没有这样的要求,其上的包含应用程序不需要提供任何额外的功能。

文档提到,Extension的生命周期与它的包含应用程序完全没有关系,它由4个阶段组成:

用户选择一个App Extension
系统启动它
App Extension运行
系统终止App Extension
如果两个应用程序需要同样的Extension做相同的工作,那么这会发生在两个独立的Extension进程中。

这一方法的主要动机是,通过生命周期短暂的Extension减少内存使用和能量消耗,并防止一个Extension的错误影响到使用了相同Extension的应用程序。

App适配iOS8遇到的兼容问题

1. 键盘弹出方向与StatusBar方向不一致 在App中,第一个ViewController是只支持竖屏方向(Portrait)的,切换到第二个页面,默认也是Portrait,但用户可以点击...
  • lkeplei
  • lkeplei
  • 2015年05月20日 11:21
  • 1355

解决iOS8安装企业版无反应问题

问题描述:iPhone5S IOS8.1.2原来的企业APP下载后无法安装,点击安装无反应 方法一: 还原网络设置 (注:我想既然有缓存问题引起的(原因看方法二),清除缓存就可以恢复。方...
  • yujianxiang666
  • yujianxiang666
  • 2015年03月31日 18:27
  • 1194

移动APP设计入门文档:iOS8和Android设计规范

最近看到群里的移动产品经理狐狸把整个ios的ui设计规范阅读完成,也发现了一些问题。同时也总了一下自己的总结。跟APP设计群里的小伙伴们进行了分享。 而25学堂也借这个机会,重新跟大家来...
  • jinyeweiyang
  • jinyeweiyang
  • 2014年12月30日 21:53
  • 820

GitExtensions工具使用教程

GitExtensions工具使用教程 第一步:安装 1.双击:GitExtensions24703SetupComplete.msi     选择安装路径       点击I...
  • dao_net
  • dao_net
  • 2016年03月03日 14:13
  • 9856

iOS 8新增:为应用添加扩展(Extensions)

转自  点击打开链接 一、扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性。扩展让app之间的数据交互成为可能。用户可以在app中使用其他应用提供的功能,而无需...
  • sinat_19587549
  • sinat_19587549
  • 2014年12月17日 16:58
  • 1803

GitExtensions工具使用教程

GitExtensions工具使用教程 第一步:安装 1.双击:GitExtensions24703SetupComplete.msi   选择安装路径   ...
  • qq_35146862
  • qq_35146862
  • 2017年02月09日 14:50
  • 1128

iOS8 APP国际化

原文:http://www.ifun.cc/blog/2014/06/07/ios8-appguo-ji-hua/ 1.创建一个Localizable.strings文件  2.c...
  • linzhiji
  • linzhiji
  • 2014年12月11日 10:46
  • 3102

Chrome插件(Extensions)开发攻略

Chrome插件(Extensions)开发攻略 本文将从个人经验出发,讲述为什么需要Chrome插件,如何开发,如何调试,到哪里找资料,会遇到怎样的问题以及如何解决等,同时给出一个...
  • sqzhao
  • sqzhao
  • 2015年09月24日 13:58
  • 782

eclipse插件开发 plugin.xml extensions下右键 没有提示

一般开发插件都要在plugin.xml 中,extensions 下添加定义extenstions,但是有时候,选中add的extensions ,new->只有 Generic,如下图: 而...
  • Ccoffiee
  • Ccoffiee
  • 2015年10月03日 10:02
  • 1101

iOS8的APP移交流程

1. 2. 3. 4. 5. 6. 7. 8. 9.最后补充附加信息提交就可以了。
  • yinxianwei88
  • yinxianwei88
  • 2014年10月23日 14:49
  • 845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:App Extensions 基本学习 iOS8
举报原因:
原因补充:

(最多只允许输入30个字)