SlideShare a Scribd company logo
iOS8 App Extensions 
もしiOS8のカスタムキーボードが 
ガジェットのSDKを搭載したら 
カスタムキーボードを 
バーコードリーダーと 
連携させてみた 
2014/10/18 Ver.1.0.0 
iOS 8/Swift エンジニア勉強会@ヤフー - connpass
自己紹介 
❖ プログラム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)」ビューに置いて、 表示 
内容を即座に更新し、あるいは簡単なタスクを 実行する 
(この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システムキーボードに代わるカスタムキーボードを、 
あらゆるアプリケーションで使えるようにします。
How to develop?
App Extension の全体像
App Extension はアプリに同梱して配布 
実行時は独立したサンドボックスを持つ 
App Extension は、アプリの中に組み込む形で配布します。 
App Extensionを同梱しているアプリのことを、 
App Extensionに対して Containing App と呼びます。 
Containing App と App Extension は、サンドボックスが別々で独立しています。
同梱してAppStoreから配布 
エクステンション 
エクステンションを 
バンドルする親アプリ 
エクステンションを 
呼び出して使うアプリ 
App Extension はアプリに同梱して配布 
実行時は独立したサンドボックスを持つ 
App Extension は、アプリの中に組み込む形で配布します。 
App Extensionを同梱しているアプリのことを、 
App Extensionに対して Containing App と呼びます。 
Containing App と App Extension は、サンドボックスが別々で独立しています。
カスタムキーボードには 
親になるアプリが必要。
用意するもの:既存プロジェクト
用意するもの:既存プロジェクト
続いてアプリに 
カスタムキーボードエクステンションを 
追加します
カスタムキーボードのターゲットを追加
カスタムキーボードのターゲットを追加
カスタムキーボードのターゲットを追加
聞かれたら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> 
// AsReaderManagerDelegateプロトコルを実装したクラスをデリゲートとして保持 
@property (assign)id<AsReaderManagerDelegate> delegate; 
@end 
AsReaderManagerDelegateプロトコル 
@protocol AsReaderManagerDelegate <NSObject> 
@optional 
// バーコードデータを通知するメソッド 
- (void)barcodeData:(NSString *)barcode; 
@end 
読取りを通知するプロトコル
KeyboardViewController 
キーボード側で、読み取ったバーコードの値を受け取るための 
AsReaderManagerDelegateプロトコルを実装することを宣言 
@interface KeyboardViewController : UIInputViewController <AsReaderManagerDelegate> 
- (void)barcodeData:(NSString *)barcode; 
@end
KeyboardViewControllerにSDKを実装 
viewDidAppear でSDKをインスタンス化して自身をデリゲートにセット。 
@implementation KeyboardViewController 
- (void)viewDidAppear:(BOOL)animated{ 
// SDKのインスタンス化とデリゲートのセット 
[[AsReaderManager sharedManager] setDelegate:self]; 
} 
- (void)barcodeData:(NSString *)barcode{ 
// デリゲートで受け取ったバーコードデータをキーボード入力文字として利用 
[self.textDocumentProxy insertText:barcode]; 
} 
@end
KeyboardViewControllerにSDKを実装 
@implementation KeyboardViewController 
- (void)viewDidAppear:(BOOL)animated{ 
// SDKのインスタンス化とデリゲートのセット 
[[AsReaderManager sharedManager] setDelegate:self]; 
} 
- (void)barcodeData:(NSString *)barcode{ 
// デリゲートで受け取ったバーコードデータをキーボード入力文字として利用 
[self.textDocumentProxy insertText:barcode]; 
} 
@end 
バーコードを読み取った時にデータを通知で受け取る。 
バーコードはそのままキーボード入力としてDocumentProxyに渡す。
うごかしてみた
だめだった
まだできる事がある 
※ info.plist
RequestsOpenAccess YES
“フルアクセスを許可”が設定に登場
これでどうでしょう
できた 
Safari上のWEB検索フォームで 
作ったキーボードを使ってみると 
バーコード読取ができました!
できた 
読み取ったバーコードで検索した結果と、本の表紙が一致! 
正しくバーコードを読めています
まとめ 
❖ カスタムキーボードは簡単に作れた 
❖ 出来る事は、文字列入力と1文字削除だけ 
❖ ただし裏で結構いろんな処理が実行出来る 
❖ Lightning接続した外部機器を制御するのも可 
❖ キーボードでゲームしたり遠隔操作したり出来る…?
App Extensions プログラミングガイド 
ご興味ある方はぜひこちらもご覧ください。 
❖ https://developer.apple.com/jp/devcenter/ios/ 
library/documentation/ExtensibilityPG.pdf 
❖ 日本語!! 
❖ カスタムキーボード (P.71~)
続編 
❖ 10/22(水) Potaitotips 
❖ 11/01(土) Cocoa勉強会関西 ★AppStoreリリース版担当者登場 
❖ 11/15(土) Cocoa勉強会関東 
SDKを組み込んだキーボードが 
AppStoreに公開できるのか?など 
今後お話できればと思います。 
(現在結果待ち…)
(宣伝)
ハードとソフトの融合で 
業務の世界に革命を起こしたい 
iOSエンジニア募集中
導入企業様、 
対応アプリデベロッパー様募集中
ご清聴ありがとうございました

More Related Content

PDF
既存アプリのiOS8対応 #ios8yahoo
PDF
Xcode 6の新機能
PDF
iOS 8/Swift 概要 #ios8yahoo
PDF
Xcodeを便利に使って爆速開発する #yxcm
PDF
Swift勉強会
PDF
Xcode 7 の新しいところ #cm_ios9
PDF
NSNotification in Swift #cocoa_kansai
PDF
Swift ドキュメントコメント
既存アプリのiOS8対応 #ios8yahoo
Xcode 6の新機能
iOS 8/Swift 概要 #ios8yahoo
Xcodeを便利に使って爆速開発する #yxcm
Swift勉強会
Xcode 7 の新しいところ #cm_ios9
NSNotification in Swift #cocoa_kansai
Swift ドキュメントコメント

What's hot (20)

PDF
可変値変数 var を極力避けることを模索するための事前知識 #cswift
PDF
Swift入門
PDF
Xcode グループとフォルダー参照 #yhios
PDF
Swift 構造体の時代 #yidev
PDF
はじめてのiOSアプリ開発 ①
PDF
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
PDF
Xcode 7で始めるCI
PDF
プロトコル拡張の話? #WWDC21cafe
PDF
iOS豆知識ver0.0.5
PDF
OSC2011Tokyo/Fall OpenStack Swift入門
PDF
Core Image Tips & Tricks in iOS 9
PDF
Swift の可変値と不変値 #cocoa_kansai
PDF
Swift を振り返ってみよう #cswift
PDF
Apple審査を一発通過! iOS開発経験0でも出来る じげん流Swift開発のすべて
PDF
Swiftアプリ制作入門 かんたんシューティングゲーム
PDF
Android カスタムROMの作り方
PDF
ようこそ! Swift Playgroundsへ
PDF
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
PDF
Css nite(2010.09.23)
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Swift入門
Xcode グループとフォルダー参照 #yhios
Swift 構造体の時代 #yidev
はじめてのiOSアプリ開発 ①
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Xcode 7で始めるCI
プロトコル拡張の話? #WWDC21cafe
iOS豆知識ver0.0.5
OSC2011Tokyo/Fall OpenStack Swift入門
Core Image Tips & Tricks in iOS 9
Swift の可変値と不変値 #cocoa_kansai
Swift を振り返ってみよう #cswift
Apple審査を一発通過! iOS開発経験0でも出来る じげん流Swift開発のすべて
Swiftアプリ制作入門 かんたんシューティングゲーム
Android カスタムROMの作り方
ようこそ! Swift Playgroundsへ
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
Css nite(2010.09.23)
iPhoneアプリ開発の歩き方〜Swift編〜
Ad

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

PPTX
Appsheet基礎講座.pptx
KEY
プロ文.com 勉強会 Phase 1
PDF
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
PPTX
ひと目でわからん Metro アプリ開発入門
PPTX
iOSアプリ開発のCI環境 - Jenkins編 -
PDF
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
PDF
Yidev201406.pub
PPTX
Shaping up ATOK to fit to your iPhone / iPad
PDF
福井スマートフォンハッカソン Titanium Mobileの紹介
PDF
キーボードアプリとSketchのススメ
PDF
Ubuntu Tokyo Meeting 9.08
PDF
[CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイ...
PDF
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
PDF
Wankuma0402
PDF
デザイナー目線で Firefox OS を変えよう
PDF
tvOS tips
PDF
プログラミング講座 #3 コードを書く
PDF
Developer Summit 2014, 13-C-4 セッション
PPTX
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
PDF
iPhoneアプリ無料勉強会 vol3
Appsheet基礎講座.pptx
プロ文.com 勉強会 Phase 1
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
ひと目でわからん Metro アプリ開発入門
iOSアプリ開発のCI環境 - Jenkins編 -
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Yidev201406.pub
Shaping up ATOK to fit to your iPhone / iPad
福井スマートフォンハッカソン Titanium Mobileの紹介
キーボードアプリとSketchのススメ
Ubuntu Tokyo Meeting 9.08
[CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイ...
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
Wankuma0402
デザイナー目線で Firefox OS を変えよう
tvOS tips
プログラミング講座 #3 コードを書く
Developer Summit 2014, 13-C-4 セッション
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
iPhoneアプリ無料勉強会 vol3
Ad

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