#Today Extension
Today Extensionでできること
App Extension Programming Guide
https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/NotificationCenter.html
Today Extensionとは
iOS8からの新機能で、端末の画面の上を引っ張ると出てくるところに表示されているカレンダー・天気予報みたいなウィジェットを自分で作ることができる便利な機能です。
appleが想定しているTodayの利用方法
- today上で簡単なタスクがこなせる
- 興味のある情報が見たいときにtodayを開くことで、すぐ確認できる
デザイン, UI など
- todayではスクロール操作が難しいので避けた方がいい
- シンプルな操作がいい
- キーボードが使えない
- viewの高さは、端末の高さが上限 ←意外と大切
##実装方法
###準備
File → New → Target でToday Extensionを選ぶ。
###更新直前に呼ばれるメソッド
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
completionHandler(NCUpdateResultFailed); //データ取得に失敗
completionHandler(NCUpdateResultNoData); //データ更新されなかった
completionHandler(NCUpdateResultNewData); //データ更新に成功
}
completionHandler(NCUpdateResultNewData)
を呼ぶとsnapshotがとられ、表示される
ここが1日に1回呼ばれるらしいです。時間は不明。background fetchにちょっと似ている気がしました。
Today Extensionからアプリを開く
NSExtensionContext
の-openURL:completionHandler:
でアプリを開くことができる
ユーザーがパスコードをかけている場合は、パスコードを挟むみたいです。
###どうやって既存のクラスを利用するか
todayはtargetが違うので、Xcode6,iOS8から使えるようになったembedded Frameworkを利用するのがすっきりして良さそうですが、
iOS7にも対応させるなら、todayのcompile Sourcesに必要な物だけ追加するのが楽そうな気がしました。
CocoaPodsを利用している場合は、Podfileの設定も忘れずにした方が良いです。
アプリ間のデータ共有
iOS8から導入されたApp Groupsを使うと共有できます。
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW6
##実装していて困ったこと
- たまにdebugされなくなってしまう
- たまに端末が勝手に再起動する