Skip to content

IOS App Extension #273

Open
Open
@yaofly2012

Description

@yaofly2012

名词和术语:

名称 解释
App extension 应用扩展
Containing app 载体应用,即应用扩展所属的应用(an app that contains one or more extensions is called a containing app)。应用扩展的容器在我们实现应用扩展的时候一并开发出来的。
Host App 宿主应用,唤起AppExtension的App
Extension Point 扩展点(官方定义:A system area that enables extensions is called an extension point),是指一个特定的,范围明确的任务。即表明App Extension的能力(使用场景)。每个App Extension都对应且只能对应一个预定义的扩展点。
Extesion type template XCode对每个Extension point提供target模板
Endpoint
Principal Class App Extension的主入口类。当宿主App调用App Extension时,Extension Point会实例化Principal Class。
storyboard The default storyboard file for the extension, usually named MainInterface.
App Groups
separate screen
code sign
Embedded Framework iOS Library, Bundle, and Frameworks, NSBundle
Link Binary

要求

  1. At a high level, the best user experience for all extensions is quick, streamlined, and focused on a single task.
  • 尽量1s内启动,太慢了系统会自动关闭
  1. 单一职责,必须匹配指定的Extension point.
  2. Ensure Your iOS App Extension Works on All Devices.
  3. App Extension自定义UI要和对应的Extension Point协调

App Extension和载体应用关系

开发,发布,安装,启动,执行:

  1. 一起开发,发布,安装;
  2. App Extension由Host App发起启动请求,后由系统启动,并建立App Extension和Host App之间的通讯渠道;
  3. App Extension和载体应用本质互相独立的Bundle
  • 在两个独立的进程里执行
  • 独立的Bundle ID,Scheme(不过这些配置一般派生自载体APP,比如载体APP叫com.issuer.issuerApp, 那App Extension可以是com.issuer.issuerApp.UIExt)

如何工作的

生命周期

image

通讯

image

  1. 主要AppExtension和host app之间的通讯(request/response事务模式的通讯方式)
    本质上系统使用进程间通信来确保主机应用程序和应用程序扩展可以协同工作以实现一致的体验

  2. AppExtension和Containing App之间可以有限的通讯,只能打开Containing App

限制

创建App Extension

  1. 选择合适的Extension Point
  2. 创建App Extension Target

处理输入项:

After users work with the input items (if doing so is part of using the app extension), an app extension typically gives users a choice between completing or canceling the task

App Extension模板

  1. target代码结构

不使用模板

测试App Extension

注意:

  1. An app extension target must include the arm64 (iOS) or x86_64 architecture (OS X) in its Architectures build settings or it will be rejected by the App Store

其他场景

参考

  1. App Extension Programming Guide
  2. 又一篇 iOS Extension 入门(一):基础 & 分享扩展
  3. iOS开发系列--App扩展开发

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions