最近在作Today Extension,遇到一些须要注意的地方,把它们分享出来,供你们参考,但愿能够帮助到其余人。这篇文章主要记录开发过程当中须要注意的地方,在实现方面没有过多的讲述,须要的同窗能够参考喵神的博客,下面附有博客地址。html
参考内容:app
参考资料主要有两个,一是苹果的官方说明文档,建议你们详细阅读;二是喵神的博客,在实现方面说的比较详细,下面是资料的地址:ui
https://developer.apple.com/library/prerelease/content/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW2htm
https://onevcat.com/2014/08/notification-today-widget/对象
使用新建target的方式建立app extension,在info.plist中,使用 NSExtensionPointIdentifier key来标识 extension 类型。发布时不能直接将app extension上传至app store,只能将其的 containing app 上传至app store。进程
由于 app extension 与 containing app 是两个进程,如需共享数据,须要在Capabilities中开启 APP Groups 权限。开发
扩展中不能使用的API:文档
- sharedApplication 相关对象方法。
- 被标记为NS_EXTENSION_UNAVAILABLE或与该宏定义类似的对象、方法以及不可以使用的framework(HealthKit、EventKit等)。
- 访问相机与麦克风。
- 执行长时间的后台任务。
- 使用AirDrop接受数据(能够发送数据)。
发布审核经过需注意事项(不遵照审核会被拒绝):get
- app extension target 的 Architectures build settings 必须包含 arm64(iOS) 或者 x86_64(OS X)。
- app extension的containing app必须支持64-bit。
- 必须同时支持iPhone、iPad。
- 签名时必须使用相同的证书与描述文件。
- containing app必须向用户提供功能,不可以只包含扩展。
- extension引用的frameworks必须支持64位。
- Always choose “Frameworks” as your Copy Files build phase destination. If you instead choose the “SharedFramework” destination, the App Store will reject your submission.("copy file"中的"destination"需选择"Frameworks")
开发实践注意事项:博客
- 若是须要共用文件,可在project中新建framework类型target,若是iOS版本低于8.0可将framework设置为静态库,并在General中勾选“allow app extension APIs only”。
- 须要从today extension打开containing app时,调用[self extensionContext]方法获取NSExtensionContext对象,并调用NSExtensionContext对象的openURL:completionHandler:方法唤起containing app。