ios 8 app extension

Post on 18-Jun-2015

2.167 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

自己紹介• 難波 健雄

• LINE Fukuoka iOS Developer

• github.com/groovelab

• no music no life

自己紹介JAZZ やってます

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

はじめに• 動作環境

• Xcode6 beta4

• iOS8 beta4

• iOS SDK 8 beta4

はじめに• 動作環境

• Xcode6 beta4

• iOS8 beta4

• iOS SDK 8 beta4

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

アジェンダ• App Extension

• Extension Point

• Host AppとApp Extension

• Containing AppとApp Extensionの配布

• App Extensionの実装とデバッグ

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

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

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

詳細は App Extension Programming Guide を参照

App Extension同じ機能

例えば、、、

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

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

• 画像・動画の編集

• 独自のキーボード

App Extension

いま、App Extensionがアツイ!

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

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

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

• 種類 → Extension Point

Extension Point• Today

• Share

• Action

• Photo Editing

• Document Provider

• Custom Keyboard

iOSのみ

Extension Point• Today

• Share

• Action

• Photo Editing

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

• Custom Keyboard

Extension Point• Today

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

• Widgetとも呼ぶ

Extension Point• Share

• コンテンツの共有

• SNSへの投稿

Extension Point• Action

• コンテンツの編集

• 画像・テキスト

• サンプルコード

• Extension Request Handling

• Safari Plugin

• JavaScriptで実装

Extension Point• Photo Editing

• 写真アプリから連携

• 画像や動画を編集

• サンプルコード

Extension Point• Custom Keyboard

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

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

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

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

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

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

Containing App• App Extensionの作成方法

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

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

Containing App• App Extensionの作成方法

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

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

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からインストール

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もインストールされる

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

ここまでは同じ

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

ここまでは同じ

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

• Todayの場合

1. StoryBoardでUIを作成

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

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

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

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

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

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

• デバッグコンソール

• NSLog()

• break point

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

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

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

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

• デバッグコンソール

• NSLog()

• break point

Today Extension• UIViewControllerを継承したTodayViewController

• StoryBoardを使用可能

• UILabel, UIButton

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

• preferredContentSizeでサイズ変更

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

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

Share Extension• SLComposeServiceViewControllerを継承した

ShareViewController

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

• Storyboardは背景に使用される

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

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

Action Extension• UIViewControllerを継承したActionViewController

• StoryBoardを使用可能

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

• done で処理を実装する

Photo Editing Extension• UIViewControllerを継承した

PhotoEditingViewController

• StoryBoardを使用可能

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

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

Custom Keyboard• UIInputViewControllerを継承した

KeyboardViewController

• StoryBoardを使用できない

• viewDidLoadでUIButtonをaddSubviewしていく

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

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

• NS_EXTENSION_UNAVAILABLE

• [UIApplication sharedApplication]

• [UIApplication openURL]

• [self.extensionContext openURL: …]

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

• UIAlertController ← iOS8版UIAlertView

• Todayでは使用できず

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

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

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

• NSExtensionActivationRule

• NSExtensionActivationSupportsText

• NSExtensionActivationSupportsImageWithMaxCount

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

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

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

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

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

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

最後に

LINE Fukuokaでは

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

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

top related