Takahiro Octopress Blog

-1から始める情弱プログラミング

Today Extensionのサンプルを作ってみよう!

Today Extension

本日は、iOS8から追加されたToday Extensionを使ったアプリを作ってみたいと思います。
さて、早速説明していきましょう。

Today Extensionをプロジェクトに追加

まず、XcodeでSingle View Applicationを用いてプロジェクトを作成してください。
これは通常のプロジェクトを作る過程と何ら変わりません(いつもの手順です。)
次にApp Extensionを追加しなければなりません。
手順は下記です。

  1. Show the Project navigator > General > + ボタンを選択
  2. iOS > Application Extension > Today Extensionを選択
  3. 名前をつけて作成(ここではTodayExtensionActivityとします。)

+ボタンをクリック
Today Extensionを選択

ここまで終われば、Runでシミュレータ上で表示してみてください。
通知センターを表示すると、Hello Worldと表示されることがわかるはずです。
Hello World

余白の削除

しかし、表示が不格好ですね…。
これはデフォルトで余白が設定されているためです。
文字を表示するだけなら、余白は不要なので、余白を消してみましょう。
これはソースを追加することで実現できます。

先ほど追加したTodayExtensionActivityのTodayExtensionViewController.mを編集します。
下記のソースをTodayExtensionViewController.mファイルに追加しましょう。

1
2
3
4
5
// TodayExtensionViewController.m
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
  return UIEdgeInsetsZero;
}

これにより、下記のように表示が変わることが確認できます。
余白を削除

高さを調整

横方向の余白がなくなったので、違和感がなくなったものの、高さはもう少し広くしたいということがあるかもしれません。
その場合は、ソースで高さを指定しましょう。
TodayExtensionViewController.mのviewDidLoadメソッド内で高さを指定します。

1
2
3
4
5
6
- (void)viewDidLoad {
  [super viewDidLoad];
  
  // 高さ変更
  self.preferredContentSize = CGSizeMake(0, 100);
}

これにより、下記のような表示になると思います。
高さを調整

通知センターに表示されたWidgetタップでアプリを起動

せっかく通知センターに表示したのですから、アクションを追加したいですよね?
ここでは、タップでアプリを起動させてみたいと思います。
まずは、URLスキームを設定しましょう。

  1. Show the Project navigator > TARGETS > info > URL Typesを選択
  2. identifier, URL schemesを設定
    URL schemeの設定

次に、TodayExtension側のStoryboardを開きましょう。
ViewにTap Gesture Recognizerをドラッグ&ドロップで追加しましょう。
Today View ControllerにTap Gesture Recognizerの項目が追加されるので、それを右クリックしてSent Actionsを設定しましょう。
Tap Gesture Recognizerを追加

今回は、Sent Actionとして、TodayViewController.mにtapActionメソッドを追加しました。

1
2
3
4
- (IBAction)tapAction:(id)sender {
  NSURL *URL = [NSURL URLWithString:@"textension://"]; // カスタムURLスキームを指定
  [self.extensionContext openURL:URL completionHandler:nil];
}

ここでは、URLスキームとしてtextensionと設定したため、上記のソースのように指定できます。
上記設定後にシミュレータを起動して、通知センターのWidgetをタップしてみてください。
アプリが起動されるはずです。

いかがだったでしょうか?

少しずつ、Today Extension機能を実装したアプリが増えてきています。
これは開発者にとってもユーザにとっても非常に便利な機能だと思いますので、これから自作アプリには積極的に実装していきたいと思います。

ということで本日はここまで。

Comments