写点什么

深入 App Extensions for iOS 8

  • 2014-07-22
  • 本文字数:2152 字

    阅读完需:约 7 分钟

近日,苹果宣布了 App Extensions for iOS 8 ,它允许开发人员将功能和内容扩展到单个应用程序之外。

其中,App Extensions 允许修正的两个主要 iOS 限制是:由Open In 系统创建的应用程序之间不必要的数据复制无法替代苹果的键盘。这种状况与Android 平台允许用户借助 Widget 自定义键盘形成鲜明的对比。

然而,其中有一个最可能的误解需要澄清一下,就是iOS 8 App Extensions 不同于 Android Indents Ars Technica 网站撰稿人 Andrew Cunningham 这样写道。根据 Google 的描述:

Intent 提供了一种机制,用于不同应用程序代码之间的后期运行时绑定。它主要用来启动 Activities,因此可以将它看作是 Activities 之间的粘合剂。从本质上讲,它是一个无源数据结构,存放要执行动作的抽象描述。

虽然 Extension 在很多情况下与 Intent 没有什么不同,但在 iOS 8 中,App Extension 系统的整体设计使得它与 Intent 有很大的不同。

Extension**** 的生命周期

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

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

  1. 用户选择一个 App Extension
  2. 系统启动它
  3. App Extension 运行
  4. 系统终止 App Extension

如果两个应用程序需要同样的 Extension 做相同的工作,那么这会发生在两个独立的 Extension 进程中。

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

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 与其它应用程序之间的通信,苹果有几项强制规定:

  1. 调用 Extension 的应用程序即主应用程序不能启动 Extension;只有系统可以启动 Extension。
  2. 当 Extension 启动后,主应用程序就和它直接通信。
  3. 主应用程序永远不和包含应用程序直接通信。
  4. Extension 不是一个应用程序,但它由系统生成,并有它自己单独的进程。
  5. 为了在包含应用程序和它的 Extension 之间共享数据,包含应用程序及其 Extension 都必须是应用程序组的一部分。对于应用程序组的其中两个成员,部分数据可以在两者沙箱之外的第三个容器中共享。

正如 Ars Technica 的 Andrew Cunningham 总结的那样,这些规则的最终结果主要是一个应用程序不能进入另一个应用程序的沙箱。这与 Android 相反,在 Android 上,内容提供程序解析程序仍然可以一起工作来为应用程序提供对其它应用程序中数据的访问。

反应

App Extension 已经在 iOS 开发人员中间引发了极大的兴趣。Cunningham 说,“Extension 将会对新操作系统产生最大最显著的影响”。

MacStories 的 Federico Viticci 收集了若干开发人员对苹果公告的反应,他说“Extension 对于iOS 应用程序生态系统的影响很难量化,但是……考虑到开发人员对苹果公告的反应,在今年秋天,我们将看到许多又新又酷的东西”。

另一方面,安全专家提出警告,更强大的功能往往带来更大的风险。安全公司 Symantec 写到:“在 iOS 8 发布之前,我们无法看到攻击是上升还是下降,因此,我们无法知道这些功能效果如何”,同时他们也承认“根据目前获得的信息,少数安全功能应该会增强 iOS 设备的防护等级”。

查看英文原文:**** App Extensions for iOS 8 in Depth

2014-07-22 21:587141
用户头像

发布了 256 篇内容, 共 77.2 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

TDSQL分布式数据库的架构与解耦

腾讯云数据库

数据库 tdsql

Golang: 如何使用正则表达式,并实战爬取手机号

Regan Yue

正则表达式 爬虫 Go 语言 9月日更

【VueRouter 源码学习】第八篇 - $route、$router 与 router-link 组件的实现

Brave

源码 vue-router 9月日更

联想TruScale服务定义IT服务新标准,助力中国企业全面抢滩智能化

科技范儿

首场“说透数字化转型专题讲座”将于 9 月 15 日在天津举办

InfoQ 天津

"云智一体"全场景智能视频技术与应用解析白皮书下载申请

百度开发者中心

白皮书 云智一体 智能视频

MESI缓存一致性协议

Java 架构 面试 后端

亿级流量下平滑扩容:TDSQL水平扩容 VS 垂直扩容

腾讯云数据库

数据库 tdsql

想要入职阿里P6?最少啃完这本500页Java并发多线程源码笔记

Java 编程 面试 多线程 阿里

NDK-原生 API

Changing Lin

9月日更

大公司运维监控怎么做?从哪些方面考虑?

行云管家

云计算 运维 运维监控 运维审计 数据监控

海量数据,极速体验——TDSQL-A技术核心架构02

腾讯云数据库

数据库 tdsql

声网发布在线K歌房解决方案,提供一站式接入版权曲库与K歌组件

ToB行业头条

声网

了解JDBC层之QueryDSL

邱学喆

QueryDSL SQLQueryFactory

阿里官方保姆级Java技术图谱发布!够学到春节了,赶紧收藏!

Java 面试 阿里 大厂 金九银十

OceanBase 数据库大赛“推荐官招募令”,做推荐官,让优秀选手C位出道!

OceanBase 数据库

数据库 比赛 oceanbase OceanBase 开源 OceanBase 数据库大赛

C语言中动态内存是如何分配的?

华为云开发者联盟

数组 内存 动态内存 内存分配 C语音

读了这篇SpringBoot底层原理让我在阿里成功涨薪40%,感谢

Java 编程 面试 涨薪 阿里

☕【Java技术指南】「并发编程专题」Fork/Join框架基本使用和原理探究(基础篇)

洛神灬殇

Java forkjoin forkjoinpool 9月日更

iOS 屏幕旋转的实践解析

ZEGO即构

ios 音视频 屏幕旋转

你知道线程池是如何退出程序的吗?

华为云开发者联盟

线程 高并发 线程池 任务队列

App 不想被“点名”,mPaaS 隐私合规检测为开发者护航数字生态建设

蚂蚁集团移动开发平台 mPaaS

移动开发 mPaaS 监管合规 隐私安全

TDSQL的分布式事务处理技术:高效的分布式事务双一致性

腾讯云数据库

数据库

tcpdump 抓包与 scapy 解析(qbit)

qbit

udp TCP/IP tcpdump

数据脱敏是什么意思?有什么好处?

行云管家

数据库 数据安全 数据脱敏 数据库安全

被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?

华为云开发者联盟

TCP 网络 报文 挥手 FIN

Tapdata Real Time DaaS 技术详解 PART I :实时数据同步

tapdata

TDSQL水平扩容实践案例

腾讯云数据库

数据库 tdsql

揭秘超分辨率的正确打开方式

OpenIM

一周信创舆情观察(8.30~9.5)

统小信uos

TDSQL水平扩容背后的设计原理

腾讯云数据库

数据库 tdsql

深入App Extensions for iOS 8_Apple_Sergio De Simone_InfoQ精选文章