WWDC Quick Look 💓 By SwiftGGTeam
Beyond counting steps

Beyond counting steps

观看原视频

Highlight

iOS 14 和 watchOS 7 将步速、步长、双支撑时间、步行不对称性、上下楼速度、六分钟步行距离和改进后的 VO2Max 写入 HealthKit,让 app 能用日常携带的 iPhone 和 Apple Watch 追踪行动能力变化。

核心内容

临床上评估一个人怎么走路,常见办法并不轻松。六分钟步行测试需要一段 30 米走廊,问卷依赖回忆和主观感受,动作捕捉又需要昂贵设备、摄像头、标记点和受训技术人员。它们能给出有价值的数据,可大多只是少数时间点的快照。

这场 session 的出发点很具体:用户真正关心的是日常生活中走得怎么样。Apple 在 iOS 14 和 watchOS 7 里把一组 Mobility Metrics(行动能力指标)开放到 HealthKit。iPhone 放在口袋或腰侧时,可以记录平地连续步行片段里的步速、步长、双支撑时间和步行不对称性。Apple Watch 还能提供上下楼速度、预测的六分钟步行距离,以及适合低体能用户的 VO2Max 估算。

讲者用 Jamie 脚踝受伤后的康复过程做例子。app 不再只数今天走了多少步,而是读取受伤前 30 天到受伤后 60 天的步速,找出受伤造成的下降,再把恢复期的细小进展变成图表。后面再加入双支撑时间和六分钟步行距离,帮助用户理解速度变化背后的步态质量和体能恢复。

详细内容

这场 session 没有公开代码片段。下面只按逐字稿里的 API 名称、数据处理步骤和限制条件展开,不放 fenced code。

读取新的 Mobility Metrics

03:22)Apple 将一组新的行动能力指标加入 HealthKit。iPhone 侧包含 walking speed、step length、double support time 和 walking asymmetry。Apple Watch 侧包含上下楼速度、预测的 six-minute walk distance,以及改进后的 VO2Max。

关键点:

  • walking speed 是 HealthKit quantity type。示例 app 只读取数据,不写回 HealthKit,所以授权请求只需要 read access。
  • 查询范围从 Jamie 受伤前 30 天开始,到受伤后 60 天结束。这样能先建立 baseline,再观察恢复曲线。
  • 查询结果回调拿到的是匹配的 HKSamples。活跃用户可能返回数百条 walking speed samples,直接画全量点会很拥挤。
  • walking speed 不是全天所有走路的总量。它记录平地、连续、条件稳定的步行片段,因此更适合比较康复前后的变化。

把全天样本压成趋势

11:03)全天被动采集的数据很嘈杂。同一个人的步速会被赶会议、遛狗、同行者速度、天气和通勤方式影响。讲者建议结合医生、物理治疗师、生物力学专家或数据科学团队,先决定当前场景真正有意义的汇总方式。

Jamie 的案例选择了每日第 95 分位步速。原因是康复场景更关心接近最高能力的步行表现,例如能不能快走过马路;第 95 分位又比单个最高值更不容易被离群值带偏。

关键点:

  • 以午夜作为每天的起止点,用 enumerateDates 按天遍历查询范围。
  • 输出数组使用 optional values,因为用户某一天可能没带手机、活动太少,或者没有足够 walking speed 数据。
  • 有数据的日期,从 HKQuantitySamples 里取出 walking speed values,按图表使用的 miles per hour 单位计算。
  • 每天先排序,再取第 95 分位;恢复周期按周观察,所以再做 7 天平均。
  • 受伤日期要作为计算边界。不要把受伤前的 baseline 和受伤后的恢复值混在同一个平滑窗口里。

用步态质量解释速度变化

14:27)速度下降不一定只说明康复倒退。天气、通勤、陪家人散步都会改变当天步速。Mobility Metrics 的价值在于能把 walking speed 和 walking quality 放在一起看。

double support time 表示一次步行中双脚同时接触地面的时间占比。讲者说明,较低数值通常更好,因为它意味着行走者花在双脚稳定身体上的时间更少。Jamie 的例子里,即使热浪期间步速变慢,double support time 仍然持续回到受伤前水平,这给了 app 一个解释恢复进展的第二视角。

关键点:

  • double support time 和 six-minute walk distance 可以像 walking speed 一样加入请求列表并查询。
  • six-minute walk distance 可能来自 Apple Watch 的预测值,也可能是用户在 Health App 里手动输入的诊所测试结果。
  • 需要检查 HKSample 的 SourceRevision 和 Metadata。bundle identifier 可用于识别 Apple 记录的数据,WasUserEntered metadata key 为 true 时代表用户手动录入。
  • 图表可以把诊所手动测试值和 Apple Watch 预测值分成两组点。前者是红色的少量快照,后者是绿色的连续系统估算。

记住采集条件和元数据

19:18)最后的建议集中在边界条件。iPhone 的 mobility values 需要用户把手机放在接近腰部的位置,并在平地行走。six-minute walk distance 需要一周 Apple Watch 佩戴数据。样本还带有 start/end times、预测六分钟步行距离的 calibration status 等 metadata。

关键点:

  • 如果 app 需要更底层的运动信号,可以用 CMMotionManager 读取 iPhone 和 Apple Watch 的惯性传感器数据。
  • 如果要跟踪高度变化,可以使用 CMAltimeter。
  • 2020 年还新增了 headphone motion API,让 AirPods Pro 成为新的惯性信号位置。
  • 聚合策略不应该只由工程师决定。演讲明确建议和物理治疗师、医生、生物力学专家一起定义指标含义。

核心启发

  • 康复进度面板:让用户输入受伤日期,读取受伤前 30 天和受伤后 60 天的 walking speed。起点用每日第 95 分位和 7 天平均展示恢复曲线,图上标出受伤日,帮助用户看到小幅进步。

  • 步态质量解释卡片:在步速曲线下方加入 double support time。当天速度下降时,如果双支撑时间仍在改善,app 可以解释为步态稳定性继续恢复,避免用户只盯着单一速度数值。

  • 诊所测试对照图:把 Health App 手动录入的 six-minute walk test 和 Apple Watch 预测的 six-minute walk distance 放在同一张图上。实现入口是读取同一类样本,再用 SourceRevision 和 WasUserEntered metadata 区分来源。

  • 护理团队周报:面向 CareKit 场景,把每周 walking speed、double support time 和 six-minute walk distance 汇总成一页报告。报告只展示趋势、缺失日期和采集条件,方便物理治疗师判断是否需要调整训练计划。

  • 研究型行动能力日志:结合 ResearchKit 图表和问卷,让参与者在 mobility metrics 旁补充疼痛、疲劳、天气或运动计划变化。这样能把被动采集的 walking samples 和主动报告放在同一条时间线上分析。

关联 Session

评论

GitHub Issues · utterances