watchOSアプリのワークアウト(HKWorkoutSession)のバックグランド実行について調べてみた

はじめに

Apple Watchは、手首を上げると文字盤が表示され、watchOSアプリが動作可能です。
手首を下げた状態だと基本的にwatchOSアプリのバックグランドも含めた動作は実行できません。Apple Watchのバッテリーを極力使用しない設計思想のためこのような動作になっているようですね。

手首を下げた状態でもwatchOSアプリをバックグランド実行させたい。。
具体的には、AppleWatchでワークアウト(ウォーキング・ランニングなど運動の成果を記録するための機能)中にwatchOSアプリからiOSアプリへバックグラウンドでデータ(歩いた距離や歩数など)を連携させたいなーと考えています。
ちなみにAppleWatchに搭載されているワークアウトのアプリは以下の画像のようなものです。


調べてみるとHKWorkoutSessionを使えばワークアウトをバックグラウンド実行できるようですね!
ということでひとまず、HKWorkoutSessionのバックグランド実行について見ていきたいと思います。

HKWorkoutSessionのバックグラウンド実行

HKWorkoutSessionのバックグランド実行では以下のことができるようです。
  • 手首を下げた状態だったり、他のアプリを起動して割り込まれた時でもwatchOSアプリのワークアウトをバックグランド実行できる。
  • AppleWatchのセンサーのデータにアクセスすることができるので、watchOSアプリはいつも最新の状態を保つことができる。
  • 音や振動でユーザに知らせることができる。
どうやら問題なく自作のwatchOSアプリでワークアウトのバックグランド実行はできることがわかりました!
ただし、上記のバックグランド実行に加えて、親のiOSアプリへwatchOSアプリのデータを連携できるのかはまだわかっていません。。これについては、後日試した結果も踏まえてブログに追記していきたいと思います。

HKWorkoutSessionのバックグランド実行の注意事項

AppleWatchの高いパフォーマンスを維持するために、バックグランドの実行を制限する必要があります。もしwatchOSアプリがCPUを高負荷で使う場合、停止されるようです。。
CPUの負荷については、XCodeCPUレポートなどを使って把握することができるので開発時には要チェックです。また、watchOSアプリがCPUの閾値を超えたり、停止した場合、ログが出力されるのでこちらも要チェックです。
あと、バックグランド実行するためには、WatchKit ExtensionInfo.plistWKBackgroundModes(キーはworkout-processing)を追加しなければならないので漏れないようにしないといけないですね。

最後に

今回はHKWorkoutSessionのバックグランド実行について調べてみました。バックグラウンド実行はできるのですが色々と制約があるので注意しないといけないです。。
なにはともあれ、これから実際に試してみたいと思います!やりたいことができたらいいなー。
また試した結果はブログで発信します!

コメント

お問い合わせ

名前

メール *

メッセージ *