What You'll Learn
Fitness trackers consistently rank among the top-performing categories on the App Store. Step counters, heart rate monitors, workout recorders, sleep analysis — building these features natively typically requires deep expertise across three Apple frameworks: HealthKit, WatchKit, and WidgetKit.
With Rork Max, you can integrate all three frameworks using natural language prompts. This tutorial walks you through designing and implementing an iPhone app, an Apple Watch companion, and a Home Screen widget as a single project — all the way to App Store submission.
Prerequisites: You should be comfortable with Rork Max basics and have built at least one app with it before. No prior experience with HealthKit or Apple Watch development is needed.
What we're building:
- iPhone: Dashboard screen with steps, calories, heart rate, and sleep score
- Apple Watch: Real-time workout recording with complication
- Widget: Today's activity ring on the Home Screen
Setup and Requirements
What You Need
- Rork Max account (Max plan at $200/month recommended)
- Apple Developer Program ($99/year — required for App Store publishing)
- iPhone + Apple Watch physical devices (HealthKit has limitations in the simulator)
Getting Started with Rork Max
Rork Max uses a cloud Mac fleet for native compilation, so you don't need Xcode installed locally. Head to rork.com/max and create a new project.
HealthKit Entitlements
Apps that use HealthKit require explicit entitlement configuration in the Apple Developer Portal. When you tell Rork Max to include health features, it automatically configures Info.plist and Entitlements for you.
Architecture and Design
System Overview
Our fitness tracker consists of three layers that communicate through shared data stores.
┌──────────────────────────────────────────────┐
│ WidgetKit │
│ Home Screen Widget (Activity Ring) │
├──────────────────────────────────────────────┤
│ iPhone App (SwiftUI) │
│ Dashboard / History / Settings / HealthKit │
├──────────────────────────────────────────────┤
│ Apple Watch App (WatchKit) │
│ Workout Recording / Complication │
└──────────────────────────────────────────────┘
↕ App Group (Shared Data) ↕
HealthKit Store (Apple-managed)
Data Flow
When a workout is recorded on Apple Watch, data is saved to the HealthKit Store. The iPhone app reads the latest data from HealthKit and displays it on the dashboard. The widget reads aggregated data shared via App Group.
Prompt Strategy
When building complex multi-target apps with Rork Max, the best practice is to add features incrementally:
- Start with the iPhone app's base UI
- Add HealthKit data reading
- Add the Apple Watch target
- Add the widget target
Trying to do everything in a single prompt often leads to build errors as the AI struggles with the complexity.
Step-by-Step Implementation
Step 1: Build the iPhone App Base UI
Start with a prompt that defines the dashboard structure.
Create a fitness tracker app.
[iPhone App Screens]
1. Dashboard (Tab 1)
- Today's steps (large number + circular progress ring)
- Calories burned (ring display)
- Heart rate (latest value + small line chart)
- Sleep score (bar chart + rating text)
2. History (Tab 2)
- Weekly/monthly step trend graph
- Daily detail data list
3. Settings (Tab 3)
- Change step goal
- Toggle notifications
- HealthKit connection status
[Design Requirements]
- Dark mode fitness UI
- Circular progress similar to Apple's Activity Rings
- SF Symbols for icons
- SwiftUI Charts framework for graphsRork Max will generate a SwiftUI-based three-tab app. Preview it in the streaming simulator to verify the layout.
Step 2: Integrate HealthKit
Add HealthKit data reading with the next prompt.
Integrate HealthKit into the app.
[Data to Read]
- Steps (HKQuantityType.stepCount) — today's total
- Calories (HKQuantityType.activeEnergyBurned) — today's total
- Heart rate (HKQuantityType.heartRate) — latest + last 24h samples
- Sleep (HKCategoryType.sleepAnalysis) — last night's duration
[Requirements]
- Create a HealthKitManager class to centralize data fetching
- Show HealthKit authorization request on first launch
- Use background delivery for step count updates
- Show placeholders when data is unavailable
- Set appropriate NSHealthShareUsageDescriptionThe key component Rork Max generates is the HealthKitManager. Here's the expected structure:
// HealthKitManager.swift — Core data fetching class
import HealthKit
class HealthKitManager: ObservableObject {
let healthStore = HKHealthStore()
@Published var todaySteps: Int = 0
@Published var todayCalories: Double = 0
@Published var latestHeartRate: Double = 0
@Published var sleepHours: Double = 0
// Request HealthKit authorization
func requestAuthorization() async throws {
let readTypes: Set<HKObjectType> = [
HKQuantityType(.stepCount),
HKQuantityType(.activeEnergyBurned),
HKQuantityType(.heartRate),
HKCategoryType(.sleepAnalysis)
]
try await healthStore.requestAuthorization(
toShare: [], read: readTypes
)
}
// Fetch today's step count
func fetchTodaySteps() async {
let stepsType = HKQuantityType(.stepCount)
let today = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(
withStart: today, end: Date()
)
let query = HKStatisticsQuery(
quantityType: stepsType,
quantitySamplePredicate: predicate,
options: .cumulativeSum
) { _, result, _ in
DispatchQueue.main.async {
self.todaySteps = Int(
result?.sumQuantity()?
.doubleValue(for: .count()) ?? 0
)
}
}
healthStore.execute(query)
}
}
// Expected output:
// todaySteps = 8432 (actual step count from HealthKit)
// todayCalories = 342.5 (active energy burned)Step 3: Add the Apple Watch Companion App
Add the watchOS target with this prompt:
Add an Apple Watch companion app.
[Watch App Features]
1. Workout recording screen
- Workout type selection (Running/Walking/Cycling)
- Start/Pause/Stop buttons
- Real-time heart rate, calories, and elapsed time
- Use HKWorkoutSession for accurate workout data
2. Today's activity screen
- Steps + calories circular progress
- Same goal values as the iPhone app
3. Complication
- CircularGauge style showing current step count
[Technical Requirements]
- WatchConnectivity for bidirectional iPhone sync
- Extended Runtime Session for background workouts
- Digital Crown to scroll through workout typesThe core of the Watch app is the WorkoutManager that handles real-time workout recording:
// WorkoutManager.swift — Workout session management
import HealthKit
import WatchKit
class WorkoutManager: NSObject, ObservableObject {
let healthStore = HKHealthStore()
var workoutSession: HKWorkoutSession?
var workoutBuilder: HKLiveWorkoutBuilder?
@Published var heartRate: Double = 0
@Published var calories: Double = 0
@Published var elapsedTime: TimeInterval = 0
@Published var isActive = false
func startWorkout(type: HKWorkoutActivityType) async throws {
let config = HKWorkoutConfiguration()
config.activityType = type
config.locationType = .outdoor
workoutSession = try HKWorkoutSession(
healthStore: healthStore,
configuration: config
)
workoutBuilder = workoutSession?.associatedWorkoutBuilder()
workoutBuilder?.dataSource = HKLiveWorkoutDataSource(
healthStore: healthStore,
workoutConfiguration: config
)
workoutSession?.delegate = self
workoutBuilder?.delegate = self
let start = Date()
workoutSession?.startActivity(with: start)
try await workoutBuilder?.beginCollection(at: start)
isActive = true
}
func endWorkout() async throws {
workoutSession?.end()
try await workoutBuilder?.endCollection(at: Date())
try await workoutBuilder?.finishWorkout()
isActive = false
}
}
// Expected output:
// After starting a workout, heart rate and calories update in real time
// heartRate = 142.0 (bpm)
// calories = 87.3 (kcal)
// elapsedTime = 1200.0 (seconds = 20 minutes)Step 4: Add Home Screen Widgets
Finally, add the widget extension:
Add Home Screen widgets.
[Widget Specs]
- Sizes: Small (2x2) and Medium (4x2)
- Small: Today's steps + circular progress ring
- Medium: Steps + calories + heart rate side by side
[Technical Requirements]
- App Group for sharing data with the iPhone app
- TimelineProvider that refreshes every 15 minutes
- Fitness-themed accent color (green tones)
- Widget tap opens iPhone app dashboard via DeepLinkThe widget's core is the TimelineProvider that reads data through App Group:
// FitnessWidget.swift — Widget timeline provider
import WidgetKit
import SwiftUI
struct FitnessEntry: TimelineEntry {
let date: Date
let steps: Int
let stepGoal: Int
let calories: Double
let heartRate: Double
}
struct FitnessTimelineProvider: TimelineProvider {
let defaults = UserDefaults(
suiteName: "group.com.yourapp.fitness"
)
func getTimeline(
in context: Context,
completion: @escaping (Timeline<FitnessEntry>) -> Void
) {
let steps = defaults?.integer(forKey: "todaySteps") ?? 0
let goal = defaults?.integer(forKey: "stepGoal") ?? 10000
let cal = defaults?.double(forKey: "todayCalories") ?? 0
let hr = defaults?.double(forKey: "latestHeartRate") ?? 0
let entry = FitnessEntry(
date: Date(), steps: steps,
stepGoal: goal, calories: cal, heartRate: hr
)
let next = Calendar.current.date(
byAdding: .minute, value: 15, to: Date()
)!
let timeline = Timeline(
entries: [entry], policy: .after(next)
)
completion(timeline)
}
// ... placeholder, snapshot omitted
}
// Expected output:
// Home Screen shows activity ring with current steps
// Updates every 15 minutes with latest data
// Tapping opens the iPhone appAdvanced Patterns
Pattern 1: Automatic Workout Detection
Apple Watch includes motion detection via CMMotionActivityManager. Add this prompt to Rork Max to auto-detect when users start running:
Use CMMotionActivityManager to detect when the user starts running
and send a notification asking "Start a workout?"Pattern 2: Weekly Summary Notifications
Send a weekly activity summary every Monday morning:
Every Monday at 9 AM, send a local notification with last week's
exercise summary (total steps, average heart rate, workout count).Pattern 3: Data Export
Let users export their health data as CSV:
Add an "Export Data" button in Settings that exports the last 30 days
of steps, calories, and sleep data as a CSV file via the share sheet.Troubleshooting
HealthKit Authorization Gets Rejected
If users deny HealthKit access, HKAuthorizationStatus becomes .sharingDenied. Show a UI that guides them to Settings. Tell Rork Max: "Show a button to open Settings when HealthKit permission is denied."
Data Sync Delay Between iPhone and Apple Watch
WatchConnectivity's transferUserInfo isn't always immediate. Use sendMessage for real-time data and transferUserInfo for background sync.
Widget Not Updating
WidgetKit timeline updates are system-managed, so 15-minute intervals aren't exact. Call WidgetCenter.shared.reloadAllTimelines() from the iPhone app whenever HealthKit data changes to force a refresh.
Build Error: App Group Mismatch
All three targets (iPhone, Watch, Widget) must use the same App Group ID. Tell Rork Max explicitly: "Set the App Group ID to group.com.yourapp.fitness for all targets."
Workout Session Stops in Background
watchOS requires Extended Runtime Session for background workout recording. Rork Max configures this automatically, but if it fails, add the prompt: "Enable Extended Runtime Session for HKWorkoutSession."
Publishing and Monetization
App Store Review Considerations
Apps using HealthKit face stricter Apple review. Key points:
- NSHealthShareUsageDescription must clearly state why you need the data (e.g., "This app uses HealthKit to display your steps and heart rate")
- Request only the minimum data types needed — requesting unnecessary types leads to rejection
- Privacy policy must explicitly cover HealthKit data handling
- Don't transmit HealthKit data to external servers without clear disclosure
Revenue Models
Common monetization strategies for fitness apps include:
- Freemium: Basic features (steps, calories) free; detailed analytics, Apple Watch support, and CSV export as premium
- Subscription: $4.99/month or $29.99/year using Rork Max's StoreKit 2 integration
- One-time purchase: Premium features for $9.99
ASO (App Store Optimization)
The fitness category is highly competitive. Target niche keywords beyond "step counter" and "heart rate" — phrases like "HealthKit widget," "Apple Watch workout tracker," and "fitness dashboard iOS" can help you rank for less competitive terms.
Wrapping Up
This tutorial covered the complete process of building a fitness tracker that integrates HealthKit, Apple Watch, and Home Screen widgets using Rork Max.
Key takeaways:
- Incremental prompt design: Build iPhone → HealthKit → Watch → Widget in stages
- Centralized data with HealthKitManager: Steps, calories, heart rate, and sleep managed in one place
- WatchConnectivity for bidirectional sync: Real-time data between iPhone and Apple Watch
- App Group for widget data sharing: 15-minute timeline updates on the Home Screen
- Monetization: Freemium + StoreKit 2 subscriptions
The power of Rork Max lies in turning what used to be weeks of multi-platform development into a series of well-crafted prompts. For more on the individual components, check out our guides on Apple Watch app development, widget creation, and HealthKit basics.