ios 8 app extension

39
iOS8 App Extension LINE Developer Meetup in Fukuoka #6 2014.07.29 難波 健雄

Upload: takeo-nanba

Post on 18-Jun-2015

2.167 views

Category:

Technology


3 download

DESCRIPTION

この資料は発表当時(2014/7/29)のものです。既に仕様が変わっている部分もありますので、ご注意ください。

TRANSCRIPT

Page 1: iOS 8 App Extension

iOS8 App ExtensionLINE Developer Meetup in Fukuoka #62014.07.29  難波 健雄

Page 2: iOS 8 App Extension

自己紹介• 難波 健雄

• LINE Fukuoka iOS Developer

• github.com/groovelab

• no music no life

Page 3: iOS 8 App Extension

自己紹介JAZZ やってます

Page 4: iOS 8 App Extension

自己紹介福岡城のFacebookページ

Page 5: iOS 8 App Extension

はじめに• 動作環境

• Xcode6 beta4

• iOS8 beta4

• iOS SDK 8 beta4

Page 6: iOS 8 App Extension

はじめに• 動作環境

• Xcode6 beta4

• iOS8 beta4

• iOS SDK 8 beta4

beta5 で変わるかもしれません

Page 7: iOS 8 App Extension

アジェンダ• App Extension

• Extension Point

• Host AppとApp Extension

• Containing AppとApp Extensionの配布

• App Extensionの実装とデバッグ

Page 8: iOS 8 App Extension

App Extension• iOS8から新しく追加されたアプリ連携の仕組み

• iOS7まではURLスキームによる連携(別アプリ起動)

• 複数のアプリで同じ機能を使用できる

詳細は App Extension Programming Guide を参照

Page 9: iOS 8 App Extension

App Extension同じ機能

例えば、、、

• ブラウザからFacebook・Twitter以外のSNSへ投稿

• 現在のホークスの試合を通知センターで表示

• 画像・動画の編集

• 独自のキーボード

Page 11: iOS 8 App Extension

App Extension

いま、App Extensionがアツイ!

• すでにGitHubには、たくさんのリポジトリが作られている

Page 12: iOS 8 App Extension

Extension Point• AppExtensionには様々な種類がある

Page 13: iOS 8 App Extension

Extension Point• AppExtensionには様々な種類がある

• 種類 → Extension Point

Page 14: iOS 8 App Extension

Extension Point• Today

• Share

• Action

• Photo Editing

• Document Provider

• Custom Keyboard

iOSのみ

Page 15: iOS 8 App Extension

Extension Point• Today

• Share

• Action

• Photo Editing

• Document Provider ← 諸事情により割愛します

• Custom Keyboard

Page 16: iOS 8 App Extension

Extension Point• Today

• 通知センターの「今日」に表示

• Widgetとも呼ぶ

Page 17: iOS 8 App Extension

Extension Point• Share

• コンテンツの共有

• SNSへの投稿

Page 18: iOS 8 App Extension

Extension Point• Action

• コンテンツの編集

• 画像・テキスト

• サンプルコード

• Extension Request Handling

• Safari Plugin

• JavaScriptで実装

Page 19: iOS 8 App Extension

Extension Point• Photo Editing

• 写真アプリから連携

• 画像や動画を編集

• サンプルコード

Page 20: iOS 8 App Extension

Extension Point• Custom Keyboard

• 独自のキーボードを作成可能

Page 21: iOS 8 App Extension

Host AppとApp Extension• App Extensionを呼び出すアプリ → Host App

• Host AppとApp Extensionは別プロセスで動作する

Page 22: iOS 8 App Extension

Host AppとApp Extension• Host AppとApp Extensionのデータ受け渡しは

NSExtensionContextインスタンスを利用する

• NSExtensionContext → テキスト・画像などを含む

Page 23: iOS 8 App Extension

Containing App• App Extensionの作成方法

1. XcodeでiOSアプリProjectを作成

2. Targetの追加 → Application Extension → Extension Pointを決定

Page 24: iOS 8 App Extension

Containing App• App Extensionの作成方法

1. XcodeでiOSアプリProjectを作成 ← Containing App

2. Targetの追加 → Application Extension → Extension Pointを決定

Page 25: iOS 8 App Extension

Containing App• App Extensionの作成方法

1. XcodeでiOSアプリProjectを作成 ← Containing App

2. Targetの追加 → Application Extension → Extension Pointを決定

• App Extensionの配布

1. Containing App をAppStoreに登録

2. Containing App をAppStoreからインストール

Page 26: iOS 8 App Extension

Containing App• App Extensionの作成方法

1. XcodeでiOSアプリProjectを作成 ← Containing App

2. Targetの追加 → Application Extension → Extension Pointを決定

• App Extensionの配布

1. Containing App をAppStoreに登録

2. Containing App をAppStoreからインストール 同時にAppExtensionもインストールされる

Page 27: iOS 8 App Extension

App Extensionの実装• Containing Appにtargetを追加する

ここまでは同じ

Page 28: iOS 8 App Extension

App Extensionの実装• Containing Appにtargetを追加する

ここまでは同じ

• Extension Pointによって実装が異なる

• Todayの場合

1. StoryBoardでUIを作成

2. UIに表示するデータを取得する処理を実装

3. 取得したデータをUIにセットする処理を実装

Page 29: iOS 8 App Extension

App Extensionのデバッグ1. 追加したtargetをRun ▶

2. どのアプリを起動するか選択 ← Containing AppはNG

3. 起動したアプリからApp Extensionを呼ぶ

4. RunしたAppExtensionがデバッガに接続される

• デバッグコンソール

• NSLog()

• break point

Page 30: iOS 8 App Extension

App Extensionのデバッグ1. 追加したtargetをRun ▶

2. どのアプリを起動するか選択 ← Containing AppはNG

3. 起動したアプリからApp Extensionを呼ぶ

4. RunしたAppExtensionがデバッガに接続される

• デバッグコンソール

• NSLog()

• break point

Page 31: iOS 8 App Extension

Today Extension• UIViewControllerを継承したTodayViewController

• StoryBoardを使用可能

• UILabel, UIButton

• キーボード入力できないのでUITextFieldは利用不可

• preferredContentSizeでサイズ変更

• viewDidLoad は通知センターを表示するたびに呼ばれる

• NSURLConnectionで外部コンテンツ参照可能

Page 32: iOS 8 App Extension

Share Extension• SLComposeServiceViewControllerを継承した

ShareViewController

• デフォルトのUI(ダイアログ)を使用する

• Storyboardは背景に使用される

• configurationItemsでダイアログのフッターにアイテムを追加

• didSelectPostで投稿処理を実装する

Page 33: iOS 8 App Extension

Action Extension• UIViewControllerを継承したActionViewController

• StoryBoardを使用可能

• NSExtensionContextを通じて編集するコンテンツを取得・セットする

• done で処理を実装する

Page 34: iOS 8 App Extension

Photo Editing Extension• UIViewControllerを継承した

PhotoEditingViewController

• StoryBoardを使用可能

• startContentEditingWithInputで編集するコンテンツを表示

• finishContentEditingWithCompletionHandlerで編集したコンテンツを保存する

Page 35: iOS 8 App Extension

Custom Keyboard• UIInputViewControllerを継承した

KeyboardViewController

• StoryBoardを使用できない

• viewDidLoadでUIButtonをaddSubviewしていく

• textDocumentProxyのinsertText にテキストを渡す

Page 36: iOS 8 App Extension

実装で注意すること• 使用できないクラス・メソッドがある

• NS_EXTENSION_UNAVAILABLE

• [UIApplication sharedApplication]

• [UIApplication openURL]

• [self.extensionContext openURL: …]

• ↑ContainingAppを起動することは可能

• UIAlertController ← iOS8版UIAlertView

• Todayでは使用できず

Page 37: iOS 8 App Extension

実装で注意すること• Containing AppとAppExtensionのデータ共有

• AppGroupを設定することで実現可能

• info.plist で受け付けるコンテンツを制限

• NSExtensionActivationRule

• NSExtensionActivationSupportsText

• NSExtensionActivationSupportsImageWithMaxCount

Page 38: iOS 8 App Extension

実装で注意すること• バッドノウハウ (beta4だけ?)

• TodayはiOSシミュレータのほうがデバッグしやすい

• 修正内容を反映させるのにiOSの再起動が必要

• iOSシミュレータを終了 → Run

• Photo Editing、Custom Keyboardは実機のみデバッガを使用できる

• Custom KeyboardはUserDefaultsでContainingAppとデータ共有できない?↑公式ドキュメントにはできると書いてあるので、beta4のバグかも

Page 39: iOS 8 App Extension

最後に

LINE Fukuokaでは

開発エンジニアを募集しています

https://linefukuoka.co.jp/career/developer