狠狠撸

狠狠撸Share a Scribd company logo
iOS8 App Extension
LINE Developer Meetup in Fukuoka #6
2014.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
? すでにGitHubには、たくさんのリポジトリが作ら
れている

? たとえば

? たとえば

? たとえば

? たとえば
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は背景に使用される

? con?gurationItemsでダイアログのフッターにアイテムを追
加

? didSelectPostで投稿処理を実装する
Action Extension
? UIViewControllerを継承したActionViewController

? StoryBoardを使用可能

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

? done で処理を実装する
Photo Editing Extension
? UIViewControllerを継承した
PhotoEditingViewController

? StoryBoardを使用可能

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

? ?nishContentEditingWithCompletionHandlerで編集し
たコンテンツを保存する
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

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

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

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

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

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

? Custom KeyboardはUserDefaultsでContainingAppとデータ共有で
きない??
↑公式ドキュメントにはできると書いてあるので、beta4のバグかも
最後に
LINE Fukuokaでは
開発エンジニアを募集しています
https://linefukuoka.co.jp/career/developer

More Related Content

iOS 8 App Extension