App Extension Programming Guide-App Extension Essentials AppExtension编程指南:扩展基础

App Extensions Increase Your Impact 通过应用扩展提升你的应用

iOS8/OS X v10.10

翻译自苹果官方文档 App Extension Programming Guide--App Extensions Essentials

重要提示: 该文档是一个开发过程中使用API或技术的预发布文档。Apple提供该文档的目的在于让开发者尽快熟悉新技术和新的编程接口,使得开发者针对苹果品牌设备进行开发。但是该文档会不断的更新,使用该文档提供的技术开发的软件应该基于最终操作系统软件和最终的文档进行测试。要时刻关注该文档的更新,以便了解新的API和技术特性。

当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他app时使用该项功能。你可以开发一个应用扩展来执行某些特定的任务,用户使用该扩展后就可以在多个上下文环境中执行该任务。比如说,你提供了一个能让用户把内容分享到社交网站的扩展,用户可以在阅读邮件信息或者上网时通过app扩展来发表评论。或者说,如果你提供了一个能展示当前比赛分数的扩展,那么用户可以把它放在通知中心,这样在他们打开Today view时就能看到最新的比分。你甚至可以开发一个提供自定义键盘的扩展,用户可以用它代替iOS系统自带的键盘。

APP扩展的类型

iOS和OS X定义了几种应用扩展的类型,每一种类型的扩展都对应系统中的一块区域,比如分享、通知中心以及键盘等。我们把这些支持扩展的区域称为扩展点。每个扩展点都定义了使用策略并提供了API,你可以用来针对该区域创建扩展。要注意的一点是,当你针某个扩展点开发应用扩展时,该应用扩展的功能必须要符合该扩展点的功能特性。

table 1-1 列出了iOS和OS X中的扩展点,并列举了对应扩展点的示例任务。

由于系统定义了扩展特定领域,所以当你在开发应用扩展时,很重要的一点是,你要选择最能匹配你想在app中提供的功能的区域。比如说你要开发一个分享信息的应用扩展,那么你只能选择分享扩展点,而不能使用Today或Action扩展点。

重要提示:你开发的app扩展要精确地匹配Table 1-1中列出的扩展点。你不能开发一个通用的扩展来匹配一个以上的扩展点,

Xcode和App Store帮助你创建并交付应用扩展

应用扩展不同于应用,虽然你需要基于应用去开发应用扩展,但是每个应用扩展都是独立于应用运行的二进制文件。

当你要创建一个应用扩展时,需要在项目中创建一个新的Target。和其他 Target 一样,扩展 Target 将设置信息和相关文件打包在Products文件下生成一个扩展名为.appex的包。你可以在应用项目中创建多个扩展Target(一个应用程序可以包含一个或多个应用扩展,该应用程序称为主体应用程序)。

开发一个应用扩展最好的切入点是使用 Xcode 在两个平台上为每个扩展点提供的模板去开发。每个模板包含扩展点的具体实现文件和相关设置,并生成独立的二进制文件添加到应用程序的包中。

注意:在iOS中,包含扩展的应用必须提供一个扩展之外的功能。而在OS X中没有这个硬性要求,一个包含扩展的应用不要求必须提供一个额外功能。

为了将扩展分发给使用者,你需要提交一个包含扩展的应用到App Store。用户只要下载并安装了你的应用,那么同时也自动安装了你的应用扩展。

当安装了应用扩展之后,用户首先必须要开启他们。通常,用户可以在他们当前任务的上下文环境中启动扩展。比如,如果你的扩展启用了“Today”通知,那用户可以在通知中心编辑“Today ”view 来添加你的扩展。在其他情况中,用户可以使用 iOS 中的“Settings”或者 OS X 中的“System Preferences”来启用和管理扩展。

用户在不同的情形下体验不同的应用扩展

虽然每种类型的应用扩展的功能都是不同的,但对大部分扩展来说,它们在用户体验上还是有一些共同点的。如果你准备开发一个应用扩展,有一点很重要,那就是要理解在你选择的扩展点中,用户体验是什么样的。从一个更高角度看,对于所有扩展来说,最佳的用户体验是快速、流畅以及只关注单一任务。

通常用户通过与系统提供的用户界面进行交互来开启应用扩展。比如说,用户在app中通过激活系统提供的分享按钮来访问 Share 扩展,并从展示的列表中选择扩展。一个应用扩展必须要提供一个图标,以便用户选择和识别,通常情况下,应用扩展的图标与应用程序的图标是相同的。

虽然大多数的应用程序扩展都提供了一些自定义的UI元素,但一般用户不会看到你的自定义用户界面,除非他们进入到应用程序扩展中。当用户进入应用扩展,你的自定义UI可以让用户知晓他们正进入一个新的上下文环境。由于用户可以把你的扩展和当前应用区别开来,所以他们会欣赏你提供的独特功能。当用户意识到扩展其实是独立运行的实体时,他们也可以确认并移除体验不好或功能不好的扩展。

为了让用户平滑过渡到你的应用程序扩展,你要斟酌自定义界面与扩展点界面的风格,做一个权衡。比如说,一个很好的方法就是让你的插件看起来像是通知中心中原生的Widget,再比如说照片编辑扩展,你应该创建一个和 iOS 中 Photos 应用风格相协调的用户界面。

注意:即使你的应用程序扩展没有展示自定义UI(不包括图标),但用户仍然知道该扩展不同于当前的应用,因为它们需要采用特定的操作来激活。

转载于:https://juejin.im/post/5bf1b9a0e51d45237600646a

[译]AppExtension编程指南:扩展基础1相关推荐

  1. OpenCL Programming Guide - OpenCL 编程指南 - 书中源代码

    OpenCL Programming Guide - OpenCL 编程指南 - 书中源代码 1. Heterogeneous Compute http://www.heterogeneouscomp ...

  2. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  3. OpenMP: OpenMP编程指南

    from: OpenMP: OpenMP编程指南 进入多核时代后,必须使用多线程编写程序才能让各个CPU核得到利用.在单核时代,通常使用操作系统提供的API来创建线程,然而,在多核系统中,情况发生了很 ...

  4. 多线程编程指南 part 2

    多线程编程指南 Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA95054 U.S.A. 文件号码819–7051–10 2006 ...

  5. 《Python面向对象编程指南》——2.7 __del__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第2章,第2.7节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. OpenMP编程指南

    OpenMP编程指南 进入多核时代后,必须使用多线程编写程序才能让各个CPU核得到利用.在单核时代,通常使用操作系统提供的API来创建线程,然而,在多核系统中,情况发生了很大的变化, 如果仍然使用操作 ...

  7. 【高质量编程指南笔记】

    高质量编程指南-笔记 一.文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 定义(.cpp) 文件的结构 1.4 头文件的作用 1.5 目录结构 二.程序的版式 2.1 长行拆分 2. ...

  8. 高质量 C++/C 编程指南

    高质量 C++/C 编程指南 文件标识: 文件状态 [ ] 草稿文件 [√]正式文件 [ ] 更改正式文件 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001 年7 月24 日 高质量 C ...

  9. 高质量C++/C 编程指南

    高质量C++/C 编程指南 文件标识: 当前版本: 1.0 作 者: 林锐 博士 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 完成日期: 2001 年7 月24 日 高质量C+ ...

最新文章

  1. 设计模式之访问者模式、例子分析
  2. linux 无响应_系统加固之Linux安全加固
  3. 2017.3.14 不重复数字 思考记录
  4. python如何爬取图片到指定文件夹论文_基于Python的图片爬虫程序设计
  5. python随机生成两个一维数组_如何用python随机产生一个一维数组
  6. 360搜集隐私程序员级分析,供方舟子及大众参考
  7. Mask_rcnn openpose realsense
  8. linux 内网共享文件夹_linux局域网文件共享服务器
  9. List集合排序(Lambda表达式)
  10. IVS-163/167雷达距离测量的误差处理
  11. IP地址(定义、分类、掩码及保留地址)
  12. 武汉大学计算机学院乒乓球室,武汉大学经济管理学院教职工乒乓球队在武汉大学师生乒乓球赛中获佳绩...
  13. Flutter for ble 之set_notification_error, could not locate CCCD descriptor for characteristic分析(原生角度)
  14. 【防骗】来电显示号码竟可任意修改
  15. 过去 10 年,阿里在开源圈做了什么?
  16. 还弄不懂相对路径和绝对路径,这篇文章带你简单剖析
  17. 【微服务】SpringBoot 搭建微服务初体验
  18. 远程访问操作mysql数据库
  19. 电脑计算机属性打不开闪退,软件打不开闪退怎么办
  20. 工具BlueSoleil千月蓝牙破解版,最好的蓝牙驱动

热门文章

  1. C++ 返回当前类名
  2. java代码里出现中文乱码怎么解决
  3. 内核开发知识第二讲,编写Kerner 程序中注意的问题.
  4. 前端框架之Vue(1)-第一个Vue实例
  5. Linux systemd limits
  6. (淘宝无限适配)手机端rem布局详解(转载非原创)
  7. 从SourceForge上获取CVS管理的开源代码
  8. 不生成Excel文件,将Datatable数据 Response.write 输出生成Excel (转载)
  9. Hive,Hbase shell 中文变问号(??) 的解决方法
  10. 解决Maven的jar包冲突问题