HealthKit + React Native: Apple Rejected Me Twice Before I Got This Right
Apple's HealthKit review rules aren't documented. I got rejected twice. Here's the permission UX and entitlements that passed.
Apple's HealthKit review rules aren't documented. I got rejected twice. Here's the permission UX and entitlements that passed.
health
Apple rejected my HealthKit app twice. The review rules aren't in the docs. Here's the permission UX and entitlements that finally passed.
Read access to steps, heart rate, sleep, workouts, and a long list of other signals on iOS. Write access too, but writes bring extra review scrutiny.
For most fitness apps the read side is enough. You are not trying to replace Apple Health. You are adding a context layer around it.
react-native-health is the one I ship with. Expo prebuild step, no Expo Go. Shippen ships the config plugin pre-wired.
NSHealthShareUsageDescription — required if you read any HealthKit data. Be specific: "to count your daily steps and show your weekly progress." Vague strings get rejected.NSHealthUpdateUsageDescription — required if you write. Expect stricter review if you write.Reviewers paste the exact strings into their notes. Copy-paste one from a tutorial and your app gets flagged as boilerplate.
For an app I put on the App Store in 2026, I only needed three HealthKit reads:
That was the whole data layer. Everything else was computed from those three.
HKStatisticsCollectionQuery.This integration is pre-configured in Shippen. One-time purchase.