The global smartwatch market shipped 190 million units in 2025, with Apple Watch and Wear OS devices accounting for over 70% of the market. Wearable development isn't about shrinking a phone app onto a smaller screen — it's a fundamentally different interaction model. Glance-able information, health data, and 5-second interactions define the medium. Here's how to build wearable apps that work within these constraints.
📋 Table of Contents
The Wearable Platform Landscape
| Platform | Devices | Development | Market Share |
|---|---|---|---|
| watchOS | Apple Watch (Series, SE, Ultra) | SwiftUI, Xcode | ~50% |
| Wear OS | Samsung Galaxy Watch, Google Pixel Watch, others | Jetpack Compose for Wear | ~25% |
| Fitbit OS / Wear OS | Fitbit devices (now Google) | Migrating to Wear OS | ~10% |
| HarmonyOS | Huawei Watch series | ArkTS, DevEco Studio | ~8% |
| Garmin CIQ | Garmin watches | Monkey C language | Niche (athletes) |
For most developers, Apple Watch + Wear OS covers 75%+ of the market. If you're building a companion app, target both. If you're building a standalone health/fitness app, start with whichever platform your target users prefer.
Design for the Wrist
Wearable UX is governed by one rule: interactions should take under 5 seconds. Users glance at their wrist, get information, and return to what they were doing. If your wearable app requires extended attention, it probably shouldn't be a wearable app.
Design Principles
- Glance-able: The most important information should be visible without scrolling. Heart rate, step count, next meeting — one look, one number
- Actionable: Enable quick actions: start/stop a timer, send a pre-written reply, log a water intake. One tap, done
- Minimal input: Typing on a watch is painful. Use voice input, pre-defined options, and gestures instead. If your feature requires text input, it belongs on the phone
- Context-aware: Show workout stats during exercise, meeting info before a meeting, weather in the morning. The watch knows what the user is doing — use that
- Complications matter: Watch face complications (watchOS) and tiles (Wear OS) are where users spend the most time. A well-designed complication is more valuable than your full app
Apple Watch Development with SwiftUI
watchOS development is SwiftUI-only — no UIKit fallback. The good news: SwiftUI's declarative approach is well-suited for the watch's simple interface patterns.
// watchOS — workout tracking view
import SwiftUI
import HealthKit
struct WorkoutView: View {
@StateObject private var manager = WorkoutManager()
var body: some View {
TabView {
// Metrics view
VStack(spacing: 8) {
Text(manager.heartRate.formatted(.number.precision(.fractionLength(0))))
.font(.system(size: 48, weight: .bold, design: .rounded))
.foregroundColor(.red)
Text("BPM")
.font(.caption)
.foregroundColor(.secondary)
HStack {
MetricView(value: manager.calories, unit: "CAL", color: .green)
MetricView(value: manager.distance, unit: "KM", color: .blue)
}
}
// Controls view
VStack(spacing: 12) {
Button(manager.isActive ? "Pause" : "Resume") {
manager.togglePause()
}
.tint(manager.isActive ? .yellow : .green)
Button("End Workout") {
manager.endWorkout()
}
.tint(.red)
}
}
.tabViewStyle(.verticalPage)
}
}
// Complication — shows live heart rate on watch face
struct HeartRateComplication: View {
let heartRate: Double
var body: some View {
Gauge(value: heartRate, in: 40...200) {
Image(systemName: "heart.fill")
} currentValueLabel: {
Text("\(Int(heartRate))")
}
.gaugeStyle(.accessoryCircular)
.tint(.red)
}
}
Key watchOS Features
- Complications: Small widgets on the watch face — the most-viewed surface on Apple Watch. Support WidgetKit for complications
- Live Activities: Dynamic Island-style updates from your watch app. Perfect for workout progress, delivery tracking, sports scores
- WatchConnectivity: Send data between your iPhone and Watch apps. Use application context for state sync, transferFile for larger data
- Standalone apps: watchOS apps can work without an iPhone companion. Consider whether your watch app should be independent
Wear OS Development with Compose
Wear OS uses Jetpack Compose with watch-specific components. The Horologist library (by Google) adds higher-level components designed for round displays.
// Wear OS — Compose for Wear
@Composable
fun WorkoutScreen(viewModel: WorkoutViewModel = hiltViewModel()) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
Scaffold(
timeText = { TimeText() } // Always show time at top
) {
ScalingLazyColumn(
modifier = Modifier.fillMaxSize(),
anchorType = ScalingLazyColumnAnchorType.ItemCenter
) {
item {
Text(
text = "${uiState.heartRate.toInt()}",
style = MaterialTheme.typography.display1,
color = Color.Red
)
}
item {
Text("BPM", style = MaterialTheme.typography.caption1)
}
item {
Row(
horizontalArrangement = Arrangement.spacedBy(16.dp)
) {
Chip(
onClick = { viewModel.togglePause() },
label = { Text(if (uiState.isActive) "Pause" else "Resume") },
colors = ChipDefaults.primaryChipColors()
)
}
}
item {
CompactChip(
onClick = { viewModel.endWorkout() },
label = { Text("End") },
colors = ChipDefaults.chipColors(backgroundColor = Color.Red)
)
}
}
}
}
// Tile — equivalent of Apple Watch complication
class HeartRateTile : TileService() {
override fun onTileRequest(requestParams: RequestBuilders.TileRequest) =
Futures.immediateFuture(
Tile.Builder()
.setResourcesVersion("1")
.setTileTimeline(timeline {
timelineEntry {
layout {
// CircularProgressIndicator with heart rate
}
}
})
.build()
)
}
Health and Fitness Data APIs
Health data is the primary reason people use smartwatches. Both platforms provide comprehensive health APIs — but with strict privacy controls.
| Data Type | watchOS API | Wear OS API |
|---|---|---|
| Heart rate | HealthKit (HKQuantityType) | Health Services (HeartRateDataType) |
| Step count | HealthKit | Health Services / Health Connect |
| Workouts | HKWorkoutSession | ExerciseClient |
| Sleep tracking | HealthKit (sleep analysis) | Health Services |
| Blood oxygen | HealthKit (SpO2) | Health Services |
| Location / GPS | CoreLocation | FusedLocationProvider |
| ECG data | HealthKit (electrocardiogram) | Samsung Health SDK (Galaxy only) |
Battery Optimization
Watches have tiny batteries (300-500 mAh). An app that drains the battery will be uninstalled immediately. Every design decision should be filtered through the question: "Does this drain the battery?"
Battery-First Development Rules
- Minimize sensor polling: Use the lowest frequency that meets your needs. Heart rate every 5 seconds during a workout, every 10 minutes during rest
- Batch network requests: Don't send data to the phone/server in real-time. Batch and sync periodically or when the device is charging
- Use complications/tiles wisely: They update on a schedule (typically every 15-30 minutes for watchOS, configurable for Wear OS). Don't force more frequent updates unless necessary
- Avoid always-on processing: Register for system events (significant location change, workout start) instead of polling. Both platforms have event-driven APIs specifically for this
- Dark UI is not optional: OLED screens on watches mean black pixels use zero power. Use dark backgrounds and minimal bright elements
Beyond Smartwatches
The wearable category extends beyond wrist devices:
| Device Category | Examples | Development Approach |
|---|---|---|
| Smart rings | Oura Ring, Samsung Galaxy Ring | Companion phone app + vendor SDK |
| Smart glasses | Ray-Ban Meta, Xreal | Meta SDK, vendor-specific APIs |
| Fitness bands | Xiaomi Band, Whoop | BLE + vendor SDK |
| Health monitors | CGMs (Dexcom), BP monitors | Bluetooth LE + Health Connect / HealthKit |
| Hearables | AirPods Pro, Pixel Buds | CoreBluetooth / BLE APIs |
The common thread: most non-watch wearables communicate via Bluetooth LE to a companion phone app. Your phone app collects data, processes it, and syncs with cloud services. Health Connect (Android) and HealthKit (iOS) serve as centralized health data stores that multiple wearable apps can write to and read from.
Frequently Asked Questions
Should my app have a watch companion?
If your app involves health/fitness tracking, quick actions (timers, controls, notifications), or information that users check frequently, a watch companion adds genuine value. Don't build one just to have it — the watch interaction must solve a real problem.
Can I use Flutter or React Native for watch apps?
Not really. watchOS requires SwiftUI; Wear OS requires Compose for Wear. Flutter and React Native don't have mature watch support. You'll need native development for watch apps while potentially using cross-platform for the phone companion.
How do I test watch apps without hardware?
Xcode includes an Apple Watch simulator, and Android Studio has a Wear OS emulator. Both are adequate for UI development. For sensor data testing (heart rate, accelerometer), you'll need real hardware — simulators can't replicate sensor behavior accurately.
What about watch-only apps (no phone companion)?
Both platforms support standalone watch apps. Apple Watch can operate independently with cellular; Wear OS requires a paired phone but apps can work without the companion app installed. Standalone works for simple utilities, workout trackers, and quick-reference apps.
Is wearable development profitable?
The health/fitness wearable app market is growing 20%+ annually. Subscription-based fitness apps with watch companions (like Strava, Peloton, Apple Fitness+) are the most successful model. See our monetization guide for subscription strategies.
Pillai Infotech LLP
We develop wearable apps for Apple Watch and Wear OS alongside mobile companions. Let's discuss your wearable project.