Watch App — приложение за носими устройства: Apple Watch с watchOS и умни часовници на Wear OS от Google. За разлика от мобилните приложения, Watch App е оптимизирано за малък екран (диагонал 1.5–2 инча), кратки сесии на взаимодействие (5–15 секунди) и специфични сценарии — фитнес, известия, бързи отговори, гласово въвеждане. Разработката се извършва на SwiftUI за Apple Watch и на Kotlin с Jetpack Compose for Wear OS за Android. Ще разгледаме ключовите концепции, архитектура, навигация и примери за код за двете платформи.
Основни точки
Watch App — е приложение, предназначено за работа на носими устройства: Apple Watch (watchOS) и умни часовници на Wear OS. Основната разлика от мобилното приложение — форм-факторът. Екранът на часовника има диагонал 1.5–2 инча (срещу 6–7 инча при смартфона), което ограничава количеството едновременно показвана информация. Взаимодействието с приложението е кратко — потребителят проверява времето, известието, пулса или стъпките за 5–15 секунди, след което спуска ръката си.
Ключови сценарии за Watch App: фитнес тракер (стъпки, пулс, калории, сън), известия (съобщения, обаждания, календар), бързи действия (стартиране на таймер, гласов отговор на съобщение, управление на музика), компаньон (дистанционно за камера, ключове за кола, NFC плащане). Според Counterpoint Research (2026), глобалният пазар на умни часовници надхвърля 150 милиона устройства годишно, от които Apple Watch заема 35%, Wear OS — 20%, останалите — Fitbit, Garmin и други.
Ограничения на Watch App: малък екран (до 2 инча), ограничено време на работа на батерията (до 18–24 часа), липса на пълноценна клавиатура (само гласово въвеждане или диктовка), лимит за фонови задачи (watchOS — до 10 минути, Wear OS — до 5 минути), необходимост от синхронизация с телефона за повечето функции. От watchOS 6 (2019) и Wear OS 3 (2022) приложенията могат да работят автономно чрез LTE модул без сдвояване с телефон.
watchOS — операционна система на Apple за умни часовници, базирана на iOS и използваща същите рамки (Foundation, UIKit в адаптирана версия, SwiftUI). Разработката се извършва в Xcode на Swift. Основната UI рамка — SwiftUI, която предоставя watchOS-специфични компоненти: TabView с въртележка, NavigationStack, дигитална корона (Digital Crown) чрез DigitalCrownModifier, меню за продължително натискане.
Навигация на watchOS се основава на йерархична парадигма. Основни елементи: йерархичен стек (NavigationStack с автоматично връщане), модални презентации (sheet), навигация по страници (page-based чрез TabView с .tabViewStyle(.page)), контекстни менюта при продължително натискане. Digital Crown позволява скролване на съдържание и промяна на стойности. Жестове: докосване, продължително натискане, плъзгане, Force Touch (до watchOS 7), завъртане на Digital Crown.
Ключови рамки на watchOS: HealthKit (достъп до здравни данни — пулс, стъпки, сън, ЕКГ), CoreMotion (акселерометър, жироскоп), WatchConnectivity (обмен на данни с iPhone), ClockKit (компликации на циферблата), BackgroundTasks (фонови актуализации до 10 минути), ARKit (FaceTime с ефекти на Series 9+). Watch App може да бъде пълноценно (отделно приложение в дока) или разширение (едновременно с iOS версията).
Wear OS — платформа на Google за умни часовници, базирана на Android. Съвременната разработка се извършва на Kotlin с Jetpack Compose for Wear OS — набор от компоненти, оптимизирани за кръгли екрани: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper. За разлика от мобилния Compose, Wear OS използва собствени модификатори: scrollable за вертикално скролване, swipable за плъзгане, RotaryInput за управление на короната.
Навигация на Wear OS използва страничен панел (SwipeToDismiss) и екрани-карти. Основни елементи: SwipeDismissableNavHost (навигация с връщане чрез плъзгане), позициониране на екрани (ScalingLazyColumn за списъци), хоризонтална въртележка (Carousel), циферблат (WatchFace чрез WatchFaceService). Google препоръчва използването на странично плъзгане за връщане и вертикално скролване за списъци. Бутонът за захранване на часовника отваря списък с последните приложения.
Здраве и сензори на Wear OS: Health Services API (стъпки, пулс, калории, сън, SpO2 чрез доставчици на данни), SensorManager (акселерометър, жироскоп, барометър, магнитометър), Location Services (GPS чрез FusedLocationProvider). Wear OS 5+ поддържа проследяване на бягане, ходене, колоездене и плуване с автоматично определяне на типа активност. Данните се синхронизират с Google Fit чрез Health Connect.
Нека разгледаме приложение за проследяване на пулса на Apple Watch с използване на SwiftUI и HealthKit.
import SwiftUI
import HealthKit
// Модел на данни за пулс
struct HeartRateData: Identifiable {
let id = UUID()
let bpm: Double
let date: Date
}
// ViewModel за 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)
}
}
// Основен екран
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)
}
}
Ключови точки: HKHealthStore иска достъп до данни на HealthKit; HKObserverQuery уведомява за промени в пулса в реално време; HKSampleQuery получава последната стойност. Watch App автоматично актуализира UI при промяна на currentHeartRate благодарение на @Observable. HealthKit обработва данните локално на устройството — заявки към сървър не са необходими.
Аналогично приложение за Wear OS на Kotlin с Jetpack Compose и 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 за достъп до сензори
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 = "Пулс",
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: Scaffold с TimeText и Vignette за типичен layout; модификатор .scrollable() за съвместимост с кръгъл екран; HealthService (Horologist) за достъп до сензори за пулс. Jetpack Compose for Wear OS автоматично адаптира интерфейса за кръгли и квадратни екрани — разработчикът не трябва ръчно да обработва различни форм-фактори.
Често задавани въпроси
Watch App има ограничен екран (диагонал 1.5–2 инча), работи на батерия с малък капацитет и използва управление с жестове. Взаимодействието е кратко — 5–15 секунди, приложението трябва да бъде максимално стегнато и да показва 1–2 ключови показателя.
За Apple Watch — Swift с рамките SwiftUI и WatchKit. За Wear OS — Kotlin с Jetpack Compose for Wear OS. И двете платформи поддържат декларативен подход за изграждане на интерфейси.
Да, от Apple Watch Series 3 с LTE и watchOS 6+ приложението може да работи автономно чрез App Store на часовника. Wear OS също поддържа LTE версии с автономна работа чрез Google Play на часовника.
Основни ограничения: размер на екрана (до 2 инча), ограничено време на работа на батерията (до 18 часа), липса на пълноценен браузър и клавиатура, лимит за фонови задачи (watchOS — до 10 минути, Wear OS — до 5 минути).
На Apple Watch се използва HealthKit (HKHealthStore, HKSampleQuery) за пулс, стъпки, сън и CoreMotion за акселерометър. На Wear OS — Health Services API (чрез Horologist) за здравни метрики и SensorManager за сурови данни от сензори.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също