◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/Dev Tools
⬡ Dev Tools/2026-06-14Advanced

Reading Steps and Sleep into Your Rork Max Native App — HealthKit for Calm, Number-Light Wellness Apps

A walkthrough of adding HealthKit to the native Swift app Rork Max generates: reading steps, sleep, and heart rate, writing mindful sessions, and handling background delivery — including the App Store review wording and the production-only 'permission granted but zero data' trap.

Rork Max235HealthKit5Swift48WellnessPermissions4App Store Review9

✦ Premium Article

When you run calm, wellness-style apps as an indie developer for long enough, requests start arriving like this: "Could you quietly show how far I walked today, next to the wallpaper on my home screen?" The goal is not to push numbers at people but to sit beside them gently. Once I framed it that way, borrowing the health data the iPhone already records felt far more honest than counting steps myself.

Because Rork Max generates native Swift apps in the browser, Apple-native frameworks like HealthKit — which take real effort to reach through React Native — are right there. This article walks through layering HealthKit onto the generated code, from permission design all the way to diagnosing why data fails to appear in production.

When Rork Max beats React Native for this job

HealthKit is designed to be touched directly from Swift or Objective-C. Expo (React Native) can reach it through a bridge such as react-native-health, but every new data type leaves you at the mercy of what the bridge has implemented. On an Expo test app I once tried to read heart rate variability and hit a wall: the bridge did not expose the relevant HKQuantityType, and that was the end of the road.

Rork Max emits a plain native app, so import HealthKit gives you Apple's types as-is — steps, sleep, heart rate, workouts — with no waiting on a bridge maintainer. The flip side is that native means you must follow the permission and background-delivery rules exactly, or the app fails quietly both in review and in production. Let's get those right.

Step 1: Declare capability and Info.plist at minimum scope

Start by declaring intent. Enable the HealthKit capability in your Rork Max project settings, then describe the purpose in Info.plist. Requesting many types greedily here invites the App Store reviewer to ask "why does this app need that?" — a common rejection trigger.

<key>NSHealthShareUsageDescription</key>
<string>Reads your step and sleep records so you can look back on how far you walked alongside your home-screen theme.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>Saves the relaxation time you log in the app as a mindfulness entry in Health.</string>

The trick is to state what you read and why, specifically. Vague phrasing like "Uses health data" is easy to reject; on my first submission, a reviewer bounced the build because the NSHealthShareUsageDescription string was too ambiguous. This text is shown verbatim in the user's permission dialog, so writing it honestly also builds trust.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦Concrete Info.plist usage strings and Swift code to request the smallest possible HealthKit scope and survive App Store review
✦A working HKObserverQuery + Background Delivery setup that keeps ingesting steps while the app is closed, including the unregister trap
✦A field-tested checklist for the production-only 'I granted access but data is zero' symptom, with the calls I made running wellness apps as an indie developer
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

⬡ Dev Tools2026-04-05
Rork Max × WidgetKit & Live Activities in Practice — From Home Screen to Dynamic Island
A complete guide to implementing iOS Widgets, Lock Screen widgets, and Dynamic Island Live Activities with Rork Max. Covers WidgetKit fundamentals, Timeline update strategies, App Intents integration, and monetization.
⬡ Dev Tools2026-07-18
The Generated Screen That Quietly Jams at AX5 and in German — Putting Layout Resilience Checks on Rork Max SwiftUI
A record of running every Rork Max generated SwiftUI screen through pseudolocalization and the largest text size to find exactly where it jams. Covers when to reach for ViewThatFits, ScaledMetric and layoutPriority, plus the snapshot checks that catch regressions every time you regenerate.
⬡ Dev Tools2026-05-23
Auditing Privacy Manifests for Rork-Generated Expo Apps — A One-Day Pre-Submission Workflow for Indie Developers
A pre-submission workflow for indie developers shipping Rork-generated Expo apps: enumerate every dependency, tell ITMS-91053 apart from ITMS-91061, and catch the Pods that npm names never show you — hermes included.