watchOSで心拍数を取得する

AppStoreに並んでいるwatchOS向けのアプリを見るとアクティビティ、運動、健康、睡眠管理のアプリが多い。試しにアプリから心拍数を取得してみた、実際の画面はこちら。

画像1

ソースコードはこちら。

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 が足りないと怒られてしまったので追加しておいた方が良さそう。

スクリーンショット 2020-05-27 18.30.43

UIは WatchKit App 側のstoryboardに追加する。レイアウトの試行錯誤をしていた際に、Groupの中にLabelを追加すると1行に複数のLabelを置くことができるのを知った、通常は1行に1コンポーネントのはず。

スクリーンショット 2020-05-27 18.41.24

あとはインターネットなどのコードを参考に HealthKit を使って心拍数を取得してLabelにセットするコードを追加する。

コードを書いてアプリを動かしたら心拍数が取得できたが、AppleWatchを付けた手首を下げるとアプリの状態遷移によってデータの更新が止まってしまった。AppleWatchで手を下ろした状態でアプリを動作させるにはワークアウトセッションを用意する必要があるらしい。

セッションを作成して、セッション中に心拍数を取得すると手首を下ろした状態でもデータが取得できるようになった。

まとめ

watchKitで心拍数を取得するのは簡単ではあるが、データの正確性が求められるケースではHealthKitのデータ形式・フォーマットについて正しく理解する必要がありそうだ。


いいなと思ったら応援しよう!