Open
Description
名词和术语:
名称 | 解释 |
---|---|
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 |
要求
- At a high level, the best user experience for all extensions is quick, streamlined, and focused on a single task.
- 尽量1s内启动,太慢了系统会自动关闭
- 单一职责,必须匹配指定的Extension point.
- Ensure Your iOS App Extension Works on All Devices.
- App Extension自定义UI要和对应的Extension Point协调
App Extension和载体应用关系
开发,发布,安装,启动,执行:
- 一起开发,发布,安装;
- App Extension由Host App发起启动请求,后由系统启动,并建立App Extension和Host App之间的通讯渠道;
- App Extension和载体应用本质互相独立的Bundle:
- 在两个独立的进程里执行
- 独立的Bundle ID,Scheme(不过这些配置一般派生自载体APP,比如载体APP叫
com.issuer.issuerApp
, 那App Extension可以是com.issuer.issuerApp.UIExt
)
如何工作的
生命周期
通讯
-
主要AppExtension和host app之间的通讯(
request/response
事务模式的通讯方式)
本质上系统使用进程间通信来确保主机应用程序和应用程序扩展可以协同工作以实现一致的体验 -
AppExtension和Containing App之间可以有限的通讯,只能打开Containing App
限制
创建App Extension
- 选择合适的Extension Point
- 创建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模板
- target代码结构
不使用模板
测试App Extension
注意:
- 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