Фреймворк HealthKit — центральный компонент экосистемы здоровья Apple, который агрегирует данные с iPhone, Apple Watch и сторонних устройств в защищённом локальном хранилище. По данным Apple Developer Documentation, 2025, платформа поддерживает более 100 типов данных — от физической активности и сна до лабораторных анализов и показателей сердечно-сосудистой системы. Единое хранилище медицинской информации обеспечивает бесшовную синхронизацию между приложениями при гранулярном контроле доступа для каждого типа данных.
Главное
HealthKit — это фреймворк от Apple, представленный в 2014 году вместе с iOS 8, предназначенный для централизованного управления данными о здоровье и физической активности пользователя. Платформа выступает единым репозиторием, куда приложения и устройства могут записывать и откуда могут читать медицинскую информацию.
В отличие от сторонних решений, HealthKit встроен непосредственно в операционную систему iOS, что обеспечивает высокую производительность и безопасность на аппаратном уровне. Приложения не имеют прямого доступа друг к другу — все операции проходят через центральный HKHealthStore.
По данным Apple WWDC 2024, более 87% пользователей iPhone в США хотя бы раз использовали встроенное приложение Здоровье, которое базируется именно на HealthKit. Экосистема включает тысячи сторонних приложений — от фитнес-трекеров до телемедицинских сервисов.
Архитектура HealthKit построена по принципу многоуровневого хранилища с изолированными контейнерами для каждого источника данных. На нижнем уровне находится SQLite-база данных, зашифрованная с использованием аппаратного AES-256. На верхнем уровне расположен HKHealthStore — единый интерфейс взаимодействия.
Каждая запись содержит метаданные: источник HKSource, устройство HKDevice, дату, время и флаг синхронизации из iCloud. Система автоматически дедуплицирует дублирующиеся записи от одного источника, предотвращая искажение статистики.
Данные группируются по типам — HKQuantityType для числовых показателей (пульс, шаги, калории) и HKCategoryType для категориальных событий (сон, симптомы, менструальный цикл). Такая структура позволяет гибко запрашивать любые комбинации параметров через HKSampleQuery или HKStatisticsQuery.
HealthKit поддерживает более 100 стандартизированных типов данных, разбитых на категории: физическая активность, питание, сон, сердечно-сосудистая система, репродуктивное здоровье, лабораторные показатели и жизненные показатели. Каждый тип имеет единицу измерения HKUnit и уровень доступа.
Разработчик может также создавать кастомные корреляции через HKCorrelation — группу связанных измерений. Например, запись о приёме пищи может включать калорийность, белки, жиры и углеводы как единый объект. Для последовательных измерений, таких как уровень глюкозы, используется HKSeriesSample.
Работа с HealthKit начинается с определения HKHealthStore — синглтона, который автоматически создаётся при импорте фреймворка. Через store приложение проверяет, доступна ли платформа на устройстве, так как на iPad и iPod touch поддержка может отсутствовать. Также важно учитывать, что HealthKit недоступен на Mac Catalyst — для macOS требуется отдельная реализация.
import HealthKit
let healthStore = HKHealthStore()
let stepType = HKQuantityType
.quantityType(forIdentifier: .stepCount)
let heartRateType = HKQuantityType
.quantityType(forIdentifier: .heartRate)
let typesToRead: Set = [stepType, heartRateType]
HealthKit функционирует как посредник между источниками данных и приложениями, используя асинхронную модель публикации-подписки. Приложение-источник записывает данные через HKHealthStore, а приложения-подписчики получают уведомления о новых записях через HKObserverQuery, запускаемый в фоновом режиме.
Фреймворк поддерживает фоновую синхронизацию через iCloud: если пользователь авторизован, HealthKit автоматически распространяет данные на все устройства Apple в реальном времени. При отсутствии сети изменения буферизируются локально и синхронизируются при восстановлении соединения без потери данных.
По данным Apple, задержка синхронизации между iPhone и Apple Watch составляет менее 30 секунд для данных об активности. Для других типов — сон, питание, лабораторные показатели — синхронизация происходит по расписанию с интервалом до 15 минут, чтобы экономить заряд батареи.
HKHealthStore — центральный синглтон, через который выполняются все операции: сохранение через saveObject, чтение через execute и удаление через deleteObject. Каждая операция асинхронна и возвращает результат через замыкание, что требует правильной обработки ошибок.
Запросы делятся на несколько типов: HKSampleQuery для выборки записей по критериям, HKStatisticsQuery для агрегированных данных — сумма, среднее, минимум, максимум — и HKObserverQuery для отслеживания изменений в реальном времени. Для периодических фоновых обновлений используется HKHeartbeatSeriesQuery.
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 и добавления entitlement в проект. После этого приложение запрашивает разрешения на доступ к конкретным типам данных через вызов requestAuthorization. Важно: HealthKit недоступен на симуляторе и требует физического устройства с iOS.
Процесс интеграции включает три этапа: определение типов данных, запрос авторизации и выполнение операций чтения и записи. Каждый этап асинхронен и должен обрабатывать ошибки — пользователь может отклонить запрос на доступ к любому типу данных в системном диалоге с переключателями.
По данным исследований Apple, приложения с интеграцией HealthKit показывают на 40% более высокий уровень вовлечённости пользователей. Ключевой фактор успеха — объяснение, зачем приложению нужны конкретные данные о здоровье, в описании запроса авторизации.
Запрос авторизации выполняется один раз при первом запуске. Приложение указывает два набора типов — для чтения и для записи. Пользователь видит системный диалог с переключателями для каждого типа данных и может предоставить доступ выборочно, запретив ненужные категории.
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 реализует многоуровневую модель безопасности, включающую аппаратное шифрование, песочницу приложений и гранулярные разрешения. Все данные здоровья хранятся в зашифрованном виде на устройстве и не передаются в iCloud без отдельного согласия пользователя, которое запрашивается однократно.
Ключевая особенность — механизм Intent: приложение не имеет постоянного фонового доступа к данным. Каждый запрос на чтение или запись проверяется операционной системой, а пользователь может в любой момент отозвать разрешение через Настройки — Приватность — Здоровье без необходимости переустанавливать приложение.
Apple строго регулирует использование HealthKit в App Store Review Guidelines. Приложение не может передавать данные HealthKit третьим лицам без явного согласия, не может использовать их для рекламы или таргетинга и не может хранить их дольше, чем необходимо для заявленной функциональности.
HealthKit имеет ряд ограничений: максимальный размер базы данных на устройстве — 1 ГБ, лимит на количество записей в одном запросе — 1000, минимальный интервал между одинаковыми типами данных — 1 секунда. Фреймворк также ограничивает фоновые обновления — не более 60 срабатываний HKObserverQuery в сутки.
Эти ограничения компенсируются производительностью: чтение 1000 записей выполняется в среднем за 50–100 миллисекунд, а запись одной записи занимает менее 10 миллисекунд. Для больших объёмов данных рекомендуется использовать HKStatisticsCollectionQuery с предварительной агрегацией, а не выборку отдельных записей. HealthKit обрабатывает запросы асинхронно — приложение не блокируется во время ожидания данных от HKHealthStore.
Часто задаваемые вопросы
HealthKit поддерживается на всех устройствах с iOS 8 и новее, включая iPhone, iPad и iPod touch. Apple Watch автоматически передаёт данные через сопряжённый iPhone. Сторонние устройства — фитнес-браслеты, весы, мониторы давления — могут записывать данные через HealthKit API при наличии соответствующего приложения.
Да, приложение Здоровье позволяет экспортировать все данные в XML-формате через функцию "Экспорт данных здоровья". Разработчики могут программно читать любые разрешённые типы через HKSampleQuery и экспортировать в свой формат. При этом данные о здоровье не могут быть переданы на сторонние серверы без явного согласия пользователя.
Пользователь может удалить данные через приложение Здоровье или через приложение-источник, которое их записало. После удаления данные не восстанавливаются — HealthKit не имеет корзины. Операция удаления необратима, поэтому приложениям рекомендуется запрашивать подтверждение перед выполнением deleteObject.
HealthKit предназначен для хранения и обмена данными о здоровье пользователя, тогда как ResearchKit — фреймворк для проведения медицинских исследований. ResearchKit использует HealthKit как один из источников данных, но добавляет модули информированного согласия, опросников и активных задач для сбора исследовательских данных.
Да, приложения, использующие HealthKit, должны соответствовать App Store Review Guidelines, раздел 5.1.1 — Medical and Health Data. Требуется явное описание использования данных в приложении, политика конфиденциальности, запрет на рекламное использование данных и шифрование при передаче по сети.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также