Фреймворк 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також