iOS Today Extension开发分享

最近在作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:文档

  1. sharedApplication 相关对象方法。
  2. 被标记为NS_EXTENSION_UNAVAILABLE或与该宏定义类似的对象、方法以及不可以使用的framework(HealthKit、EventKit等)。
  3. 访问相机与麦克风。
  4. 执行长时间的后台任务。
  5. 使用AirDrop接受数据(能够发送数据)。

 

发布审核经过需注意事项(不遵照审核会被拒绝):get

  1. app extension target 的 Architectures build settings 必须包含 arm64(iOS) 或者 x86_64(OS X)。
  2. app extension的containing app必须支持64-bit。
  3. 必须同时支持iPhone、iPad。
  4. 签名时必须使用相同的证书与描述文件。
  5. containing app必须向用户提供功能,不可以只包含扩展。
  6. extension引用的frameworks必须支持64位。
  7. 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")

 

开发实践注意事项:博客

  1. 若是须要共用文件,可在project中新建framework类型target,若是iOS版本低于8.0可将framework设置为静态库,并在General中勾选“allow app extension APIs only”。
  2. 须要从today extension打开containing app时,调用[self extensionContext]方法获取NSExtensionContext对象,并调用NSExtensionContext对象的openURL:completionHandler:方法唤起containing app。
相关文章
相关标签/搜索