Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

iOS 8 App Extension

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

iOS 8 App Extension

  1. 1. iOS8 App Extension LINE Developer Meetup in Fukuoka #6 2014.07.29  難波 健雄
  2. 2. 自己紹介 • 難波 健雄 • LINE Fukuoka iOS Developer • github.com/groovelab • no music no life
  3. 3. 自己紹介 JAZZ やってます
  4. 4. 自己紹介 福岡城のFacebookページ
  5. 5. はじめに • 動作環境 • Xcode6 beta4 • iOS8 beta4 • iOS SDK 8 beta4
  6. 6. はじめに • 動作環境 • Xcode6 beta4 • iOS8 beta4 • iOS SDK 8 beta4
 beta5 で変わるかもしれません
  7. 7. アジェンダ • App Extension • Extension Point • Host AppとApp Extension • Containing AppとApp Extensionの配布 • App Extensionの実装とデバッグ
  8. 8. App Extension • iOS8から新しく追加されたアプリ連携の仕組み • iOS7まではURLスキームによる連携
 (別アプリ起動) • 複数のアプリで同じ機能を使用できる 詳細は App Extension Programming Guide を参照
  9. 9. App Extension 同じ機能 例えば、、、 • ブラウザからFacebook・Twitter以外のSNSへ投稿 • 現在のホークスの試合を通知センターで表示 • 画像・動画の編集 • 独自のキーボード
  10. 10. App Extension • すでにGitHubには、たくさんのリポジトリが作ら れている • たとえば • たとえば • たとえば • たとえば
  11. 11. App Extension いま、App Extensionがアツイ! • すでにGitHubには、たくさんのリポジトリが作ら れている
  12. 12. Extension Point • AppExtensionには様々な種類がある
  13. 13. Extension Point • AppExtensionには様々な種類がある • 種類 → Extension Point
  14. 14. Extension Point • Today • Share • Action • Photo Editing • Document Provider • Custom Keyboard iOSのみ
  15. 15. Extension Point • Today • Share • Action • Photo Editing • Document Provider ← 諸事情により割愛します • Custom Keyboard
  16. 16. Extension Point • Today • 通知センターの「今日」に表示 • Widgetとも呼ぶ
  17. 17. Extension Point • Share • コンテンツの共有 • SNSへの投稿
  18. 18. Extension Point • Action • コンテンツの編集 • 画像・テキスト • サンプルコード • Extension Request Handling • Safari Plugin • JavaScriptで実装
  19. 19. Extension Point • Photo Editing • 写真アプリから連携 • 画像や動画を編集 • サンプルコード
  20. 20. Extension Point • Custom Keyboard • 独自のキーボードを作成可能
  21. 21. Host AppとApp Extension • App Extensionを呼び出すアプリ
 → Host App • Host AppとApp Extensionは別プロセスで動作する
  22. 22. Host AppとApp Extension • Host AppとApp Extensionのデータ受け渡しは
 NSExtensionContextインスタンスを利用する • NSExtensionContext → テキスト・画像などを含む
  23. 23. Containing App • App Extensionの作成方法 1. XcodeでiOSアプリProjectを作成 2. Targetの追加 → Application Extension → Extension Pointを決定
  24. 24. Containing App • App Extensionの作成方法 1. XcodeでiOSアプリProjectを作成 ← Containing App 2. Targetの追加 → Application Extension → Extension Pointを決定
  25. 25. 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からインストール

  26. 26. 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もインストールされる
  27. 27. App Extensionの実装 • Containing Appにtargetを追加する ここまでは同じ
  28. 28. App Extensionの実装 • Containing Appにtargetを追加する ここまでは同じ • Extension Pointによって実装が異なる • Todayの場合 1. StoryBoardでUIを作成 2. UIに表示するデータを取得する処理を実装 3. 取得したデータをUIにセットする処理を実装
  29. 29. App Extensionのデバッグ 1. 追加したtargetをRun ▶ 2. どのアプリを起動するか選択 ← Containing AppはNG 3. 起動したアプリからApp Extensionを呼ぶ 4. RunしたAppExtensionがデバッガに接続される • デバッグコンソール • NSLog() • break point
  30. 30. App Extensionのデバッグ 1. 追加したtargetをRun ▶ 2. どのアプリを起動するか選択 ← Containing AppはNG 3. 起動したアプリからApp Extensionを呼ぶ 4. RunしたAppExtensionがデバッガに接続される • デバッグコンソール • NSLog() • break point
  31. 31. Today Extension • UIViewControllerを継承したTodayViewController • StoryBoardを使用可能 • UILabel, UIButton • キーボード入力できないのでUITextFieldは利用不可 • preferredContentSizeでサイズ変更 • viewDidLoad は通知センターを表示するたびに呼ばれる • NSURLConnectionで外部コンテンツ参照可能
  32. 32. Share Extension • SLComposeServiceViewControllerを継承した ShareViewController • デフォルトのUI(ダイアログ)を使用する • Storyboardは背景に使用される • configurationItemsでダイアログのフッターにアイテムを追 加 • didSelectPostで投稿処理を実装する
  33. 33. Action Extension • UIViewControllerを継承したActionViewController • StoryBoardを使用可能 • NSExtensionContextを通じて編集するコンテンツ を取得・セットする • done で処理を実装する
  34. 34. Photo Editing Extension • UIViewControllerを継承した PhotoEditingViewController • StoryBoardを使用可能 • startContentEditingWithInputで編集するコンテンツを 表示 • finishContentEditingWithCompletionHandlerで編集し たコンテンツを保存する
  35. 35. Custom Keyboard • UIInputViewControllerを継承した KeyboardViewController • StoryBoardを使用できない • viewDidLoadでUIButtonをaddSubviewしていく • textDocumentProxyのinsertText にテキストを渡す
  36. 36. 実装で注意すること • 使用できないクラス・メソッドがある • NS_EXTENSION_UNAVAILABLE • [UIApplication sharedApplication] • [UIApplication openURL] • [self.extensionContext openURL: …] • ↑ContainingAppを起動することは可能 • UIAlertController ← iOS8版UIAlertView • Todayでは使用できず
  37. 37. 実装で注意すること • Containing AppとAppExtensionのデータ共有 • AppGroupを設定することで実現可能 • info.plist で受け付けるコンテンツを制限 • NSExtensionActivationRule • NSExtensionActivationSupportsText • NSExtensionActivationSupportsImageWithMaxC ount
  38. 38. 実装で注意すること • バッドノウハウ (beta4だけ?) • TodayはiOSシミュレータのほうがデバッグしやすい • 修正内容を反映させるのにiOSの再起動が必要 • iOSシミュレータを終了 → Run • Photo Editing、Custom Keyboardは
 実機のみデバッガを使用できる • Custom KeyboardはUserDefaultsでContainingAppとデータ共有で きない?
 ↑公式ドキュメントにはできると書いてあるので、beta4のバグかも
  39. 39. 最後に LINE Fukuokaでは 開発エンジニアを募集しています https://linefukuoka.co.jp/career/developer

×