HealthKit Code Review
Quick Reference
| Issue Type | Reference |
|---|---|
| HKHealthStore, permissions, status checks, privacy | references/authorization.md |
| HKQuery types, predicates, anchored queries, statistics | references/queries.md |
| Background delivery, observer queries, completion handlers | references/background.md |
| HKQuantityType, HKCategoryType, workouts, units | references/data-types.md |
Review Checklist
- •
HKHealthStore.isHealthDataAvailable()called before any HealthKit operations - • Authorization requested only for needed data types (minimal permissions)
- •
requestAuthorizationcompletion handler not misinterpreted as permission granted - • No attempt to determine read permission status (privacy by design)
- • Query results dispatched to main thread for UI updates
- •
HKObjectQueryNoLimitused only with bounded predicates - •
HKStatisticsQueryused for aggregations instead of manual summing - • Observer query
completionHandler()always called (usedefer) - • Background delivery registered in
application(_:didFinishLaunchingWithOptions:) - • Background delivery entitlement added (iOS 15+)
- • Correct units used for quantity types (e.g.,
count/minfor heart rate) - • Long-running queries stored as properties and stopped in
deinit
When to Load References
- •Reviewing authorization/permissions flow -> authorization.md
- •Reviewing HKSampleQuery, HKAnchoredObjectQuery, or predicates -> queries.md
- •Reviewing HKObserverQuery or
enableBackgroundDelivery-> background.md - •Reviewing HKQuantityType, HKCategoryType, or HKWorkout -> data-types.md
Review Questions
- •Is
isHealthDataAvailable()checked before creating HKHealthStore? - •Does the code gracefully handle denied permissions (empty results)?
- •Are observer query completion handlers called in all code paths?
- •Is work in background handlers minimal (~15 second limit)?
- •Are HKQueryAnchors persisted per sample type (not shared)?