最近在做Today Extension,遇到一些需要注意的地方,把它们分享出来,供大家参考,希望可以帮助到其他人。这篇文章主要记录开发过程中需要注意的地方,在实现方面没有过多的讲述,需要的同学可以参考喵神的博客,下面附有博客地址。
参考内容:
参考资料主要有两个,一是苹果的官方说明文档,建议大家详细阅读;二是喵神的博客,在实现方面说的比较详细,下面是资料的地址:
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接受数据(可以发送数据)。
发布审核通过需注意事项(不遵守审核会被拒绝):
- 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。