Framework HealthKit to centralny komponent ekosystemu zdrowia Apple, który agreguje dane z iPhone, Apple Watch i urządzeń firm trzecich w chronionym lokalnym magazynie. Według Apple Developer Documentation, 2025, platforma obsługuje ponad 100 typów danych — od aktywności fizycznej i snu po analizy laboratoryjne i wskaźniki układu sercowo-naczyniowego. Jednolity magazyn informacji medycznych zapewnia bezszwową synchronizację między aplikacjami przy szczegółowej kontroli dostępu dla każdego typu danych.
Najważniejsze
HealthKit to framework Apple zaprezentowany w 2014 roku wraz z iOS 8, przeznaczony do scentralizowanego zarządzania danymi o zdrowiu i aktywności fizycznej użytkownika. Platforma pełni rolę jednolitego repozytorium, do którego aplikacje i urządzenia mogą zapisywać i z którego mogą odczytywać informacje medyczne.
W przeciwieństwie do rozwiązań firm trzecich, HealthKit jest wbudowany bezpośrednio w system operacyjny iOS, co zapewnia wysoką wydajność i bezpieczeństwo na poziomie sprzętowym. Aplikacje nie mają bezpośredniego dostępu do siebie nawzajem — wszystkie operacje przechodzą przez centralny HKHealthStore.
Według Apple WWDC 2024, ponad 87% użytkowników iPhone w USA przynajmniej raz użyło wbudowanej aplikacji Zdrowie, która opiera się właśnie na HealthKit. Ekosystem obejmuje tysiące aplikacji firm trzecich — od trackerów fitness po usługi telemedyczne.
Architektura HealthKit jest zbudowana na zasadzie wielopoziomowego magazynu z izolowanymi kontenerami dla każdego źródła danych. Na dolnym poziomie znajduje się baza danych SQLite, szyfrowana za pomocą sprzętowego AES-256. Na górnym poziomie znajduje się HKHealthStore — jednolity interfejs komunikacji.
Każdy rekord zawiera metadane: źródło HKSource, urządzenie HKDevice, datę, czas i flagę synchronizacji z iCloud. System automatycznie deduplikuje powtarzające się wpisy z jednego źródła, zapobiegając zniekształceniu statystyk.
Dane są grupowane według typów — HKQuantityType dla wskaźników liczbowych (tętno, kroki, kalorie) i HKCategoryType dla zdarzeń kategorycznych (sen, objawy, cykl menstruacyjny). Taka struktura umożliwia elastyczne zapytania o dowolne kombinacje parametrów przez HKSampleQuery lub HKStatisticsQuery.
HealthKit obsługuje ponad 100 znormalizowanych typów danych, podzielonych na kategorie: aktywność fizyczna, odżywianie, sen, układ sercowo-naczyniowy, zdrowie reprodukcyjne, parametry laboratoryjne i wskaźniki życiowe. Każdy typ ma jednostkę miary HKUnit i poziom dostępu.
Deweloper może również tworzyć niestandardowe korelacje przez HKCorrelation — grupę powiązanych pomiarów. Na przykład wpis o posiłku może zawierać kaloryczność, białka, tłuszcze i węglowodany jako jeden obiekt. Do pomiarów sekwencyjnych, takich jak poziom glukozy, używa się HKSeriesSample.
Praca z HealthKit rozpoczyna się od określenia HKHealthStore — singletona, który jest automatycznie tworzony przy imporcie frameworka. Za pośrednictwem store aplikacja sprawdza, czy platforma jest dostępna na urządzeniu, ponieważ na iPad i iPod touch wsparcie może być nieobecne. Należy również pamiętać, że HealthKit jest niedostępny na Mac Catalyst — dla macOS wymagana jest osobna implementacja.
import HealthKit
let healthStore = HKHealthStore()
let stepType = HKQuantityType
.quantityType(forIdentifier: .stepCount)
let heartRateType = HKQuantityType
.quantityType(forIdentifier: .heartRate)
let typesToRead: Set = [stepType, heartRateType]
HealthKit działa jako pośrednik między źródłami danych a aplikacjami, używając asynchronicznego modelu publikacji-subskrypcji. Aplikacja-źródło zapisuje dane przez HKHealthStore, a aplikacje-subskrybenci otrzymują powiadomienia o nowych wpisach przez HKObserverQuery, uruchamiany w tle.
Framework obsługuje synchronizację w tle przez iCloud: jeśli użytkownik jest zalogowany, HealthKit automatycznie rozpowszechnia dane na wszystkie urządzenia Apple w czasie rzeczywistym. W przypadku braku sieci zmiany są buforowane lokalnie i synchronizowane po przywróceniu połączenia bez utraty danych.
Według Apple, opóźnienie synchronizacji między iPhone a Apple Watch wynosi mniej niż 30 sekund dla danych o aktywności. Dla innych typów — sen, odżywianie, parametry laboratoryjne — synchronizacja odbywa się według harmonogramu z interwałem do 15 minut, aby oszczędzać baterię.
HKHealthStore — centralny singleton, przez który wykonywane są wszystkie operacje: zapis przez saveObject, odczyt przez execute i usunięcie przez deleteObject. Każda operacja jest asynchroniczna i zwraca wynik przez zamknięcie, co wymaga prawidłowej obsługi błędów.
Zapytania dzielą się na kilka typów: HKSampleQuery do pobierania rekordów według kryteriów, HKStatisticsQuery do danych zagregowanych — suma, średnia, minimum, maksimum — oraz HKObserverQuery do śledzenia zmian w czasie rzeczywistym. Do okresowych aktualizacji w tle używa się 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)
Integracja HealthKit rozpoczyna się od włączenia capability HealthKit w Xcode i dodania entitlement do projektu. Następnie aplikacja prosi o pozwolenia dostępu do konkretnych typów danych przez wywołanie requestAuthorization. Ważne: HealthKit jest niedostępny na symulatorze i wymaga fizycznego urządzenia z iOS.
Proces integracji obejmuje trzy etapy: określenie typów danych, żądanie autoryzacji i wykonywanie operacji odczytu i zapisu. Każdy etap jest asynchroniczny i powinien obsługiwać błędy — użytkownik może odrzucić żądanie dostępu do dowolnego typu danych w systemowym oknie dialogowym z przełącznikami.
Według badań Apple, aplikacje z integracją HealthKit wykazują o 40% wyższy poziom zaangażowania użytkowników. Kluczowym czynnikiem sukcesu jest wyjaśnienie, dlaczego aplikacja potrzebuje konkretnych danych o zdrowiu, w opisie żądania autoryzacji.
Żądanie autoryzacji jest wykonywane raz przy pierwszym uruchomieniu. Aplikacja określa dwa zestawy typów — do odczytu i do zapisu. Użytkownik widzi systemowe okno dialogowe z przełącznikami dla każdego typu danych i może udzielić dostępu wybiórczo, blokując niepotrzebne kategorie.
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("Autoryzacja uzyskana")
}
}
HealthKit realizuje wielopoziomowy model bezpieczeństwa, obejmujący sprzętowe szyfrowanie, piaskownicę aplikacji i szczegółowe uprawnienia. Wszystkie dane zdrowotne są przechowywane w zaszyfrowanej formie na urządzeniu i nie są przesyłane do iCloud bez osobnej zgody użytkownika, która jest wymagana jednorazowo.
Kluczowa cecha — mechanizm Intent: aplikacja nie ma stałego dostępu w tle do danych. Każde żądanie odczytu lub zapisu jest sprawdzane przez system operacyjny, a użytkownik może w dowolnym momencie cofnąć pozwolenie przez Ustawienia — Prywatność — Zdrowie bez konieczności ponownej instalacji aplikacji.
Apple ściśle reguluje używanie HealthKit w App Store Review Guidelines. Aplikacja nie może przekazywać danych HealthKit stronom trzecim bez wyraźnej zgody, nie może używać ich do reklamy ani targetowania i nie może przechowywać ich dłużej, niż jest to konieczne do zadeklarowanej funkcjonalności.
HealthKit ma szereg ograniczeń: maksymalny rozmiar bazy danych na urządzeniu — 1 GB, limit liczby rekordów w jednym zapytaniu — 1000, minimalny odstęp między identycznymi typami danych — 1 sekunda. Framework ogranicza również aktualizacje w tle — nie więcej niż 60 uruchomień HKObserverQuery na dobę.
Te ograniczenia są kompensowane wydajnością: odczyt 1000 rekordów odbywa się średnio w 50–100 milisekund, a zapis jednego rekordu zajmuje mniej niż 10 milisekund. Dla dużych ilości danych zaleca się używanie HKStatisticsCollectionQuery z wstępną agregacją, a nie pobieranie pojedynczych rekordów. HealthKit przetwarza zapytania asynchronicznie — aplikacja nie blokuje się podczas oczekiwania na dane z HKHealthStore.
Często zadawane pytania
HealthKit jest obsługiwany na wszystkich urządzeniach z iOS 8 i nowszymi, w tym iPhone, iPad i iPod touch. Apple Watch automatycznie przesyła dane przez sparowany iPhone. Urządzenia firm trzecich — opaski fitness, wagi, monitory ciśnienia — mogą zapisywać dane przez HealthKit API za pośrednictwem odpowiedniej aplikacji.
Tak, aplikacja Zdrowie umożliwia eksport wszystkich danych w formacie XML przez funkcję „Eksport danych zdrowotnych”. Deweloperzy mogą programowo odczytywać dowolne dozwolone typy przez HKSampleQuery i eksportować do swojego formatu. Dane o zdrowiu nie mogą być przesyłane na serwery firm trzecich bez wyraźnej zgody użytkownika.
Użytkownik może usunąć dane przez aplikację Zdrowie lub przez aplikację-źródło, która je zapisała. Po usunięciu dane nie są przywracane — HealthKit nie ma kosza. Operacja usunięcia jest nieodwracalna, dlatego aplikacjom zaleca się proszenie o potwierdzenie przed wykonaniem deleteObject.
HealthKit jest przeznaczony do przechowywania i wymiany danych o zdrowiu użytkownika, podczas gdy ResearchKit to framework do prowadzenia badań medycznych. ResearchKit używa HealthKit jako jednego ze źródeł danych, ale dodaje moduły świadomej zgody, kwestionariuszy i aktywnych zadań do zbierania danych badawczych.
Tak, aplikacje używające HealthKit muszą spełniać App Store Review Guidelines, sekcja 5.1.1 — Medical and Health Data. Wymagany jest jasny opis użycia danych w aplikacji, polityka prywatności, zakaz reklamowego wykorzystania danych i szyfrowanie podczas przesyłania przez sieć.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również