SlideShare a Scribd company logo
1 of 76
Download to read offline
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

Viewers also liked

iOS 8 App Extensions
iOS 8 App ExtensionsiOS 8 App Extensions
iOS 8 App Extensionsravi kumar
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 
iOS 8 Action Extension Training
iOS 8 Action Extension TrainingiOS 8 Action Extension Training
iOS 8 Action Extension TrainingYuichi Fujiki
 
Keyboard Extension sharing
Keyboard Extension sharingKeyboard Extension sharing
Keyboard Extension sharingGrady Zhuo
 
EDUCARNIVAL 2014 at IIT Delhi- Responsive reading ideas and strategies by Nee...
EDUCARNIVAL 2014 at IIT Delhi- Responsive reading ideas and strategies by Nee...EDUCARNIVAL 2014 at IIT Delhi- Responsive reading ideas and strategies by Nee...
EDUCARNIVAL 2014 at IIT Delhi- Responsive reading ideas and strategies by Nee...Eduexcellence
 
iOS App Extensions
iOS App Extensions iOS App Extensions
iOS App Extensions Ketan Raval
 
Nonfiction text features
Nonfiction text featuresNonfiction text features
Nonfiction text featuresdpeet
 

Viewers also liked (8)

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

Similar to App Extensions in iOS ver JP

Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Shuichi Tsutsumi
 
ゲリラ的サービスの育て方
ゲリラ的サービスの育て方ゲリラ的サービスの育て方
ゲリラ的サービスの育て方Hidetoshi Mori
 
Windows Phone アプリに認証と認可を実装する V1.0
Windows Phone アプリに認証と認可を実装する V1.0Windows Phone アプリに認証と認可を実装する V1.0
Windows Phone アプリに認証と認可を実装する V1.0junichi anno
 
モバイルアプリケーション管理(MAM) 自社アプリ開発手法
モバイルアプリケーション管理(MAM)自社アプリ開発手法モバイルアプリケーション管理(MAM)自社アプリ開発手法
モバイルアプリケーション管理(MAM) 自社アプリ開発手法Dai Matsui
 
Wave analyticsによるダッシュボード開発
Wave analyticsによるダッシュボード開発Wave analyticsによるダッシュボード開発
Wave analyticsによるダッシュボード開発Salesforce Developers Japan
 
IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線
IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線
IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線Muneyuki Ohkawa
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプTech Summit 2016
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプTech Summit 2016
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的Tech Summit 2016
 
App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的Tech Summit 2016
 
アプリケーション識別子.pdf
アプリケーション識別子.pdfアプリケーション識別子.pdf
アプリケーション識別子.pdf幸雄 村上
 
モバイルが モーションセンサーに 出会ったら
モバイルがモーションセンサーに出会ったらモバイルがモーションセンサーに出会ったら
モバイルが モーションセンサーに 出会ったらAkira Hatsune
 
2013 summercamp 05
2013 summercamp 052013 summercamp 05
2013 summercamp 05openrtm
 
App007 ほしい機能を作ろ
App007 ほしい機能を作ろApp007 ほしい機能を作ろ
App007 ほしい機能を作ろTech Summit 2016
 
App007 ほしい機能を作ろ
App007 ほしい機能を作ろApp007 ほしい機能を作ろ
App007 ほしい機能を作ろTech Summit 2016
 
エンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたことエンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたことMayumi Narisawa
 
エンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたことエンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたことMayumi Narisawa
 

Similar to App Extensions in iOS ver JP (20)

Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
 
ゲリラ的サービスの育て方
ゲリラ的サービスの育て方ゲリラ的サービスの育て方
ゲリラ的サービスの育て方
 
Windows Phone アプリに認証と認可を実装する V1.0
Windows Phone アプリに認証と認可を実装する V1.0Windows Phone アプリに認証と認可を実装する V1.0
Windows Phone アプリに認証と認可を実装する V1.0
 
モバイルアプリケーション管理(MAM) 自社アプリ開発手法
モバイルアプリケーション管理(MAM)自社アプリ開発手法モバイルアプリケーション管理(MAM)自社アプリ開発手法
モバイルアプリケーション管理(MAM) 自社アプリ開発手法
 
Wave analyticsによるダッシュボード開発
Wave analyticsによるダッシュボード開発Wave analyticsによるダッシュボード開発
Wave analyticsによるダッシュボード開発
 
IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線
IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線
IBM Notes 9.0 Social EditionとIBM Connections 4.5を貫く一本の線
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプ
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプ
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的
 
App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的App005 xamarin と_azure_で、超効率的
App005 xamarin と_azure_で、超効率的
 
アプリケーション識別子.pdf
アプリケーション識別子.pdfアプリケーション識別子.pdf
アプリケーション識別子.pdf
 
モバイルが モーションセンサーに 出会ったら
モバイルがモーションセンサーに出会ったらモバイルがモーションセンサーに出会ったら
モバイルが モーションセンサーに 出会ったら
 
DevOps を前提としたユーザー インターフェイスの構造解析
DevOps を前提としたユーザー インターフェイスの構造解析DevOps を前提としたユーザー インターフェイスの構造解析
DevOps を前提としたユーザー インターフェイスの構造解析
 
2013 summercamp 05
2013 summercamp 052013 summercamp 05
2013 summercamp 05
 
20101022
2010102220101022
20101022
 
App007 ほしい機能を作ろ
App007 ほしい機能を作ろApp007 ほしい機能を作ろ
App007 ほしい機能を作ろ
 
App007 ほしい機能を作ろ
App007 ほしい機能を作ろApp007 ほしい機能を作ろ
App007 ほしい機能を作ろ
 
エンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたことエンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたこと
 
エンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたことエンジニアリングするデザイナーが領域を超えて見えたこと
エンジニアリングするデザイナーが領域を超えて見えたこと
 

App Extensions in iOS ver JP