Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
iOS8 App Extensions 
もしiOS8のカスタムキーボードが 
ガジェットのSDKを搭載したら 
カスタムキーボードを 
バーコードリーダーと 
連携させてみた 
2014/10/18 Ver.1.0.0 
iOS 8/Swif...
自己紹介 
❖ プログラム3年ぐらい 
❖ 文系! 
❖ iOS / 技術ネタ 初発表 
@niwatako
B2B向けiOSエンジニアです
モバイルソリューションの
iOS向けハード製品も出しています。
iPhone / iPod touch 装着型、バーコードリーダー 
 モバイルソリューションの
しかし課題が…
バーコードリーダー製品の課題 
アプリへのSDK組み込みが必須。 
・SDK搭載の専用アプリを開発するコスト 
・他社製品からの乗り換え時のSDK差替コスト 
・一般向けアプリや 
 Apple標準アプリにはSDKが組み込めない!
そこへiOS8が登場
iOS8 App Extensions 
カスタム 
キーボード 
独自キーボードの作成が可能に
Before 
ピッ(読み取り) 
◯ 
× 
SDK 
+ 
APP 
APP 
標準APP 
× 
SDKなし 
SDKなし 
SDK対応済みアプリでのみ 
利用可能
After!? 
ピッ(読み取り) 
◯ 
+ 
APP 
APP 
標準APP 
◯ 
◯ 
キーボード 
SDK どのアプリでも 
利用可能
SDKを組込んだキーボードを作れば 
全てのアプリで 
バーコードリーダーが使える?? 
でもそんなこと、本当にできるの?
やってみました。
Main subject 
#もしガジェ 
iOS8 のカスタムキーボードに 
ガジェット(External Accessory)と連携 
する機能を埋め込むことは出来るのか?
まず 
カスタムキーボードについて
#もしガジェ 
About 
カスタムキーボードiOS8 App Extensions
カスタムキーボードは App Extensions の一部 
Extensionポイント標準的なApp Extensions 
Today 
(iOSおよびOS X) 
通知センターの「今日(Today)」ビューに置いて、 表示 
内容を即座に...
How to develop?
App Extension の全体像
App Extension はアプリに同梱して配布 
実行時は独立したサンドボックスを持つ 
App Extension は、アプリの中に組み込む形で配布します。 
App Extensionを同梱しているアプリのことを、 
App Exten...
同梱してAppStoreから配布 
エクステンション 
エクステンションを 
バンドルする親アプリ 
エクステンションを 
呼び出して使うアプリ 
App Extension はアプリに同梱して配布 
実行時は独立したサンドボックスを持つ 
A...
カスタムキーボードには 
親になるアプリが必要。
用意するもの:既存プロジェクト
用意するもの:既存プロジェクト
続いてアプリに 
カスタムキーボードエクステンションを 
追加します
カスタムキーボードのターゲットを追加
カスタムキーボードのターゲットを追加
カスタムキーボードのターゲットを追加
聞かれたらSchemeをActivate
追加されました!
追加されました!
実行してみます
Run!(Safariで)
※エクステンションは単体では起動できません。 
 エクステンションを呼び出すHostAppを起動し、 
 HostApp上でエクステンションを起動します。 
 Safariを選んで実行してみます。
なにも起きない! 
キーボード見えない。。。
シミュレーターの 
設定の問題でした
Toggle Software Keyboard
標準キーボードしか出ない!
キーボードは設定画面で追加しないと 
キーボードを切り替えた時に現れないようです! 
デバッグ実行でキーボードを指定してるんだから直接起動したらいいのに。。。
設定でキーボードを追加 
設定 > 一般 > キーボード > 他社製キーボード 
から、作ったキーボードを有効化
現れた! 
灰色のこれ
KeyboardViewController 
デフォルトでキーボード切り替えボタンが 
生成されています。
KeyboardViewController 
キーボードでできる事…基本はこれだけ! 
入力文字列を渡すまでの間に、 
どのように文字列を生成するか、加工するかが、 
開発者の腕の見せどころ!
続いてガジェットについて
#もしガジェ 
About 
External Accessories 
Communicating with 
an Accessory
ExternalAccessoryFramework 
外部機器と接続するにはこのフレームワークが必須です!
Supported external accessory protocols 
※ info.plist 
さらに、 
接続する機器のID(Appleに認定された外部機器が持ってる)を 
指定すると、機器とアプリが連携できるようになります。
これで 
特定の外部機器と連携が可能に 
あとは機器によって必要なSDKや必要な制御があるので 
それに合わせて実装します。 
一般に、外部装置を制御するSDKが機器の開発元から配布されています。
いざ融合
用意するもの:既存プロジェクト
カスタムキーボードのターゲットを追加
追加されました!
External Accessory 対応 
App ExtensionのKeyboardターゲットに対して 
Frameworkの追加とPlistへの記入でAsReaderとの接続に対応
AsReader SDK 
AsReaderManagerクラスバーコードリーダーを制御してくれるクラス 
@interface AsReaderManager : NSObject<RcpDelegate> 
// AsReaderManag...
KeyboardViewController 
キーボード側で、読み取ったバーコードの値を受け取るための 
AsReaderManagerDelegateプロトコルを実装することを宣言 
@interface KeyboardViewContr...
KeyboardViewControllerにSDKを実装 
viewDidAppear でSDKをインスタンス化して自身をデリゲートにセット。 
@implementation KeyboardViewController 
- (void)...
KeyboardViewControllerにSDKを実装 
@implementation KeyboardViewController 
- (void)viewDidAppear:(BOOL)animated{ 
// SDKのインスタン...
うごかしてみた
だめだった
まだできる事がある 
※ info.plist
RequestsOpenAccess YES
“フルアクセスを許可”が設定に登場
これでどうでしょう
できた 
Safari上のWEB検索フォームで 
作ったキーボードを使ってみると 
バーコード読取ができました!
できた 
読み取ったバーコードで検索した結果と、本の表紙が一致! 
正しくバーコードを読めています
まとめ 
❖ カスタムキーボードは簡単に作れた 
❖ 出来る事は、文字列入力と1文字削除だけ 
❖ ただし裏で結構いろんな処理が実行出来る 
❖ Lightning接続した外部機器を制御するのも可 
❖ キーボードでゲームしたり遠隔操作したり出...
App Extensions プログラミングガイド 
ご興味ある方はぜひこちらもご覧ください。 
❖ https://developer.apple.com/jp/devcenter/ios/ 
library/documentation/Ex...
続編 
❖ 10/22(水) Potaitotips 
❖ 11/01(土) Cocoa勉強会関西 ★AppStoreリリース版担当者登場 
❖ 11/15(土) Cocoa勉強会関東 
SDKを組み込んだキーボードが 
AppStoreに公開...
(宣伝)
ハードとソフトの融合で 
業務の世界に革命を起こしたい 
iOSエンジニア募集中
導入企業様、 
対応アプリデベロッパー様募集中
ご清聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

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

30,390 views

Published on

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

Published in: Software
  • Be the first to comment

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

  1. 1. iOS8 App Extensions もしiOS8のカスタムキーボードが ガジェットのSDKを搭載したら カスタムキーボードを バーコードリーダーと 連携させてみた 2014/10/18 Ver.1.0.0 iOS 8/Swift エンジニア勉強会@ヤフー - connpass
  2. 2. 自己紹介 ❖ プログラム3年ぐらい ❖ 文系! ❖ iOS / 技術ネタ 初発表 @niwatako
  3. 3. B2B向けiOSエンジニアです
  4. 4. モバイルソリューションの
  5. 5. iOS向けハード製品も出しています。
  6. 6. iPhone / iPod touch 装着型、バーコードリーダー  モバイルソリューションの
  7. 7. しかし課題が…
  8. 8. バーコードリーダー製品の課題 アプリへのSDK組み込みが必須。 ・SDK搭載の専用アプリを開発するコスト ・他社製品からの乗り換え時のSDK差替コスト ・一般向けアプリや  Apple標準アプリにはSDKが組み込めない!
  9. 9. そこへiOS8が登場
  10. 10. iOS8 App Extensions カスタム キーボード 独自キーボードの作成が可能に
  11. 11. Before ピッ(読み取り) ◯ × SDK + APP APP 標準APP × SDKなし SDKなし SDK対応済みアプリでのみ 利用可能
  12. 12. After!? ピッ(読み取り) ◯ + APP APP 標準APP ◯ ◯ キーボード SDK どのアプリでも 利用可能
  13. 13. SDKを組込んだキーボードを作れば 全てのアプリで バーコードリーダーが使える?? でもそんなこと、本当にできるの?
  14. 14. やってみました。
  15. 15. Main subject #もしガジェ iOS8 のカスタムキーボードに ガジェット(External Accessory)と連携 する機能を埋め込むことは出来るのか?
  16. 16. まず カスタムキーボードについて
  17. 17. #もしガジェ About カスタムキーボードiOS8 App Extensions
  18. 18. カスタムキーボードは 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システムキーボードに代わるカスタムキーボードを、 あらゆるアプリケーションで使えるようにします。
  19. 19. How to develop?
  20. 20. App Extension の全体像
  21. 21. App Extension はアプリに同梱して配布 実行時は独立したサンドボックスを持つ App Extension は、アプリの中に組み込む形で配布します。 App Extensionを同梱しているアプリのことを、 App Extensionに対して Containing App と呼びます。 Containing App と App Extension は、サンドボックスが別々で独立しています。
  22. 22. 同梱してAppStoreから配布 エクステンション エクステンションを バンドルする親アプリ エクステンションを 呼び出して使うアプリ App Extension はアプリに同梱して配布 実行時は独立したサンドボックスを持つ App Extension は、アプリの中に組み込む形で配布します。 App Extensionを同梱しているアプリのことを、 App Extensionに対して Containing App と呼びます。 Containing App と App Extension は、サンドボックスが別々で独立しています。
  23. 23. カスタムキーボードには 親になるアプリが必要。
  24. 24. 用意するもの:既存プロジェクト
  25. 25. 用意するもの:既存プロジェクト
  26. 26. 続いてアプリに カスタムキーボードエクステンションを 追加します
  27. 27. カスタムキーボードのターゲットを追加
  28. 28. カスタムキーボードのターゲットを追加
  29. 29. カスタムキーボードのターゲットを追加
  30. 30. 聞かれたらSchemeをActivate
  31. 31. 追加されました!
  32. 32. 追加されました!
  33. 33. 実行してみます
  34. 34. Run!(Safariで)
  35. 35. ※エクステンションは単体では起動できません。  エクステンションを呼び出すHostAppを起動し、  HostApp上でエクステンションを起動します。  Safariを選んで実行してみます。
  36. 36. なにも起きない! キーボード見えない。。。
  37. 37. シミュレーターの 設定の問題でした
  38. 38. Toggle Software Keyboard
  39. 39. 標準キーボードしか出ない!
  40. 40. キーボードは設定画面で追加しないと キーボードを切り替えた時に現れないようです! デバッグ実行でキーボードを指定してるんだから直接起動したらいいのに。。。
  41. 41. 設定でキーボードを追加 設定 > 一般 > キーボード > 他社製キーボード から、作ったキーボードを有効化
  42. 42. 現れた! 灰色のこれ
  43. 43. KeyboardViewController デフォルトでキーボード切り替えボタンが 生成されています。
  44. 44. KeyboardViewController キーボードでできる事…基本はこれだけ! 入力文字列を渡すまでの間に、 どのように文字列を生成するか、加工するかが、 開発者の腕の見せどころ!
  45. 45. 続いてガジェットについて
  46. 46. #もしガジェ About External Accessories Communicating with an Accessory
  47. 47. ExternalAccessoryFramework 外部機器と接続するにはこのフレームワークが必須です!
  48. 48. Supported external accessory protocols ※ info.plist さらに、 接続する機器のID(Appleに認定された外部機器が持ってる)を 指定すると、機器とアプリが連携できるようになります。
  49. 49. これで 特定の外部機器と連携が可能に あとは機器によって必要なSDKや必要な制御があるので それに合わせて実装します。 一般に、外部装置を制御するSDKが機器の開発元から配布されています。
  50. 50. いざ融合
  51. 51. 用意するもの:既存プロジェクト
  52. 52. カスタムキーボードのターゲットを追加
  53. 53. 追加されました!
  54. 54. External Accessory 対応 App ExtensionのKeyboardターゲットに対して Frameworkの追加とPlistへの記入でAsReaderとの接続に対応
  55. 55. AsReader SDK AsReaderManagerクラスバーコードリーダーを制御してくれるクラス @interface AsReaderManager : NSObject<RcpDelegate> // AsReaderManagerDelegateプロトコルを実装したクラスをデリゲートとして保持 @property (assign)id<AsReaderManagerDelegate> delegate; @end AsReaderManagerDelegateプロトコル @protocol AsReaderManagerDelegate <NSObject> @optional // バーコードデータを通知するメソッド - (void)barcodeData:(NSString *)barcode; @end 読取りを通知するプロトコル
  56. 56. KeyboardViewController キーボード側で、読み取ったバーコードの値を受け取るための AsReaderManagerDelegateプロトコルを実装することを宣言 @interface KeyboardViewController : UIInputViewController <AsReaderManagerDelegate> - (void)barcodeData:(NSString *)barcode; @end
  57. 57. KeyboardViewControllerにSDKを実装 viewDidAppear でSDKをインスタンス化して自身をデリゲートにセット。 @implementation KeyboardViewController - (void)viewDidAppear:(BOOL)animated{ // SDKのインスタンス化とデリゲートのセット [[AsReaderManager sharedManager] setDelegate:self]; } - (void)barcodeData:(NSString *)barcode{ // デリゲートで受け取ったバーコードデータをキーボード入力文字として利用 [self.textDocumentProxy insertText:barcode]; } @end
  58. 58. KeyboardViewControllerにSDKを実装 @implementation KeyboardViewController - (void)viewDidAppear:(BOOL)animated{ // SDKのインスタンス化とデリゲートのセット [[AsReaderManager sharedManager] setDelegate:self]; } - (void)barcodeData:(NSString *)barcode{ // デリゲートで受け取ったバーコードデータをキーボード入力文字として利用 [self.textDocumentProxy insertText:barcode]; } @end バーコードを読み取った時にデータを通知で受け取る。 バーコードはそのままキーボード入力としてDocumentProxyに渡す。
  59. 59. うごかしてみた
  60. 60. だめだった
  61. 61. まだできる事がある ※ info.plist
  62. 62. RequestsOpenAccess YES
  63. 63. “フルアクセスを許可”が設定に登場
  64. 64. これでどうでしょう
  65. 65. できた Safari上のWEB検索フォームで 作ったキーボードを使ってみると バーコード読取ができました!
  66. 66. できた 読み取ったバーコードで検索した結果と、本の表紙が一致! 正しくバーコードを読めています
  67. 67. まとめ ❖ カスタムキーボードは簡単に作れた ❖ 出来る事は、文字列入力と1文字削除だけ ❖ ただし裏で結構いろんな処理が実行出来る ❖ Lightning接続した外部機器を制御するのも可 ❖ キーボードでゲームしたり遠隔操作したり出来る…?
  68. 68. App Extensions プログラミングガイド ご興味ある方はぜひこちらもご覧ください。 ❖ https://developer.apple.com/jp/devcenter/ios/ library/documentation/ExtensibilityPG.pdf ❖ 日本語!! ❖ カスタムキーボード (P.71~)
  69. 69. 続編 ❖ 10/22(水) Potaitotips ❖ 11/01(土) Cocoa勉強会関西 ★AppStoreリリース版担当者登場 ❖ 11/15(土) Cocoa勉強会関東 SDKを組み込んだキーボードが AppStoreに公開できるのか?など 今後お話できればと思います。 (現在結果待ち…)
  70. 70. (宣伝)
  71. 71. ハードとソフトの融合で 業務の世界に革命を起こしたい iOSエンジニア募集中
  72. 72. 導入企業様、 対応アプリデベロッパー様募集中
  73. 73. ご清聴ありがとうございました

×