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。
相關文章
相關標籤/搜索