前言
iOS定义了程序扩展供开发使用,可以解释为一种用户程序与系统程序的关联。例如:共享,通知中心,键盘。
一、App Extension
应用程序扩展功能与应用程序不同,每个扩展程序都是独立于应用程序的二进制文件。需要注意的是:
At a high level, the best user experience for all extensions is quick, streamlined, and focused on a single task.
这句话很有可能就是你App 扩展功能审核不通过的主要原因。
1.Action Extension
2.Audio Unit Extension
3.Broadcast UI Extension
4.Broadcast Upload Extension
5.Call Directory Extension
6.Content Blocker Extension
7.Custom Keyboard Extension
8.Document Provider Extension
9.iMessage Extension
10.Intents Extension
11.Intents UI Extension
12.Notification Content Extension
13.Notification Service Extension
14.Photo Editing Extension
15.Share Extension
16.share Links Extension
17.Spotlight Index Extension
18.Sticker Pack Extension
19.Today Extension
在“通知中心”的“今日”视图中快速更新或执行快速任务。
二、App Extension 工作方式
应用程序通过扩展应用程序的事件来响应用户的选择,从而激活应用程序,然后使用其在应用程序的的请求事件来执行任务。
扩展应用程序主要与系统应用进行通信。
通常情况下,运行应用程序,其包含的扩展应用程序不一定会运行。在典型的请求/响应事件中,系统应用程序打开扩展应用程序,通过extensionContext来传输数据请求,扩展程序执行操作后,将结果返回给系统程序。
扩展程序可以通过extensionContext.openURL:completionhandler:方法来打开应用程序。任何扩展程序和应用程序都可以访问Shared Resources中的数据。
系统使用进程间的通信来确保系统应用程序和扩展程序协同工作。
三、App Extension访问限制
无法访问shareApplication对象,因此无法使用该对象的任何方法。
应用程序的库文件,头文件不可访问,访问需要重新添加到扩展程序中。
不可访问相机或者麦克风(除iMessage扩展程序,当然iMessage使用需要在扩展程序的Info.plist中配置NSCameraUsageDescription和NSMicrophoneDescription)
不可执行长时间运行的后台任务。(应用扩展程序可以使用NSURLSession对象)
可以使用AirDrop。
四、App Extension的创建
例如:Xcode->File->New->Target->Today Extension
通过这样的方式创建出来的App Extension 一般会有一个文件包,所有的代码操作就在这个文件包中进行。
五、App Extension的方法介绍
当系统应用调用扩展程序是会调用beginRequestWithExtensionContext:方法,扩展程序可以通过extensionContext获取系统数据。
获取:let myExtensionContext = extensionContext
其inputItems成员变量会携带系统信息,例如,分享的标题,内容文本,附件和用户星系。
扩展程序通过调用completeRequestReturningItems:completionHandler:方法,有选择的将NSExtensionItem对象返回到系统程序或着cancelRequetWithError:方法中。