SlideShare a Scribd company logo
App Extensions in iOS
李 俊河
本プレゼンは2015年3月に発表したものです
• App Extensionsとは?
• Extension Pointの種類
• App Extensionsの基礎知識
1. App ExtensionsのLife Cycle

2. App Extensionsのデータ通信

- App Groups

- Embedded Framework

- NSUserDefaultsの場合

- CoreDataの場合

• 注意事項
iOS8 & OS X - Yosemiteから追加された技術であり
App Extensionsとは?
共有・通知センター・キーボードなどiOSシステム
の特定領域と紐付いてその領域の機能を拡張させ
ます
App Extensionsとは?
そのそれぞれの領域をExtension Pointと言います
App Extensionsとは?
Extension Pointの種類については後で説明します
App Extensionsとは?
その前に二つの言葉の意味について説明します
App Extensionsとは?
Host appとContaining app
App Extensionsとは?
まずはHost appから
App Extensionsとは?
ユーザー自らApp Extensionsを選択できる
ようになっているアプリのことを言います
App Extensionsとは?
Safari , Photo(基本の「写真」アプリ)などを表します
App Extensionsとは?
次はContaining appについて
App Extensionsとは?
App Extensionsが含まれているアプリのことを表します
App Extensionsとは?
ちなみにContaining appには
App Extensionsとは?
いくらでもApp Extensionsを含められるそう
です(確認はしていません)
App Extensionsとは?
それではExtension Pointの種類について説明します
App Extensionsとは?
• Extension Pointは大きく分けて7種類が存在します
Extension Pointの種類
Today
Share
Action
Photo Editing
Finder Sync
Document Provider
Custom Keyboard
Extension Pointの種類
Today
• アプリを起動せずにそのアプリ
の一部の機能を簡単に使えるよ
うにするExtension

• 「ウィジェット」とも呼びます
Extension Pointの種類
Share
• Host appに存在する  ボタン
を押し、情報をSNSなどで他
ユーザーと共有するExtension
Extension Pointの種類
Action
• Host app上で表示される  
コンテンツを操作・表示する
Extension
Extension Pointの種類
Photo Editing(iOS Only)
• 写真(iOS基本アプリ)で  
写真や動画をカスタム編集する
Extension
Photo Editing(iOS Only)
• 写真(iOS基本アプリ)で  
写真や動画をカスタム編集する
Extension

• 写真アプリ内部から該当する
Extensionを選択してカスタム
編集できるようにする
Extension Pointの種類
Finder Sync(OS X Only)
• フォルダ/ファイルの同期状態を
Finder上に表示するExtension
Extension Pointの種類
Document provider(iOS Only)
• Containing appの内部ファイル
をHost appが操作できるように
するExtension
Extension Pointの種類
Document provider(iOS Only)
• Containing appの内部ファイルを
Host appが操作できるようにする
Extension

• Import / Export / Open / Moveの操
作ができる

• それぞれの操作は自前で実装する必要
がある
Extension Pointの種類
Custom Keyboard(iOS Only)
• キーボードをカスタマイズして
いろんなアプリ上で使える
Extension
Extension Pointの種類
–Johnny Appleseed
1. ユーザーがApp Extensionを選択
App Extensionsの基礎知識
App ExtensionsのLife Cycle
–Johnny Appleseed
2. システムがApp Extensionを実行
App Extensionsの基礎知識
App ExtensionsのLife Cycle
–Johnny Appleseed
3. App Extensionのコードが走る
App Extensionsの基礎知識
App ExtensionsのLife Cycle
–Johnny Appleseed
4. システムがApp Extensionを終了
App Extensionsの基礎知識
App ExtensionsのLife Cycle
Host appとContaining appは直接通信することができません
App Extensionsのデータ通信
App Extensionsの基礎知識
なのでその間をApp Extensionが繋ぐ方法で通信ができます
App Extensionsのデータ通信
App Extensionsの基礎知識
詳しい説明の前に
App Extensionsのデータ通信
App Extensionsの基礎知識
Host app App Extension Containing appの間に
データ通信を行うための二つ準備が必要です
App Extensionsのデータ通信
App Extensionsの基礎知識
準備 1. App Groups
App Extensionsのデータ通信
App Extensionsの基礎知識
App Groups
App ExtensionとContaining appが互いのデータを一つの
Group Idを持つ共用コンテナーの中で書き込むことで通信できるようになります
App Extensionsの基礎知識
App Groups
iOS DevCenterから「App groups」を作ります
App Extensionsの基礎知識
App Groups
実際のプロジェクトからは
Targets→Capabilities→App GroupsをONに
App Extensionsの基礎知識
App Extensionsの基礎知識
App Groups
その後表示されるApp Groupsを確認してチェックしますとその
Targetに当たる「.entitlements」ファイルが作成されます
App Extensionsの基礎知識
App Groups
App Extension側のTargetにも同じ作業をすると完了です
準備 2. EmbeddedFramework
App Extensionsの基礎知識
App Extensionsのデータ通信
App Extensionsの基礎知識
EmbeddedFramework
App ExtensionとContaining appが
共通したクラスやリソースを使う場合に必要です
App Extensionsの基礎知識
EmbeddedFramework
File→New→Targetを選択
App Extensionsの基礎知識
EmbeddedFramework
Framework&Library → Cocoa Touch Framework 選択
App Extensionsの基礎知識
EmbeddedFramework
Product Nameに名前を入れてFinishします
App Extensionsの基礎知識
EmbeddedFramework
実際のTargetsにはこのように表示されます
App Extensionsの基礎知識
EmbeddedFramework
General → Deployment Info → App Extensionsの
Allow app extension API only 項目にチェック
App Extensionsの基礎知識
EmbeddedFramework
プロジェクト上のTarget → General → Embedded Binariesと
Linked Frameworks and Librariesにさっき作りました
EmbeddedFrameworkが存在するか確認し、存在しない場
合は追加します
App Extensionsの基礎知識
EmbeddedFramework
App ExtensionsのTargetにも同様に確認します
(Linked Frameworks and Librariesだけ)
App Extensionsの基礎知識
EmbeddedFramework
共用するクラスの.hファイルをEmbeddedFramework Targetの
Build Phases→ Headers→Projectに追加します
App Extensionsの基礎知識
EmbeddedFramework
共用するクラスの.mファイルはEmbeddedFramework Targetの
Build Phases→ Compile Sourcesに追加します
App Extensionsの基礎知識
EmbeddedFramework
共用するクラスの中でEmbeddedFrameworkの外部に公開するクラ
スは.hファイルをHeaders→ProjectからHeaders→Publicへ移動し
App Extensionsの基礎知識
EmbeddedFramework
EmbeddedFrameworkを作る時一緒に生成された.hファイル
(この場合ではEmbeddedDB.h)の下に下記のように書きます
App Extensionsの基礎知識
EmbeddedFramework
実際利用するクラスでは@importで宣言すると使えます
これで準備が完了しましたので
App Extensionsの基礎知識
App Extensionsのデータ通信
実際の共用コンテナーを使ってみます
App Extensionsの基礎知識
App Extensionsのデータ通信
まずは大人気のNSUserDefaultsを使用する場合から
App Extensionsの基礎知識
App Extensionsのデータ通信
initWithSuiteName:でAppGroups Idを
指定してインスタンスを生成
App Extensionsの基礎知識
NSUserDefaultsの場合
その後オブジェクトを作ったり呼び出したりする場合は
普通のNSUserDefaultsと同じです
App Extensionsの基礎知識
NSUserDefaultsの場合
次はCoreDataの場合
App Extensionsの基礎知識
App Extensionsのデータ通信
実際のDBファイルを利用する指定先を
containerURLForSecurityApplicationGroupIdentifier:に
AppGroups Idを指定すると使えます
App Extensionsの基礎知識
CoreDataの場合
実際の保存先はprivate/var…に存在するappGroups専用の 
フォルダに指定されるため脱獄をしない限りは大丈夫です
App Extensionsの基礎知識
App Extensionsのデータ通信
最後にExtensionを使う時の幾つかの注意事項があります
注意事項
1. iOS8から使用できます(iOS7はできません)
注意事項
理由はEmbeddedFrameworkと関係している上で
注意事項
App ExtensionがiOS8からサポートするためです
注意事項
2. Extensionを入れる予定のアプリには
64ビット(arm64)対応が必須です
注意事項
3. App Extension上で使用できないAPIが存在します
注意事項
ヘッダーにNS_EXTENSION_UNAVAILABLEなどの
説明(マクロ)が付いているAPIは使用できません
注意事項
4. カメラとマイクを使用できません
注意事項
5. BG上で長時間タスクを起動することができません
(フラットフォームにより違いがあるようです)
注意事項
6. AirDropを使いデータ通信をすることができません
注意事項
注意事項
代わりにUIActivityViewControllerクラスを利用して
既存アプリと一緒にAirDropを使うのは可能だそうです
レファレンス
https://developer.apple.com/jp/documentation/UserExperience/Conceptual/MobileHIG/AppExtensions/AppExtensions.html
http://www.raywenderlich.com/83809/ios-8-today-extension-tutorial
http://qiita.com/monoqlo/items/6ed93f0d2e719acd9474
http://www.cnet.com/how-to/how-to-set-up-ios-8-action-extensions-in-safari/
http://dev.classmethod.jp/smartphone/ios8-photo-kit-9/
http://qiita.com/takebayashi/items/f29617d56ceed9ee7e9d
http://www.macstories.net/mac/extensibility-and-automation-changes-in-os-x-yosemite/
http://www.slideshare.net/ssuser9c7e21/document-provider
https://itunes.apple.com/jp/app/morse-code-telegraph-keyboard/id921290705?mt=8
http://dev.classmethod.jp/references/ios-8-app-extension-5/
http://dev.classmethod.jp/references/ios-8-app-extension-6/
http://dev.classmethod.jp/references/ios-8-action-extension/
http://swift-studying.com/blog/swift/?p=508
http://dev.classmethod.jp/references/ios-8-embedded-framework/
http://techblog.yahoo.co.jp/ios/today-widget/
http://stackoverflow.com/questions/24641768/accessing-core-data-sql-database-in-ios-8-extension-sharing-data-
between-app-an
https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/index.html
ありがとうございました

More Related Content

PDF
App extension for iOS
PDF
iOS 8 App Extension
PDF
iOS 8 App Extension「Action」でアプリ間連携してみる
PDF
【社内LT】iPhoneアプリ開発のすすめ
PPTX
iOS13 SDK による 全機能置き換え Part1
PDF
Everyplayで遊んでみよう1
PDF
Swiftではじめる動画再生
PDF
6秒動画アプリ Vineの作り方
App extension for iOS
iOS 8 App Extension
iOS 8 App Extension「Action」でアプリ間連携してみる
【社内LT】iPhoneアプリ開発のすすめ
iOS13 SDK による 全機能置き換え Part1
Everyplayで遊んでみよう1
Swiftではじめる動画再生
6秒動画アプリ Vineの作り方

Viewers also liked (8)

PPTX
iOS 8 App Extensions
PDF
iOS 8 Widget ~ 導入から Tips まで
PDF
iOS 8 Action Extension Training
PDF
Keyboard Extension sharing
PPTX
EDUCARNIVAL 2014 at IIT Delhi- Responsive reading ideas and strategies by Nee...
PPTX
iOS App Extensions
PPT
Nonfiction text features
PDF
Build Features, Not Apps
iOS 8 App Extensions
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Action Extension Training
Keyboard Extension sharing
EDUCARNIVAL 2014 at IIT Delhi- Responsive reading ideas and strategies by Nee...
iOS App Extensions
Nonfiction text features
Build Features, Not Apps
Ad

Similar to App Extensions in iOS ver JP (20)

PDF
「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4
PDF
Windows phone & windows 8で見えてくるメトロの世界
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
PPTX
App extensionでテストコードを書く
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
PDF
[iOS 8] iOS8勉強会 PhotoKit
PDF
[20140625]wwdc2014 feedback
PPTX
Share Extension@pixiv
PDF
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
PDF
既存アプリのiOS8対応 #ios8yahoo
PDF
⑬I phoneアプリを作ってみよう!(超初心者向け)
PDF
iOS 8/Swift 概要 #ios8yahoo
PDF
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
PDF
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
PDF
DevLOVE iPhoneアプリ勉強会
PDF
iPhone アプリ開発の実例
PDF
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
PDF
openFrameworks iOS 入門
KEY
1.29.user,user,user
PDF
iPhoneアプリを作ってみよう
「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4
Windows phone & windows 8で見えてくるメトロの世界
iPhoneアプリ開発の歩き方〜Swift編〜
App extensionでテストコードを書く
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
[iOS 8] iOS8勉強会 PhotoKit
[20140625]wwdc2014 feedback
Share Extension@pixiv
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
既存アプリのiOS8対応 #ios8yahoo
⑬I phoneアプリを作ってみよう!(超初心者向け)
iOS 8/Swift 概要 #ios8yahoo
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
DevLOVE iPhoneアプリ勉強会
iPhone アプリ開発の実例
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
openFrameworks iOS 入門
1.29.user,user,user
iPhoneアプリを作ってみよう
Ad

App Extensions in iOS ver JP