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)?