WWDC23で新たにWorkoutKitが追加されています。これはApple Watchのワークアウトを作成できるもので、たとえばダイエットしたい人向けに、その人にあったワークアウトを提供するような用途として使えます。例えば、以下のようなワークアウトを作成できます。
- 10分走って5分休憩、これを3回繰り返す
- 3キロ走って3分休憩、これを5回繰り返す
- 500キロカロリー消費するまで動く
説明はWWDC23のこのセッションが詳しいです。
このセッションで言われていることが実現できるのですが、秋にリリースした正式版では結構APIの形が変わっていたので注意が必要です。
BlockStepは、正式リリース時には IntervalStepに変わっていますし、WarmupStepやCooldownStepはシグネチャがなくなり、IntervalStepを使うようになっています。CustomWorkoutCompositionも、CustomWorkoutに変わっています。
この辺りの対応はサンプルコードに反映されているので、セッションと合わせてサンプルコードも確認すると、正式APIでどうすれば良いのかを確認できます。
一番困ったのは、ワークアウトのプレビューを表示する方法の変化でした。
セッションでは try await workoutComposition.presentPreview() のようにプレビューを表示していたのですが、サンプルコードではSwiftUIのworkoutPreviewモディファイアとして実装されています。
iOSではプレビューはシート形式で表示されるため、モディファイアで実装されるのが自然です。しかし、Apple Watchではワークアウトアプリへのインテントとして実現されるため、モディファイアで実現されるのには違和感があり、事実このモディファイアはApple Watchでは使えませんでした。
Apple Watchではどうすればいいのかがわからなくてしばらくドキュメントと睨めっこしていたのですが、openInWorkoutAppというメソッドがWorkoutPlanに増えていたので、これを使えばいいということがわかりました。
なぜかwatchOSだけでなく、iPadOSにも対応していることになっているのが謎ですね。なんでなんでしょう・・・?