Build a multi-device workout app
System & Services 进阶 20m

构建多设备协同的健身应用

Build a multi-device workout app

2023年6月5日

在 Apple 官方观看视频

一句话判断

HealthKit 新增了 Watch-iPhone 训练镜像 API,让 Apple Watch 上的训练数据实时同步到 iPhone 显示——骑行时把手机当码表用的场景终于有了官方支持。iPad 上也迎来了 HealthKit 和健康 App。

这场 Session 讲了什么

Session 介绍了 HealthKit 在 iOS 17/watchOS 10 中的三项重要更新:训练镜像(Workout Mirroring)、新的骑行数据类型、以及 HealthKit 登陆 iPad。

训练镜像允许 Apple Watch 上运行的训练会话在配对的 iPhone 上实时显示和控制。Watch 端使用 HKWorkoutSession 管理训练生命周期(开始、暂停、停止),iPhone 端通过新的镜像 API 接收实时心率、距离、速度等指标。用户可以把 iPhone 固定在自行车把手上当码表使用,不用把手离开车把就能看到数据。

新的骑行数据类型包括骑行速度(Cycling Speed)、功率(Power)、踏频(Cadence)和功能阈值功率(FTP)。这些数据通过 HealthKit 的新 HKQuantityType 收集,支持跨设备同步。

HealthKit 来到 iPad:用户在 iCloud 登录的 iPad 上可以看到通过 HealthKit 同步的健康数据。这为健康和训练数据的展示提供了更大的屏幕空间,适合做训练后的详细分析。

值得深挖的点

镜像 API 的双向控制:不只是单向显示——iPhone 端也可以控制 Watch 上的训练(暂停、恢复、停止)。这意味着你可以设计更丰富的控制界面,比如在 iPhone 上展示训练区间选择器,然后传给 Watch 执行。

骑行功率的标准化:功率数据之前是第三方 App 各自为政,现在通过 HealthKit 标准化后,不同 App 之间可以共享功率数据。FTP 的引入让功率区间训练成为可能。

iPad HealthKit 的授权模型:iPad 上的 HealthKit 授权与 iPhone 类似,但考虑到 iPad 的家庭共享场景,授权细节需要特别注意。

代码片段

在 iPhone 端镜像 Watch 训练(概念示例):

import HealthKit

// 在 iPhone 端创建训练镜像连接
let workoutSession = HKWorkoutSession(
    healthStore: healthStore,
    configuration: workoutConfiguration
)

// 监听来自 Apple Watch 的训练事件
let mirror = HKLiveWorkoutDataSource(
    healthStore: healthStore,
    workoutConfiguration: workoutConfiguration
)

// 收集新的骑行指标
let cyclingSpeedType = HKQuantityType(.cyclingSpeed)
let cyclingPowerType = HKQuantityType(.cyclingPower)
let cyclingCadenceType = HKQuantityType(.cyclingCadence)

// 订阅实时数据更新
// 在 iPhone 上显示:速度、功率、踏频、心率等

最佳实践

  • 利用镜像 API 为运动场景设计 iPhone 端的大屏数据展示
  • 骑行类 App 应尽快接入新的功率和踏频数据类型
  • iPad 端适合展示训练后的详细分析,而非实时运动界面
  • 跨设备同步依赖 iCloud,确保在网络不佳时也有本地缓存策略
  • 测试时验证 Watch-iPhone 连接断开后的恢复行为

还有什么值得关注

  • 训练镜像 API 在第三方训练设备上的支持
  • FTP 的计算和更新策略
  • iPad 上 HealthKit 数据的隐私和共享设置
  • 跨设备训练数据的冲突解决机制
WWDC 2023