最近在作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。