iOS 8 の新機能の中でも個人的に気になったのが HomeKit と HealthKit。でも何ができるのか、実際どうやって使うのか、どこまでAPIが開発者に公開されてるのか、発表だけ聞いてもいまいちピンと来ません。
実際に自分で試してみるのが一番です。
そんなわけで、HealthKit、HomeKit を対応デバイスなしでいますぐ試す方法 について6/14日に開催された yidev 第15回勉強会で、表題の内容で発表してきました。
スライドはアップしないつもりだったのでKeynoteではなく Markdown でスライドをつくった のですが、世間的にWWDCの動画(今年のは一般公開されてる)ぐらいまでなら全然OKだよねっていう雰囲気っぽいのでここに内容を貼り付けておきます。
自己紹介
- フリーランスiOSデベロッパー
- ブログ:Over&Out その後
- 著書:iOSアプリ開発 達人のレシピ100
HealthKit
HealthKit でできること
- 健康、運動データの保存、アクセス
- セキュリティ、プライバシー設定
- 検索、統計クエリ
- 単位変換
- 新データの通知
- アクセサリーの統合
とりあえずデバイス繋いで使ってみる
HealthKit デバイスの接続方法
- APIを探しても見当たらない
- WWDCセッション動画 "Introducing HealthKit"を見ても見当たらない
→ iOS8に標準で付いてくる "Health" アプリを利用する
対応デバイスを用意する
HealthKit 対応デバイス
"HealthKit対応"を謳ったものは当然まだない
→ BLEの標準プロファイルをサポートしてるので既存デバイスで普通に繋がる
- Heart Rate Monitor
- Glucose Sensor
- Blood Pressure Monitor
- Health Thermometer
対応デバイスを買いたくない
売り上げランキング: 4,280
わりと高い。。
対応デバイスを代用する
iPhoneでエミュレートする
- Core Bluetooth で実装する
- アプリを使用する(例:LightBlue)
BLEモジュールにファームを書き込む
- 例:BLE113 Development Kit
参考:BLE112 / 113 の開発環境を Mac に構築する - Over&Out その後
デモ
公式サンプル "Fit" のビルド方法
【iOS8】HealthKit の Apple 公式サンプルを実機で動作させようとすると出るエラーの対処方法 - Over&Out その後
参考資料
動画
- Designing Accessories for iOS and OS X (701)
- Introducing HealthKit (203)
Dev Center
- HealthKitのサンプルコード
- クラスリファレンスはまだない
HomeKit
HomeKitとは?
- 各種アクセサリを独自のプロトコルで統一する
- アクセサリ:鍵、照明、カメラ、ドア、サーモスタットetc...
- ユーザ別にデバイスを制御する方法や、デバイスをGroup化して制御する機構を提供する
デバイス接続手段
- Bluetooth Low Energy
- IP
HomeKit Accessory Profiles
- → Service, Characteristicって、BLEのGATTベースプロファイル?
- → NO!
HomeKit Accessory Protocol Layers
BLE の GATT、IP の JSON をラップする独自プロトコル
プロトコルやプロファイルの仕様は?
要MFi
では、試せないのか?
Home Kit Accessory Simulator
起動方法
[Xcode] > [Open Developer Tool] > [Home Kit Accessory Simulator]
新規アクセサリ作成
[+] > [New Accessory]
- サービス追加
- Add Light Bulb
- Add Garage Door Opener
- Add Thermostat
- Add Lock
- Add Switch
- 有効化
- スイッチをONに
同じ WiFi 内ならこれでアクセサリとして HMAccessoryBrowser から発見できる。
実装方法
(実はこれはプレゼンでは説明してないのですが、簡単に。)
マネージャ生成
self.homeManager = [[HMHomeManager alloc] init]; self.homeManager.delegate = self;
家を生成
[self.homeManager addHomeWithName:@"First Home" completionHandler:^(HMHome *home, NSError *error) { if (error) { NSLog(@"error:%@", error); return; } }];
部屋を生成して家にaddする
[home addRoomWithName:@"First Room" completionHandler:^(HMRoom *room, NSError *error) { if (error) { NSLog(@"error:%@", error); } else { NSLog(@"success!"); } } ];
アクセサリ(周辺デバイス)を探す
self.accessoryBrowser = [[HMAccessoryBrowser alloc] init]; self.accessoryBrowser.delegate = self; [self.accessoryBrowser startSearchingForNewAccessories];
デリゲートメソッドまわりは省略。
Siri連携
(口頭で話しただけ)
参考資料
動画
- Designing Accessories for iOS and OS X (701)
- Introducing HomeKit (213)
Dev Center
- Home Kit の各クラスリファレンス
- サンプルはまだない
See Also
ご清聴ありがとうございました!