Watch App, giyilebilir cihazlar için bir uygulamadır: watchOS çalıştıran Apple Watch ve Google'ın Wear OS'li akıllı saatleri. Mobil uygulamaların aksine Watch App, küçük ekran (1.5–2 inç köşegen), kısa etkileşim oturumları (5–15 saniye) ve belirli senaryolar (fitness, bildirimler, hızlı yanıtlar, sesli giriş) için optimize edilmiştir. Geliştirme, Apple Watch için SwiftUI ve Android için Kotlin ile Jetpack Compose for Wear OS ile yapılır. Her iki platform için temel kavramları, mimariyi, navigasyonu ve kod örneklerini inceleyelim.
Önemli noktalar
Watch App, giyilebilir cihazlarda çalışmak üzere tasarlanmış bir uygulamadır: Apple Watch (watchOS) ve Wear OS akıllı saatler. Mobil uygulamadan temel fark, form faktörüdür. Saat ekranının köşegeni 1.5–2 inçtir (akıllı telefonun 6–7 inçine kıyasla), bu da aynı anda görüntülenen bilgi miktarını sınırlar. Uygulamayla etkileşim kısadır — kullanıcı 5–15 saniye içinde saati, bildirimi, nabzı veya adımları kontrol eder, ardından elini indirir.
Temel Watch App senaryoları: fitness takipçisi (adımlar, nabız, kalori, uyku), bildirimler (mesajlar, aramalar, takvim), hızlı işlemler (zamanlayıcı başlatma, sese mesaj yanıtlama, müzik kontrolü), yardımcı (kamera uzaktan kumandası, araba anahtarları, NFC ödemesi). Counterpoint Research'e (2026) göre, küresel akıllı saat pazarı yılda 150 milyon cihazı aşmaktadır; bunun %35'i Apple Watch, %20'si Wear OS, geri kalanı Fitbit, Garmin ve diğerleridir.
Watch App sınırlamaları: küçük ekran (2 inçe kadar), sınırlı pil ömrü (18–24 saate kadar), tam klavye yok (yalnızca sesli giriş veya dikte), arka plan görev sınırı (watchOS — 10 dakikaya kadar, Wear OS — 5 dakikaya kadar), çoğu işlev için telefonla senkronizasyon gerekliliği. watchOS 6 (2019) ve Wear OS 3 (2022) ile birlikte uygulamalar, bir telefonla eşleştirilmeden LTE modülü üzerinden otonom olarak çalışabilir.
watchOS, Apple'ın akıllı saatler için işletim sistemidir, iOS tabanlıdır ve aynı frameworkleri (Foundation, UIKit uyarlanmış sürümü, SwiftUI) kullanır. Geliştirme Xcode'da Swift ile yapılır. Ana UI framework'ü SwiftUI'dir ve watchOS'a özel bileşenler sağlar: karuselli TabView, NavigationStack, DigitalCrownModifier aracılığıyla Digital Crown, uzun basma menüsü.
watchOS'ta navigasyon hiyerarşik bir paradigmaya dayanır. Ana öğeler: hiyerarşik yığın (otomatik dönüşlü NavigationStack), modal sunumlar (sheet), sayfa tabanlı navigasyon (.tabViewStyle(.page) ile TabView aracılığıyla), uzun basmada bağlamsal menüler. Digital Crown, içeriği kaydırma ve değerleri değiştirme olanağı sağlar. Jestler: dokunma, uzun basma, kaydırma, Force Touch (watchOS 7'ye kadar), Digital Crown döndürme.
Temel watchOS frameworkleri: HealthKit (sağlık verilerine erişim — nabız, adımlar, uyku, EKG), CoreMotion (ivmeölçer, jiroskop), WatchConnectivity (iPhone ile veri alışverişi), ClockKit (kadranda komplikasyonlar), BackgroundTasks (10 dakikaya kadar arka plan güncellemeleri), ARKit (Series 9+'da FaceTime efektleri). Watch App tam özellikli (dock'ta ayrı uygulama) veya bir uzantı (iOS sürümüyle eşzamanlı) olabilir.
Wear OS, Android tabanlı Google'ın akıllı saatler platformudur. Modern geliştirme, Jetpack Compose for Wear OS ile Kotlin'de yapılır — yuvarlak ekranlar için optimize edilmiş bileşenler kümesi: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper. Mobil Compose'un aksine Wear OS, kendi değiştiricilerini kullanır: dikey kaydırma için scrollable, kaydırma için swipable, kurma kolu kontrolü için RotaryInput.
Wear OS'ta navigasyon bir yan panel (SwipeToDismiss) ve kart ekranları kullanır. Ana öğeler: SwipeDismissableNavHost (geri kaydırmalı navigasyon), ekran konumlandırma (listeler için ScalingLazyColumn), yatay karusel (Carousel), saat kadranı (WatchFaceService aracılığıyla WatchFace). Google, geri dönmek için yan kaydırma ve listeler için dikey kaydırma kullanılmasını önerir. Saatteki güç düğmesi son uygulamalar listesini açar.
Wear OS'ta sağlık ve sensörler: Health Services API (veri sağlayıcıları aracılığıyla adımlar, nabız, kalori, uyku, SpO2), SensorManager (ivmeölçer, jiroskop, barometre, manyetometre), Location Services (FusedLocationProvider aracılığıyla GPS). Wear OS 5+, otomatik aktivite türü algılama ile koşu, yürüyüş, bisiklet ve yüzme takibini destekler. Veriler Health Connect aracılığıyla Google Fit ile senkronize olur.
SwiftUI ve HealthKit kullanan Apple Watch için kalp atışı takip uygulamasını inceleyelim.
import SwiftUI
import HealthKit
// Nabız veri modeli
struct HeartRateData: Identifiable {
let id = UUID()
let bpm: Double
let date: Date
}
// HealthKit için ViewModel
@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)
}
}
// Ana ekran
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)
}
}
Önemli noktalar: HKHealthStore HealthKit verilerine erişim ister; HKObserverQuery gerçek zamanlı nabız değişikliklerini bildirir; HKSampleQuery en son değeri alır. @Observable sayesinde currentHeartRate değiştiğinde Watch App UI'yı otomatik olarak günceller. HealthKit verileri cihazda yerel olarak işler — sunucu istekleri gerekmez.
Jetpack Compose ve Health Services API ile Kotlin'de Wear OS için benzer uygulama.
// 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 — Sensör erişimi için API
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 = "Kalp atış hızı",
modifier = Modifier.size(40.dp),
tint = MaterialTheme.colors.error
)
Text(
text = heartRate.toString(),
style = MaterialTheme.typography.display1
)
Text(
text = "BPM",
style = MaterialTheme.typography.caption2
)
}
}
}
Wear OS temel bileşenleri: standart düzen için TimeText ve Vignette ile Scaffold; yuvarlak ekran uyumluluğu için .scrollable() değiştiricisi; kalp atışı sensörü erişimi için HealthService (Horologist). Jetpack Compose for Wear OS, arayüzü otomatik olarak yuvarlak ve kare ekranlara uyarlar — geliştiricinin farklı form faktörlerini manuel olarak ele alması gerekmez.
Sıkça Sorulan Sorular
Watch App sınırlı bir ekrana (1.5–2 inç köşegen) sahiptir, küçük kapasiteli bir pille çalışır ve jest kontrolü kullanır. Etkileşim kısadır — 5–15 saniye, uygulama mümkün olduğunca öz olmalı ve 1–2 temel metrik göstermelidir.
Apple Watch için — SwiftUI ve WatchKit frameworkleri ile Swift. Wear OS için — Jetpack Compose for Wear OS ile Kotlin. Her iki platform da arayüz oluşturmak için bildirimsel yaklaşımı destekler.
Evet, LTE'li Apple Watch Series 3 ve watchOS 6+ ile başlayarak, uygulama saatteki App Store üzerinden otonom olarak çalışabilir. Wear OS da saatte Google Play üzerinden bağımsız çalışan LTE sürümlerini destekler.
Ana sınırlamalar: ekran boyutu (2 inçe kadar), sınırlı pil ömrü (18 saate kadar), tam tarayıcı veya klavye yok, arka plan görev sınırı (watchOS — 10 dakikaya kadar, Wear OS — 5 dakikaya kadar).
Apple Watch'ta nabız, adımlar, uyku için HealthKit (HKHealthStore, HKSampleQuery) ve ivmeölçer için CoreMotion kullanılır. Wear OS'ta — sağlık metrikleri için Health Services API (Horologist aracılığıyla) ve ham sensör verileri için SensorManager kullanılır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun