app extensions in ios ver jp

76
App Extensions in iOS 李 俊河

Upload: qohj

Post on 07-Apr-2017

327 views

Category:

Engineering


0 download

TRANSCRIPT

App Extensions in iOS

李 俊河

本プレゼンは2015年3月に発表したものです

• App Extensionsとは?

• Extension Pointの種類

• App Extensionsの基礎知識 1. App ExtensionsのLife Cycle2. 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 GroupsApp 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の基礎知識

EmbeddedFrameworkFramework&Library → Cocoa Touch Framework 選択

App Extensionsの基礎知識

EmbeddedFrameworkProduct Nameに名前を入れてFinishします

App Extensionsの基礎知識

EmbeddedFramework実際のTargetsにはこのように表示されます

App Extensionsの基礎知識

EmbeddedFrameworkGeneral → Deployment Info → App Extensionsの Allow app extension API only 項目にチェック

App Extensionsの基礎知識

EmbeddedFrameworkプロジェクト上のTarget → General → Embedded BinariesとLinked Frameworks and Librariesにさっき作りましたEmbeddedFrameworkが存在するか確認し、存在しない場合は追加します

App Extensionsの基礎知識

EmbeddedFrameworkApp 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

ありがとうございました