iOS 8 App Extension

Takeo Nanba
Takeo NanbaSoftware Developer at LINE Fukuoka
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は背景に使用される

• 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

• 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
1 of 39

Recommended

iOS 8 App Extension「Action」でアプリ間連携してみる by
iOS 8 App Extension「Action」でアプリ間連携してみるiOS 8 App Extension「Action」でアプリ間連携してみる
iOS 8 App Extension「Action」でアプリ間連携してみるKosuke Ogawa
8K views20 slides
App extension for iOS by
App extension for iOSApp extension for iOS
App extension for iOStoyship
13.8K views39 slides
App Extensions in iOS ver JP by
App Extensions in iOS ver JPApp Extensions in iOS ver JP
App Extensions in iOS ver JPqohj
650 views76 slides
【社内LT】iPhoneアプリ開発のすすめ by
【社内LT】iPhoneアプリ開発のすすめ【社内LT】iPhoneアプリ開発のすすめ
【社内LT】iPhoneアプリ開発のすすめVitalify.Inc
624 views19 slides
6秒動画アプリ Vineの作り方 by
6秒動画アプリ Vineの作り方6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方Hiramatsu Ryosuke
24.6K views26 slides
Swiftではじめる動画再生 by
Swiftではじめる動画再生Swiftではじめる動画再生
Swiftではじめる動画再生Yusuke Ariyoshi
12.1K views29 slides

More Related Content

What's hot

「ABCs2018」LT〝Intro to Google Play Instant〟 by
「ABCs2018」LT〝Intro to  Google Play Instant〟「ABCs2018」LT〝Intro to  Google Play Instant〟
「ABCs2018」LT〝Intro to Google Play Instant〟LIFULL Co., Ltd.
225 views24 slides
Prott for iOS by
Prott for iOSPrott for iOS
Prott for iOSSeiya Shimokawa
2.9K views27 slides
mBaaS/C4SA howto by
mBaaS/C4SA howtomBaaS/C4SA howto
mBaaS/C4SA howto史識 川原
380 views49 slides
Azure Updates from Build 2021 by
Azure Updates from Build 2021Azure Updates from Build 2021
Azure Updates from Build 2021Kazuyuki Miyake
1K views11 slides
Herokuのご紹介 by
Herokuのご紹介Herokuのご紹介
Herokuのご紹介Ayumu Aizawa
1.2K views27 slides
シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~ by
シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~
シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~ニフクラ mobile backend
4.8K views15 slides

What's hot(20)

「ABCs2018」LT〝Intro to Google Play Instant〟 by LIFULL Co., Ltd.
「ABCs2018」LT〝Intro to  Google Play Instant〟「ABCs2018」LT〝Intro to  Google Play Instant〟
「ABCs2018」LT〝Intro to Google Play Instant〟
LIFULL Co., Ltd.225 views
Herokuのご紹介 by Ayumu Aizawa
Herokuのご紹介Herokuのご紹介
Herokuのご紹介
Ayumu Aizawa1.2K views
シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~ by ニフクラ mobile backend
シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~
シューティングゲームにランキングとゴースト機能を追加しましょう!~Unity×クラウドをつかって~
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~ by MakotoItoh
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
MakotoItoh20.7K views
Visual Studio2013 でGithub(1) セットアップ~同期 by Tomo Mizoe
Visual Studio2013 でGithub(1) セットアップ~同期Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期
Tomo Mizoe1.2K views
dotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみた by Nobutaka OSHIRO
dotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみたdotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみた
dotcle 経験0から Meteor iOS アプリを2ヶ月半で作ってリリースしてみた
Nobutaka OSHIRO1.3K views
GitHub Enterpriseの導入事例と実践GitHub Actions by Shuji Yamada
GitHub Enterpriseの導入事例と実践GitHub ActionsGitHub Enterpriseの導入事例と実践GitHub Actions
GitHub Enterpriseの導入事例と実践GitHub Actions
Shuji Yamada1.9K views
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」 by Nobutaka OSHIRO
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Nobutaka OSHIRO3.2K views
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法 by アシアル株式会社
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
GGJ2016用UE4ヒストリアBLOGリファレンス by Shun Sasaki
GGJ2016用UE4ヒストリアBLOGリファレンスGGJ2016用UE4ヒストリアBLOGリファレンス
GGJ2016用UE4ヒストリアBLOGリファレンス
Shun Sasaki4.1K views
Monacaとmobile backendでチェックインアプリをつくる by ncmb_sdk
Monacaとmobile backendでチェックインアプリをつくるMonacaとmobile backendでチェックインアプリをつくる
Monacaとmobile backendでチェックインアプリをつくる
ncmb_sdk21.1K views
【ios objective c】ニフティクラウドmobile backend を体験しよう! by ニフクラ mobile backend
【ios objective c】ニフティクラウドmobile backend を体験しよう!【ios objective c】ニフティクラウドmobile backend を体験しよう!
【ios objective c】ニフティクラウドmobile backend を体験しよう!
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編) by アシアル株式会社
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)

Similar to iOS 8 App Extension

第1回 コデアルiOSアプリ勉強会 by
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
2.9K views52 slides
AppCodeNight testcode by
AppCodeNight testcodeAppCodeNight testcode
AppCodeNight testcodeAkira SUGIMOTO
902 views8 slides
Android study part1 by
Android study part1Android study part1
Android study part1shinya sakemoto
2.2K views72 slides
XcodeのTargetについてのTIPS by
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSYoichiro Sakurai
2.5K views18 slides
Time for Xcode Behavior by
Time for Xcode BehaviorTime for Xcode Behavior
Time for Xcode Behaviortoyship
259 views22 slides
できる!スマホアプリ:Webからはじまるアプリ by
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:WebからはじまるアプリMasami Yabushita
4.5K views57 slides

Similar to iOS 8 App Extension(20)

第1回 コデアルiOSアプリ勉強会 by codeal
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
codeal2.9K views
XcodeのTargetについてのTIPS by Yoichiro Sakurai
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
Yoichiro Sakurai2.5K views
Time for Xcode Behavior by toyship
Time for Xcode BehaviorTime for Xcode Behavior
Time for Xcode Behavior
toyship259 views
できる!スマホアプリ:Webからはじまるアプリ by Masami Yabushita
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリ
Masami Yabushita4.5K views
OpenAPI Specificationからネットワーク層を自動生成する by ImajinKawabe1
OpenAPI Specificationからネットワーク層を自動生成するOpenAPI Specificationからネットワーク層を自動生成する
OpenAPI Specificationからネットワーク層を自動生成する
ImajinKawabe1113 views
はじめてのiOSアプリ開発 ① by Nagamine Hiromasa
はじめてのiOSアプリ開発 ①はじめてのiOSアプリ開発 ①
はじめてのiOSアプリ開発 ①
Nagamine Hiromasa1.9K views
できる!スマホアプリ:Webからはじまるアプリ for CMU16 by Masami Yabushita
できる!スマホアプリ:Webからはじまるアプリ for CMU16できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16
Masami Yabushita1.5K views
Visual Studio を使用した Cordova 開発 by Osamu Monoe
Visual Studio を使用した Cordova 開発Visual Studio を使用した Cordova 開発
Visual Studio を使用した Cordova 開発
Osamu Monoe3.3K views
iQONの開発手法 at iQONエンジニアセミナー by Imamura Masayuki
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
Imamura Masayuki4.9K views
Osc2012 appinventor のその後 by Katsumi Honda
Osc2012 appinventor のその後Osc2012 appinventor のその後
Osc2012 appinventor のその後
Katsumi Honda1.2K views
Watch connectivity by Motoki Narita
Watch connectivityWatch connectivity
Watch connectivity
Motoki Narita14.7K views
デザイナーでも安心!はじめてのiOSアプリ開発 先生:関根 元和 by schoowebcampus
デザイナーでも安心!はじめてのiOSアプリ開発 先生:関根 元和デザイナーでも安心!はじめてのiOSアプリ開発 先生:関根 元和
デザイナーでも安心!はじめてのiOSアプリ開発 先生:関根 元和
schoowebcampus1.7K views
iOSアプリを審査に提出してみた話 by Hideki Abe
iOSアプリを審査に提出してみた話iOSアプリを審査に提出してみた話
iOSアプリを審査に提出してみた話
Hideki Abe2K views

Recently uploaded

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
29 views38 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
380 views13 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
76 views29 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
25 views17 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PC Cluster Consortium
23 views36 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
132 views64 slides

Recently uploaded(12)

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4380 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.76 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga25 views
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka90 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda453 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」

iOS 8 App Extension