Watch App — aplikasi untuk perangkat wearable: Apple Watch dengan watchOS dan jam tangan pintar Wear OS dari Google. Berbeda dengan aplikasi seluler, Watch App dioptimalkan untuk layar kecil (diagonal 1.5–2 inci), sesi interaksi singkat (5–15 detik) dan skenario spesifik — kebugaran, notifikasi, jawaban cepat, input suara. Pengembangan dilakukan dengan SwiftUI untuk Apple Watch dan Kotlin dengan Jetpack Compose for Wear OS untuk Android. Mari kita bahas konsep kunci, arsitektur, navigasi, dan contoh kode untuk kedua platform.
Poin utama
Watch App — adalah aplikasi yang dirancang untuk bekerja pada perangkat wearable: Apple Watch (watchOS) dan jam tangan pintar Wear OS. Perbedaan utama dari aplikasi seluler — faktor bentuk. Layar jam tangan memiliki diagonal 1.5–2 inci (dibandingkan 6–7 inci pada ponsel pintar), yang membatasi jumlah informasi yang ditampilkan secara bersamaan. Interaksi dengan aplikasi singkat — pengguna memeriksa waktu, notifikasi, denyut nadi, atau langkah dalam 5–15 detik, lalu menurunkan tangan.
Skenario kunci Watch App: pelacak kebugaran (langkah, denyut nadi, kalori, tidur), notifikasi (pesan, panggilan, kalender), tindakan cepat (menyalakan timer, menjawab pesan dengan suara, mengontrol musik), pendamping (remote kamera, kunci mobil, pembayaran NFC). Menurut Counterpoint Research (2026), pasar global jam tangan pintar melebihi 150 juta perangkat per tahun, dengan Apple Watch menguasai 35%, Wear OS — 20%, sisanya — Fitbit, Garmin dan lainnya.
Keterbatasan Watch App: layar kecil (hingga 2 inci), daya tahan baterai terbatas (hingga 18–24 jam), tidak ada keyboard lengkap (hanya input suara atau dikte), batasan tugas latar belakang (watchOS — hingga 10 menit, Wear OS — hingga 5 menit), kebutuhan sinkronisasi dengan ponsel untuk sebagian besar fungsi. Mulai watchOS 6 (2019) dan Wear OS 3 (2022) aplikasi dapat bekerja secara otonom melalui modul LTE tanpa dipasangkan dengan ponsel.
watchOS — sistem operasi Apple untuk jam tangan pintar, berbasis iOS dan menggunakan framework yang sama (Foundation, UIKit dalam versi adaptasi, SwiftUI). Pengembangan dilakukan di Xcode dengan Swift. Framework UI utama — SwiftUI, yang menyediakan komponen khusus watchOS: TabView dengan carousel, NavigationStack, mahkota digital (Digital Crown) melalui DigitalCrownModifier, menu tekan lama.
Navigasi di watchOS didasarkan pada paradigma hierarkis. Elemen utama: tumpukan hierarkis (NavigationStack dengan kembali otomatis), presentasi modal (sheet), navigasi berbasis halaman (page-based melalui TabView dengan .tabViewStyle(.page)), menu konteks saat tekan lama. Digital Crown memungkinkan menggulir konten dan mengubah nilai. Gestur: ketuk, tekan lama, geser, Force Touch (hingga watchOS 7), putaran Digital Crown.
Framework kunci watchOS: HealthKit (akses ke data kesehatan — denyut nadi, langkah, tidur, EKG), CoreMotion (akselerometer, giroskop), WatchConnectivity (pertukaran data dengan iPhone), ClockKit (komplikasi di tampilan jam), BackgroundTasks (pembaruan latar belakang hingga 10 menit), ARKit (FaceTime dengan efek di Series 9+). Watch App dapat berupa aplikasi penuh (aplikasi terpisah di dock) atau ekstensi (bersamaan dengan versi iOS).
Wear OS — platform Google untuk jam tangan pintar, berbasis Android. Pengembangan modern dilakukan dengan Kotlin dan Jetpack Compose for Wear OS — kumpulan komponen yang dioptimalkan untuk layar bundar: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper. Berbeda dengan Compose seluler, Wear OS menggunakan pengubahnya sendiri: scrollable untuk pengguliran vertikal, swipable untuk menggeser, RotaryInput untuk mengontrol kenop.
Navigasi di Wear OS menggunakan panel samping (SwipeToDismiss) dan layar-kartu. Elemen utama: SwipeDismissableNavHost (navigasi dengan kembali melalui geser), pemosisian layar (ScalingLazyColumn untuk daftar), carousel horizontal (Carousel), tampilan jam (WatchFace melalui WatchFaceService). Google merekomendasikan penggunaan geser samping untuk kembali dan pengguliran vertikal untuk daftar. Tombol daya di jam tangan membuka daftar aplikasi terbaru.
Kesehatan dan sensor di Wear OS: Health Services API (langkah, denyut nadi, kalori, tidur, SpO2 melalui penyedia data), SensorManager (akselerometer, giroskop, barometer, magnetometer), Location Services (GPS melalui FusedLocationProvider). Wear OS 5+ mendukung pelacakan lari, jalan, bersepeda, dan berenang dengan deteksi otomatis jenis aktivitas. Data disinkronkan dengan Google Fit melalui Health Connect.
Mari kita lihat aplikasi pelacakan denyut nadi di Apple Watch menggunakan SwiftUI dan HealthKit.
import SwiftUI
import HealthKit
// Model data untuk denyut nadi
struct HeartRateData: Identifiable {
let id = UUID()
let bpm: Double
let date: Date
}
// ViewModel untuk HealthKit
@Observable
final class HealthViewModel {
private let healthStore = HKHealthStore()
var currentHeartRate: Double = 0
var isAuthorized: Bool = false
func requestAuthorization() {
guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
else { return }
let types = Set([heartRateType])
healthStore.requestAuthorization(toShare: nil, read: types) { success, _ in
Task { @MainActor in
self.isAuthorized = success
if success { self.startHeartRateQuery() }
}
}
}
func startHeartRateQuery() {
guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
else { return }
let query = HKObserverQuery(
sampleType: heartRateType, predicate: nil
) { [weak self] _, _, _ in
self?.fetchLatestHeartRate()
}
healthStore.execute(query)
}
private func fetchLatestHeartRate() {
guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
else { return }
let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
let query = HKSampleQuery(
sampleType: heartRateType, predicate: nil,
limit: 1, sortDescriptors: [sort]
) { _, samples, _ in
guard let sample = samples?.first as? HKQuantitySample else { return }
let bpm = sample.quantity.doubleValue(for: HKUnit.count().unitDivided(by: .minute()))
Task { @MainActor in
self.currentHeartRate = bpm
}
}
healthStore.execute(query)
}
}
// Layar utama
struct HeartRateView: View {
@State private var viewModel = HealthViewModel()
var body: some View {
VStack {
Image(systemName: "heart.fill")
.foregroundColor(.red)
.font(.largeTitle)
Text("\(Int(viewModel.currentHeartRate))")
.font(.system(size: 60, weight: .bold, design: .rounded))
.foregroundColor(.red)
Text("BPM")
.font(.caption)
.foregroundColor(.secondary)
}
.padding()
.onAppear(perform: viewModel.requestAuthorization)
}
}
Poin kunci: HKHealthStore meminta akses ke data HealthKit; HKObserverQuery memberi tahu tentang perubahan denyut nadi secara real-time; HKSampleQuery mendapatkan nilai terakhir. Watch App secara otomatis memperbarui UI saat currentHeartRate berubah berkat @Observable. HealthKit memproses data secara lokal di perangkat — permintaan ke server tidak diperlukan.
Aplikasi serupa untuk Wear OS dengan Kotlin, Jetpack Compose, dan Health Services API.
// MainActivity.kt
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.wear.compose.material.*
import androidx.wear.compose.foundation.arc.BasicArcParams
import com.google.android.horologist.health.HealthService
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
WearAppTheme {
HeartRateScreen()
}
}
}
}
@Composable
fun HeartRateScreen() {
var heartRate by remember { mutableIntStateOf(0) }
var isConnected by remember { mutableStateOf(false) }
LaunchedEffect(Unit) {
// HealthService — API untuk akses ke sensor
val healthService = HealthService()
healthService.connect().onSuccess {
isConnected = true
}
}
Scaffold(
timeText = { TimeText() },
vignette = { Vignette(vignettePosition = VignettePosition.TopAndBottom) }
) {
Column(
modifier = Modifier
.fillMaxSize()
.scrollable(state = ScrollState),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Icon(
imageVector = Icons.Filled.Favorite,
contentDescription = "Denyut nadi",
modifier = Modifier.size(40.dp),
tint = MaterialTheme.colors.error
)
Text(
text = heartRate.toString(),
style = MaterialTheme.typography.display1
)
Text(
text = "BPM",
style = MaterialTheme.typography.caption2
)
}
}
}
Komponen kunci Wear OS: Scaffold dengan TimeText dan Vignette untuk tata letak tipikal; pengubah .scrollable() untuk kompatibilitas dengan layar bundar; HealthService (Horologist) untuk akses ke sensor denyut nadi. Jetpack Compose for Wear OS secara otomatis menyesuaikan antarmuka untuk layar bundar dan persegi — pengembang tidak perlu menangani faktor bentuk yang berbeda secara manual.
Pertanyaan yang sering diajukan
Watch App memiliki layar terbatas (diagonal 1.5–2 inci), bekerja dengan baterai berkapasitas kecil, dan menggunakan kontrol gestur. Interaksinya singkat — 5–15 detik, aplikasi harus maksimal ringkas dan menampilkan 1–2 indikator kunci.
Untuk Apple Watch — Swift dengan framework SwiftUI dan WatchKit. Untuk Wear OS — Kotlin dengan Jetpack Compose for Wear OS. Kedua platform mendukung pendekatan deklaratif untuk membangun antarmuka.
Ya, mulai Apple Watch Series 3 dengan LTE dan watchOS 6+ aplikasi dapat bekerja secara otonom melalui App Store di jam tangan. Wear OS juga mendukung versi LTE dengan kerja otonom melalui Google Play di jam tangan.
Keterbatasan utama: ukuran layar (hingga 2 inci), daya tahan baterai terbatas (hingga 18 jam), tidak ada browser dan keyboard lengkap, batasan tugas latar belakang (watchOS — hingga 10 menit, Wear OS — hingga 5 menit).
Di Apple Watch digunakan HealthKit (HKHealthStore, HKSampleQuery) untuk denyut nadi, langkah, tidur dan CoreMotion untuk akselerometer. Di Wear OS — Health Services API (melalui Horologist) untuk metrik kesehatan dan SensorManager untuk data sensor mentah.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga