LoginSignup
28
29

More than 5 years have passed since last update.

iOS8 Today Extensionの使い方

Last updated at Posted at 2014-09-25

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されなくなってしまう
  • たまに端末が勝手に再起動する
28
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
29