73
iOS8 App Extensions もしiOS8のカスタムキーボードが ガジェットのSDKを搭載したら カスタムキーボードを バーコードリーダーと 連携させてみた 2014/10/18 Ver.1.0.0 iOS 8/Swift エンジニア勉強会@ヤフー - connpass

もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

  • Upload
    niwatako

  • View
    17.331

  • Download
    4

Embed Size (px)

DESCRIPTION

iOS8からApp Extension でカスタムキーボードが作成できるようになりました。このカスタムキーボードに、外部機器を制御するSDKを埋め込むことができれば、従来アプリごとに必要だったSDKの実装が不要になります。カスタムキーボードに外部機器のSDKを実装してみたらどうなるのか、実際にやってみました。

Citation preview

Page 1: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

iOS8 App Extensions

もしiOS8のカスタムキーボードが

ガジェットのSDKを搭載したら

カスタムキーボードをバーコードリーダーと連携させてみた

2014/10/18 Ver.1.0.0

iOS 8/Swift エンジニア勉強会@ヤフー - connpass

Page 2: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

自己紹介

❖プログラム3年ぐらい

❖文系!

❖ iOS / 技術ネタ 初発表@niwatako

Page 3: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

B2B向けiOSエンジニアです

Page 4: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

モバイルソリューションの

Page 5: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

iOS向けハード製品も出しています。

Page 6: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

iPhone / iPod touch 装着型、バーコードリーダー

 モバイルソリューションの

Page 7: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

しかし課題が…

Page 8: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

バーコードリーダー製品の課題

アプリへのSDK組み込みが必須。

・SDK搭載の専用アプリを開発するコスト・他社製品からの乗り換え時のSDK差替コスト・一般向けアプリや

 Apple標準アプリにはSDKが組み込めない!

Page 9: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

そこへiOS8が登場

Page 10: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

iOS8 App Extensions

カスタムキーボード独自キーボードの作成が可能に

Page 11: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

Before

ピッ(読み取り)

×

SDK

+APP

APP

標準APP

×

SDKなし

SDKなしSDK対応済みアプリでのみ

利用可能

Page 12: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

After!?

ピッ(読み取り)

APP

APP

標準APP

キーボード

SDKどのアプリでも利用可能

Page 13: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

SDKを組込んだキーボードを作れば 全てのアプリで

バーコードリーダーが使える??

でもそんなこと、本当にできるの?

Page 14: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

やってみました。

Page 15: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

Main subject

#もしガジェ

iOS8 のカスタムキーボードにガジェット(External Accessory)と連携する機能を埋め込むことは出来るのか?

Page 16: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

まず カスタムキーボードについて

Page 17: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

#もしガジェ

About カスタムキーボード

iOS8 App Extensions

Page 18: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

カスタムキーボードは App Extensions の一部Extensionポイント 標準的なApp Extensions

Today(iOSおよびOS X)

通知センターの「今日(Today)」ビューに置いて、 表示内容を即座に更新し、あるいは簡単なタスクを 実行する (このExtensionをウィジェット(widget)と呼 ぶ)

Share(iOSおよびOS X) 情報投稿サイトに記事を投稿して他のユーザと共有する

Action(iOSとOS X、UIありとUIなし)

ホストアプリケーションで表示されるコンテンツを操作または表示する

Photo Editing(iOS)

「写真(Photos)」アプリケーションで写真や動画を編集する

Finder Sync(OS X)

ファイルの同期状態に関する情報をFinderに直接表示します。

ドキュメントプロバイダ (iOS、UIありと UIなし) ファイルのリポジトリにアクセスして管理します。

カスタムキーボード(iOS) iOSシステムキーボードに代わるカスタムキーボードを、あらゆるアプリケーションで使えるようにします。

Page 19: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

How to develop?

Page 20: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

App Extension の全体像

Page 21: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

App Extension は、アプリの中に組み込む形で配布します。

App Extensionを同梱しているアプリのことを、

App Extensionに対して Containing App と呼びます。

Containing App と App Extension は、サンドボックスが別々で独立しています。

App Extension はアプリに同梱して配布 実行時は独立したサンドボックスを持つ

Page 22: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

App Extension は、アプリの中に組み込む形で配布します。

App Extensionを同梱しているアプリのことを、

App Extensionに対して Containing App と呼びます。

Containing App と App Extension は、サンドボックスが別々で独立しています。

App Extension はアプリに同梱して配布 実行時は独立したサンドボックスを持つ

エクステンション

エクステンションをバンドルする親アプリ

エクステンションを呼び出して使うアプリ

同梱してAppStoreから配布

Page 23: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

カスタムキーボードには 親になるアプリが必要。

Page 24: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

用意するもの:既存プロジェクト

Page 25: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

用意するもの:既存プロジェクト

Page 26: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

続いてアプリに カスタムキーボードエクステンションを

追加します

Page 27: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

カスタムキーボードのターゲットを追加

Page 28: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

カスタムキーボードのターゲットを追加

Page 29: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

カスタムキーボードのターゲットを追加

Page 30: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

聞かれたらSchemeをActivate

Page 31: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

追加されました!

Page 32: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

追加されました!

Page 33: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

実行してみます

Page 34: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

Run!(Safariで)

Page 35: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

※エクステンションは単体では起動できません。

 エクステンションを呼び出すHostAppを起動し、

 HostApp上でエクステンションを起動します。

 Safariを選んで実行してみます。

Page 36: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

なにも起きない!

キーボード見えない。。。

Page 37: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

シミュレーターの 設定の問題でした

Page 38: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

Toggle Software Keyboard

Page 39: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

標準キーボードしか出ない!

Page 40: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

キーボードは設定画面で追加しないと キーボードを切り替えた時に現れないようです!

デバッグ実行でキーボードを指定してるんだから直接起動したらいいのに。。。

Page 41: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

設定でキーボードを追加

設定 > 一般 > キーボード > 他社製キーボード

から、作ったキーボードを有効化

Page 42: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

現れた!

灰色のこれ

Page 43: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

KeyboardViewController

デフォルトでキーボード切り替えボタンが生成されています。

Page 44: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

KeyboardViewController

キーボードでできる事…基本はこれだけ!

入力文字列を渡すまでの間に、どのように文字列を生成するか、加工するかが、

開発者の腕の見せどころ!

Page 45: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

続いてガジェットについて

Page 46: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

#もしガジェ

About External Accessories

Communicating withan Accessory

Page 47: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

ExternalAccessoryFramework

外部機器と接続するにはこのフレームワークが必須です!

Page 48: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

Supported external accessory protocols

※ info.plist

さらに、接続する機器のID(Appleに認定された外部機器が持ってる)を指定すると、機器とアプリが連携できるようになります。

Page 49: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

これで 特定の外部機器と連携が可能に

あとは機器によって必要なSDKや必要な制御があるのでそれに合わせて実装します。

一般に、外部装置を制御するSDKが機器の開発元から配布されています。

Page 50: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

いざ融合

Page 51: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

用意するもの:既存プロジェクト

Page 52: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

カスタムキーボードのターゲットを追加

Page 53: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

追加されました!

Page 54: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

External Accessory 対応App ExtensionのKeyboardターゲットに対して

Frameworkの追加とPlistへの記入でAsReaderとの接続に対応

Page 55: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

AsReader SDK

@protocol AsReaderManagerDelegate <NSObject> @optional // バーコードデータを通知するメソッド - (void)barcodeData:(NSString *)barcode; @end

@interface AsReaderManager : NSObject<RcpDelegate> // AsReaderManagerDelegateプロトコルを実装したクラスをデリゲートとして保持 @property (assign)id<AsReaderManagerDelegate> delegate; @end

AsReaderManagerDelegateプロトコル

AsReaderManagerクラス バーコードリーダーを制御してくれるクラス

読取りを通知するプロトコル

Page 56: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

KeyboardViewController

@interface KeyboardViewController : UIInputViewController <AsReaderManagerDelegate> - (void)barcodeData:(NSString *)barcode; @end

キーボード側で、読み取ったバーコードの値を受け取るためのAsReaderManagerDelegateプロトコルを実装することを宣言

Page 57: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

KeyboardViewControllerにSDKを実装

@implementation KeyboardViewController - (void)viewDidAppear:(BOOL)animated{ // SDKのインスタンス化とデリゲートのセット [[AsReaderManager sharedManager] setDelegate:self]; }

- (void)barcodeData:(NSString *)barcode{ // デリゲートで受け取ったバーコードデータをキーボード入力文字として利用 [self.textDocumentProxy insertText:barcode]; } @end

viewDidAppear でSDKをインスタンス化して自身をデリゲートにセット。

Page 58: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

KeyboardViewControllerにSDKを実装

@implementation KeyboardViewController - (void)viewDidAppear:(BOOL)animated{ // SDKのインスタンス化とデリゲートのセット [[AsReaderManager sharedManager] setDelegate:self]; }

- (void)barcodeData:(NSString *)barcode{ // デリゲートで受け取ったバーコードデータをキーボード入力文字として利用 [self.textDocumentProxy insertText:barcode]; } @end

バーコードを読み取った時にデータを通知で受け取る。バーコードはそのままキーボード入力としてDocumentProxyに渡す。

Page 59: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

うごかしてみた

Page 60: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

だめだった

Page 61: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

まだできる事がある

※ info.plist

Page 62: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

RequestsOpenAccess YES

Page 63: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

“フルアクセスを許可”が設定に登場

Page 64: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

これでどうでしょう

Page 65: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

できた

Safari上のWEB検索フォームで作ったキーボードを使ってみるとバーコード読取ができました!

Page 66: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

できた

読み取ったバーコードで検索した結果と、本の表紙が一致!正しくバーコードを読めています

Page 67: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

まとめ

❖ カスタムキーボードは簡単に作れた

❖ 出来る事は、文字列入力と1文字削除だけ

❖ ただし裏で結構いろんな処理が実行出来る

❖ Lightning接続した外部機器を制御するのも可

❖ キーボードでゲームしたり遠隔操作したり出来る…?

Page 68: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

App Extensions プログラミングガイド

❖ https://developer.apple.com/jp/devcenter/ios/library/documentation/ExtensibilityPG.pdf

❖ 日本語!!

❖ カスタムキーボード (P.71~)

ご興味ある方はぜひこちらもご覧ください。

Page 69: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

続編❖ 10/22(水) Potaitotips

❖ 11/01(土) Cocoa勉強会関西 ★AppStoreリリース版担当者登場

❖ 11/15(土) Cocoa勉強会関東

SDKを組み込んだキーボードがAppStoreに公開できるのか?など今後お話できればと思います。

(現在結果待ち…)

Page 70: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

(宣伝)

Page 71: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

ハードとソフトの融合で 業務の世界に革命を起こしたい

iOSエンジニア募集中

Page 72: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

導入企業様、 対応アプリデベロッパー様募集中

Page 73: もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo

ご清聴ありがとうございました