手表上的应用
手表屏小、戴在手上,应用得一眼看清、抬手即看。它常是 iPhone 应用的 companion,也能独立跑。健康数据是手表最核心的场景。表盘常年贴着皮肤,天然适合持续感知心率、步数这些随身信号,这正是手机做不到、手表独有的价值。
手表应用的第一原则:少一步操作,多一眼信息。
这篇把 watchOS 与健康开发过一遍。
WatchKit 与界面
watchOS 界面用 SwiftUI 写,配合 WatchKit 处理生命周期与 complication。注意手表的屏幕小,字号要大、布局要单栏。
watchOS 速查
- 界面SwiftUI 写,单栏大字。
- HealthKit拿健康数据要授权。
- 活动环步数与活动能量。
HealthKit 授权与数据
读健康数据先请求授权,用户明确同意哪类才拿哪类。隐私是红线,别申请不需要的权限。
let store = HKHealthStore()
let heart = HKObjectType.quantityType(
forIdentifier: .heartRate)!
store.requestAuthorization(toShare: nil, read: [heart])
授权一次,后面才能读。用户能在系统设置里随时收回,所以你的应用在没拿到授权时要有得体的空状态,别一打开就崩。
读取心率与活动环
心率、步数、活动能量都在 HealthKit 里。用查询拉取当天数据,算出来就是活动环的三段。站得越久、动得越多,环闭合得越满。
表盘复杂度
complication 是表盘上的小入口,让用户不打开应用就能扫一眼你的数据。把最关键的一两个数字放上去。
隐私与电量
健康数据极敏感,默认只读、能少则少。手表电量宝贵,别每秒钟轮询,用后台刷新按需取数。
- 只申请需要的健康权限。
- 别频繁轮询耗电。
- 表盘只放关键数字。
实战:今日心率
拉今天的心率区间显示出来。
let now = Date()
let start = Calendar.current
.startOfDay(for: now)
let pred = HKQuery.predicateForSamples(
withStart: start, end: now)
// 按 pred 采样,取平均值显示
授权一次,每天抬手就能看到心率。手表健康应用做到这份上,才算真正好用。用户不用掏手机,抬一下手腕就能掌握自己的身体状态。