HealthKit:它是什么、工作原理及集成

作者: IT Sectr 发布日期: 2026-03-25 阅读时间: 8 分钟

HealthKit 框架是 Apple 健康生态系统的中心组件,它将来自 iPhone、Apple Watch 和第三方设备的数据聚合到受保护的本地存储中。据 Apple Developer Documentation, 2025,该平台支持超过 100 种数据类型——从身体活动和睡眠到实验室分析和心血管系统指标。单一存储库存储医疗信息,通过对每种数据类型的粒度访问控制,确保应用程序之间无缝同步。

主要观点

  • HealthKit — Apple 框架,用于在 iOS 应用程序之间收集、存储和交换健康数据。
  • HKHealthStore — 中心对象,应用程序通过它与健康数据进行交互。
  • 数据类型分为定量的 HKQuantityType 和分类的 HKCategoryType。
  • 隐私 — 每个应用程序单独请求每种数据类型的读取和写入权限。
  • Apple Watch自动将活动、心率和锻炼数据传输到 HealthKit。

什么是 HealthKit?

HealthKit 是 Apple 于 2014 年随 iOS 8 一起推出的框架,旨在集中管理用户的健康和身体活动数据。该平台作为统一仓库,应用程序和设备可以在其中写入和读取医疗信息。

与第三方方案不同的是,HealthKit 直接嵌入iOS 操作系统,这确保了硬件层面的高性能和安全性。应用程序之间没有直接访问权限——所有操作都通过中心的 HKHealthStore 进行。

据 Apple WWDC 2024 报告,美国超过 87% 的 iPhone 用户至少有一次使用过内置的“健康”应用,该应用正是基于 HealthKit 构建的。生态系统包含数千个第三方应用程序——从健身追踪器到远程医疗服务。

HealthKit 架构

HealthKit 的架构基于多层存储原理,为每个数据源提供隔离的容器。底层是使用硬件 AES-256 加密的 SQLite 数据库。顶层是 HKHealthStore——统一的交互接口。

每条记录包含元数据:数据源 HKSource、设备 HKDevice、日期、时间以及来自 iCloud 的同步标志。系统自动去除来自同一源的重复记录,避免统计数据的失真。

数据按类型分组——HKQuantityType用于数值指标(心率、步数、卡路里),HKCategoryType 用于分类事件(睡眠、症状、月经周期)。这种结构可以通过 HKSampleQuery 或 HKStatisticsQuery 灵活查询任何参数组合。

HealthKit 中的数据类型

HealthKit 支持超过 100 种标准化数据类型,分为以下类别:身体活动、营养、睡眠、心血管系统、生殖健康、实验室参数和生命体征。每种类型都有 HKUnit 计量单位和访问级别。

开发者还可以通过 HKCorrelation 创建自定义相关性——一组相关的测量。例如,一条餐食记录可以将卡路里、蛋白质、脂肪和碳水化合物作为一个对象。对于连续测量(如衠糖水平),使用 HKSeriesSample。

使用 HealthKit 从定义 HKHealthStore 开始——这是一个在导入框架时自动创建的单例。通过 store,应用程序检查平台是否在设备上可用,因为 iPad 和 iPod touch 可能不支持。值得注意的是,HealthKit 不可用于 Mac Catalyst——对于 macOS 需要单独的实现。

swift
import HealthKit

let healthStore = HKHealthStore()

let stepType = HKQuantityType
    .quantityType(forIdentifier: .stepCount)

let heartRateType = HKQuantityType
    .quantityType(forIdentifier: .heartRate)

let typesToRead: Set = [stepType, heartRateType]

HealthKit 如何工作

HealthKit 作为数据源和应用程序之间的中介,使用异步发布-订阅模型。源应用程序通过 HKHealthStore 写入数据,订阅应用程序通过在后台运行的 HKObserverQuery 接收新记录通知。

该框架支持通过 iCloud 进行后台同步:如果用户已登录,HealthKit 会自动将数据实时分发到所有 Apple 设备。在没有网络时,变更会本地缓存,并在连接恢复后同步,不会丢失数据。

据 Apple 数据, iPhone 和 Apple Watch 之间的同步延迟对于活动数据不超过 30 秒。对于其他类型——睡眠、营养、实验室参数——同步按计划进行,间隔最多 15 分钟,以节省电池。

HKHealthStore 和数据操作

HKHealthStore — 中心单例,所有操作都通过它执行:通过 saveObject 保存、execute 读取、deleteObject 删除。每个操作都是异步的,并通过闭包返回结果,这需要正确的错误处理。

查询分为几种类型:HKSampleQuery按条件选择记录,HKStatisticsQuery 用于汇总数据——总和、平均值、最小值、最大值——以及 HKObserverQuery 用于实时跟踪变更。对于定期后台更新,使用 HKHeartbeatSeriesQuery。

swift
let type = HKQuantityType
    .quantityType(forIdentifier: .stepCount)
let now = Date()
let start = Calendar.current
    .date(
        byAdding: .day,
        value: -7,
        to: now
    )
let predicate = HKQuery
    .predicateForSamples(
        withStart: start,
        end: now,
        options: .strictStartDate
    )
let query = HKSampleQuery(
    sampleType: type,
    predicate: predicate,
    limit: 100
) { _, samples, _ in
    for sample in samples as [HKQuantitySample] {
        print(sample.quantity)
    }
}
healthStore.execute(query)

在应用程序中集成 HealthKit

集成 HealthKit 从在 Xcode 中启用 HealthKit 能力并向项目添加 entitlement 开始。然后,应用程序通过 requestAuthorization 调用请求访问特定数据类型的权限。重要的是:HealthKit 不可用于模拟器,并且需要带有 iOS 的物理设备。

集成过程包括三个阶段:确定数据类型、请求授权以及执行读取和写入操作。每个阶段都是异步的,并且必须处理错误——用户可以在带有开关的系统对话框中拒绝访问任何数据类型的请求。

据 Apple 研究,集成了HealthKit的应用程序显示用户参与度提高了 40%。成功的关键因素是在授权请求描述中解释为什么应用程序需要特定的健康数据。

请求授权

授权请求在首次启动时执行一次。应用程序指定两组类型——用于读取和写入。用户看到一个带有每种数据类型开关的系统对话框,并可以选择性地授予访问权限,拒绝不必要的类别。

swift
let typesToWrite: Set = [
    HKQuantityType
        .quantityType(
            forIdentifier: .dietaryEnergyConsumed
        )
]
let typesToRead: Set = [
    HKQuantityType
        .quantityType(
            forIdentifier: .stepCount
        )
]

healthStore.requestAuthorization(
    toShare: typesToWrite,
    read: typesToRead
) { success, error in
    if success {
        print("授权已获得")
    }
}

HealthKit 安全性

HealthKit实现了多层安全模型,包括硬件加密、应用程序沙箱和粒度权限。所有健康数据都以加密形式存储在设备上,没有用户的单独同意(仅请求一次)不会传输到 iCloud。

关键特征——Intent 机制:应用程序没有对数据的持续后台访问权限。每个读取或写入请求都由操作系统检查,用户可以随时通过“设置—隐私—健康”撤销权限,无需重新安装应用程序。

Apple 在App Store 审查指南中严格规范 HealthKit 的使用。应用程序不得在没有明确同意的情况下将 HealthKit 数据传输给第三方,不得用于广告或精准营销,不得存储超过声明功能所需的时间。

限制和约束

HealthKit 有一系列限制:设备上的最大数据库容量为 1 GB,单次查询的记录数上限为 1000条,相同数据类型之间的最小间隔为 1 秒。该框架还限制后台更新——每天最多 60 次 HKObserverQuery 触发。

这些限制由性能补偿:读取 1000 条记录平均需要 50–100 毫秒,写入一条记录不超过 10 毫秒。对于大量数据,建议使用带预聚合的 HKStatisticsCollectionQuery,而不是选择单条记录。HealthKit 异步处理查询——应用程序在等待 HKHealthStore 的数据时不会被阻塞。

常见问题

哪些设备支持 HealthKit?

HealthKit 支持所有运行iOS 8及更新版本的设备,包括 iPhone、iPad 和 iPod touch。Apple Watch 通过配对的 iPhone 自动传输数据。第三方设备——健身手环、称、血压计——可以通过 HealthKit API 写入数据,前提是它们有相应的应用程序。

可以从 HealthKit 导出数据吗?

可以,“健康”应用允许通过“导出健康数据”功能将所有数据以 XML 格式导出。开发者可以通过 HKSampleQuery 编程读取任何允许的类型,并导出到自己的格式。健康数据不能在没有用户明确同意的情况下传输到第三方服务器。

HealthKit 如何处理数据删除?

用户可以通过“健康”应用或写入数据的源应用程序删除数据。删除后数据无法恢复——HealthKit 没有回收站。删除操作不可逆转,因此建议应用程序在执行 deleteObject 之前请求确认。

HealthKit 与 ResearchKit 有什么区别?

HealthKit用于存储和交换用户的健康数据,而 ResearchKit 是用于进行医学研究的框架。ResearchKit 将 HealthKit 作为数据源之一,但还增加了知情同意、问卷调查和主动任务模块用于收集研究数据。

HealthKit 在 App Store 中是否需要特殊许可?

是的,使用 HealthKit 的应用程序必须遵守App Store 审查指南第 5.1.1 节——Medical and Health Data。需要明确描述应用程序中数据的用途、隐私政策、禁止将数据用于广告,以及在网络传输时加密。

总结

  • HealthKit — Apple 在 iOS 中管理健康数据的标准框架,于 2014 年推出。
  • HKHealthStore — 所有操作的中心接口:保存、读取和删除健康数据。
  • 该平台支持超过 100 种数据类型——从身体活动到实验室分析。
  • 数据隐私由硬件 AES-256 加密和粒度权限保护。
  • Apple 设备之间的同步通过 iCloud 进行,延迟不超过 30 秒。
  • 集成需要在 Xcode 中配置 entitlement,并必须向用户请求授权。
  • HealthKit 的安全性通过系统隐私设置和 App Store 政策进行管控。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读