watchOSで心拍数を取得する
AppStoreに並んでいるwatchOS向けのアプリを見るとアクティビティ、運動、健康、睡眠管理のアプリが多い。試しにアプリから心拍数を取得してみた、実際の画面はこちら。
ソースコードはこちら。
HealthKitで心拍数を取得する
心拍数を取得するにはHealthKitを使う。HealthKitを使うにはInfo.plistにPrivacyの定義が必要、WatchKit Extension 側に追加する。
Privacy - Health Share Usage Description
Privacy - Health Update Usage Description
データの参照するだけであれば Health Share Usage Description のみ定義すれば良いと思ったが(実際、それだけで動作はする)、たまたまAppStoreにwatchOSアプリを申請した際に Health Update Usage Description が足りないと怒られてしまったので追加しておいた方が良さそう。
UIは WatchKit App 側のstoryboardに追加する。レイアウトの試行錯誤をしていた際に、Groupの中にLabelを追加すると1行に複数のLabelを置くことができるのを知った、通常は1行に1コンポーネントのはず。
あとはインターネットなどのコードを参考に HealthKit を使って心拍数を取得してLabelにセットするコードを追加する。
コードを書いてアプリを動かしたら心拍数が取得できたが、AppleWatchを付けた手首を下げるとアプリの状態遷移によってデータの更新が止まってしまった。AppleWatchで手を下ろした状態でアプリを動作させるにはワークアウトセッションを用意する必要があるらしい。
セッションを作成して、セッション中に心拍数を取得すると手首を下ろした状態でもデータが取得できるようになった。
まとめ
watchKitで心拍数を取得するのは簡単ではあるが、データの正確性が求められるケースではHealthKitのデータ形式・フォーマットについて正しく理解する必要がありそうだ。