iOS App Extension入门
来源:互联网 发布:char占几个字节 java 编辑:程序博客网 时间:2024/06/14 15:23
原文链接iOS App Extension入门
介绍
应用扩展(App Extension)从iOS 8正式登录iOS平台,开发者可以通过应用扩展为用户提供系统特定的扩展功能。开发者通过扩展点(Extension Point)来指定特定的系统功能,如Today扩展,通知栏扩展,Messages扩展,电话簿扩展等等。
创建应用扩展
应用扩展必须依附于一个宿主App(iOS10有更新,见下文),在现有工程中,选择File->New->Target->Application Extension来创建一个应用扩展
开发者可以根据自己的业务需求创建不同的应用扩展,也可以在一个App中创建多个应用扩展。
iOS10开始,Messages扩展可独立于宿主App创建:
Messages Application将自动创建一个Sticker Pack和Messages Extension。
参考iMessage Apps and Stickers, Part 1 WWDC 2016 第7分钟的介绍。
Xcode会为我们自动生成一些文件,有两种类型:
- 含用户交互界面的
如:Today Extension
包含一个ViewController,一个ui和一个plist。
同类型的还有Message Extension(需要Xcode8), Share Extension, Action Extension等。
2.不含用户交互界面的
如:Share Link Extension
包含一个Handler和plist。
同类型的还有Call Directory Extension(需要Xcode8)等。
这两种类型的plist大致相同,除了NSExtension这个属性。
含用户交互界面的应用扩展会定义NSExtensionMainStoryboard
,通常会是MainInterface;而不含用户交互界面的应用扩展则会定义NSExtensionPrincipalClass
,通常会是XXXHandler(在Share Link Extension的例子中是RequestHandler)。
生命周期
了解应用扩展的生命周期,首先要了解两个概念:
1.容器App (container app)
2.宿主App (host app)
容器App是包含应用扩展的App,就是应用扩展所依赖的App;
宿主App是提供应用扩展界面显示或者功能的App。
其次:
虽然容器App包含应用扩展,但它与应用扩展有着完全不同的生命周期,应用扩展与容器App拥有不同的进程。
1.用户在宿主App中选择应用扩展(查看其UI或者点击启动其功能)。下面会说明
2.系统启动应用扩展。在此期间,宿主App会调用相关方法启动应用扩展,应用扩展可以通过ExtensionContext的到交互信息。
3.应用扩展执行业务逻辑。有些应用扩展在这个阶段不需要和宿主App进行交互,如Share Link Extension;有些应用扩展则需要和宿主App保持联系以监听用户操作或接受命令,如iMessage Extension。
4.应用扩展执行完毕,系统将其终止。
在应用扩展的生命周期中,甚至不需要与容器App有任何交互。实际上,应用扩展运行时,容器App也不需要处于运行状态(除非主动调用)。
应用扩展响应宿主App请求
我们在上文提到了应用扩展的两种类型,应用扩展的类型不同,响应请求的方式也不同。
有用户交互界面的应用扩展在宿主App中展示的时候启动,并且加载UI。我们可以在ViewController的loadView
等方法中通过self.extensionContext
(NSExtensionContext 类型)来获取宿主App传给应用扩展的信息。
无用户交互界面的应用扩展在Handler(NSExtensionPrincipalClass
指定的Handler)中直接接受来自宿主App的请求,调用方法:
- (void)beginRequestWithExtensionContext:(NSExtensionContext *)context;
当应用扩展响应宿主App,并请求完业务逻辑之后,需要主动告知宿主App。通过调用NSExtensionContext
的这两个方法:
- (void)completeRequestReturningItems:(nullable NSArray *)items completionHandler:(void(^ __nullable)(BOOL expired))completionHandler;
- (void)cancelRequestWithError:(NSError *)error;
应用扩展执行
completeRequestReturningItems:
之后,系统可以随时将其终止,如果是有用户交互界面的应用扩展,执行该方法之后,viewController会立刻dismiss(有用户交互界面的应用扩展通常都是通过presentViewController
的方式显示的)。
参考
App Extension Programming Guide
NSExtensionContext Class Reference
- iOS App Extension入门
- IOS App extension close
- iOS 8.0 App Extension简介
- iOS开发之App Extension (应用扩展)- 入门介绍篇
- iOS开发之App Extension(应用扩展)之 -- Today Extension
- IOS 8 App Extension编程 TodayViewController
- iOS开发iOS8扩展App Extension 中文版
- iOS:App Extension Keyboard自定义高度
- iOS:App Extension Keyboard自定义高度
- 学习iOS App Extension过程一
- iOS APP Extension开发之TodayExtension
- iOS开发iOS8扩展App Extension 中文版
- 揭秘 iOS App Extension 开发 —— Today 篇
- ios extension
- 添加bitcode的支持:iOS App,App Extension以及Watch App
- APP Extension Demo
- 【IOS】In-App Purchases入门
- How to create iOS 8 Today extension and share data with containing app – tutorial
- HDU 2063 过山车 二分匹配模板题
- 在一个service中启动Activity
- LevelDB学习之路--README.MD
- sha1加密java代码
- CS231n-机器学习中matplotlib绘图基础.md
- iOS App Extension入门
- Leetcode-31. Next Permutation
- Servlet 生命周期、工作原理
- Tomcat配置Https协议
- cSS文件中第一行@charset "utf-8";的作用
- 存储结构与磁盘划分
- 单片机—花样灯—代码
- 颜色平衡和偏色调节
- Android:ViewPager适配器PagerAdapter的使用