watchOS — operační systém Apple pro Apple Watch, poprvé vydaný v roce 2015 spolu s prvními hodinkami. Vývoj aplikací pro watchOS probíhá v jazyce Swift s použitím SwiftUI a WatchKit. Vlastnosti: malý obdélníkový displej, omezená spotřeba energie z baterie 0,3 Wh a úzká integrace s iPhonem přes Bluetooth. Podle údajů Counterpoint Research zaujímá Apple Watch více než 30 % celosvětového trhu chytrých hodinek.
Hlavní body
watchOS — operační systém pro chytré hodinky Apple, založený na jádře XNU Darwin. Poprvé vydán 24. dubna 2015 spolu s Apple Watch Series 0. Systém je postaven na stejné architektuře jako iOS, ale optimalizován pro malý displej (1,5 až 1,9 palce), omezenou paměť (až 1 GB RAM v Series 9) a minimální spotřebu energie.
Podle StatCounter (2026) zaujímá watchOS přibližně 55 % trhu operačních systémů pro chytré hodinky, čímž předčí Wear OS a proprietární systémy čínských výrobců. Apple vydává každoročně hlavní aktualizace watchOS a podporuje hodinky až 5 let od uvedení.
Klíčová vlastnost watchOS — závislost na iPhonu. Většina aplikací používá Watch Connectivity pro synchronizaci dat. Od watchOS 6 si hodinky mohou instalovat aplikace přímo z App Store, ale plná autonomie bez iPhonu je podporována až od watchOS 9.
První verze Watch OS 1.0 nepodporovala aplikace třetích stran — pouze předinstalované aplikace Apple. watchOS 2 (2015) otevřel SDK pro vývojáře. watchOS 3 (2016) zrychlil spouštění aplikací 7krát. watchOS 6 (2019) představil App Store na hodinkách. watchOS 9 (2022) přidal léky a vylepšené sledování spánku. watchOS 10 (2023) se stala největší aktualizací rozhraní od uvedení.
| Verze watchOS | Rok | Klíčová inovace |
|---|---|---|
| Watch OS 1 | 2015 | První verze, pouze nativní aplikace Apple |
| watchOS 2 | 2015 | Otevřené SDK, aplikace třetích stran, Watch Connectivity |
| watchOS 3 | 2016 | Okamžité spouštění aplikací, Dock, Scribble |
| watchOS 6 | 2019 | App Store na hodinkách, Cycle Tracking, Noise aplikace |
| watchOS 9 | 2022 | Léky, fáze spánku, vylepšený společník pro běh |
| watchOS 10 | 2023 | Smart Stack, Double Tap, nové ciferníky |
Architektura watchOS se skládá ze tří vrstev, které izolují hardware od uživatelských aplikací. Na rozdíl od iOS používá watchOS komponentový přístup: aplikace se skládá ze dvou cílů — rozšíření (extension) a hostitele na iPhonu.
Spodní vrstva — modifikované jádro XNU s ovladači pro čipy S4/S5/S6/S7/S8/S9 Apple. V Apple Watch Series 9 je použit S9 SiP s 5,6 miliardami tranzistorů a 4jádrovým Neural Engine. Systémové služby zahrnují Core Bluetooth, Watch Connectivity, HealthKit a Core Motion. Všechny úlohy na pozadí jsou spravovány BGTaskSchedulerem — systémovým plánovačem optimalizujícím spotřebu energie.
WatchKit — framework pro vytváření rozhraní aplikací watchOS. Zahrnuje WKInterfaceController, WKInterfaceGroup, WKInterfaceLabel a WKInterfaceButton. Od watchOS 6 Apple doporučuje SwiftUI místo WatchKit. SwiftUI poskytuje stejné možnosti, ale s deklarativní syntaxí a automatickou adaptací na velikost obrazovky: 38 mm (272×340), 42 mm (312×390), 40 mm (324×394), 44 mm (368×448), 45 mm (396×484), 49 mm (410×502 u Apple Watch Ultra).
watchOS omezuje práci aplikací na pozadí pro úsporu baterie. Dostupné režimy na pozadí: Workout (tréninky), HealthKit (monitorování zdraví), Location (geolokace), Audio (audio přehrávač) a Complication (data na ciferníku). Každý režim vyžaduje samostatnou capability v entitlements. Typická spotřeba energie: aktivní aplikace — 50-80 mA, režim na pozadí — 5-15 mA, pohotovostní režim — 1-3 mA.
import BackgroundTasks
import WatchKit
/// Plánování aktualizace dat na pozadí na watchOS
class BackgroundTaskManager: NSObject {
func scheduleBackgroundRefresh() {
let request = BGAppRefreshTaskRequest(identifier: "com.example.refresh")
request.earliestBeginDate = Date(timeIntervalSinceNow: 30 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
task.expirationHandler = { task.setTaskCompleted(success: false) }
DataService.shared.fetchData { result in
switch result {
case .success:
ComplicationController.reloadComplications()
task.setTaskCompleted(success: true)
case .failure:
task.setTaskCompleted(success: false)
}
}
}
}
/// Registrace úlohy na pozadí ve WKExtensionDelegate
class ExtensionDelegate: NSObject, WKExtensionDelegate {
let manager = BackgroundTaskManager()
func handle(_ backgroundTasks: Set<WKBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let refreshTask as BGAppRefreshTask:
manager.handleAppRefresh(task: refreshTask)
default:
task.setTaskCompleted(success: false)
}
}
}
}BGTaskScheduler zaručuje, že úlohy na pozadí jsou prováděny v optimálních okamžicích — když jsou hodinky na nabíječce a připojeny k iPhonu. WKExtensionDelegate zpracovává příchozí úlohy na pozadí a aktualizuje data na ciferníku. ComplicationController.reloadComplications aktualizuje widgety na vybraném ciferníku.
watchOS 10 — největší aktualizace rozhraní v historii platformy, vydaná v září 2023. Systém přešel od hierarchické navigace k navigaci orientované na obsah: hlavní obrazovkou se stal Smart Stack — inteligentní zásobník widgetů, který nahradil dok aplikací.
Smart Stack — vertikální seznam widgetů zobrazený pod ciferníkem. Widgety jsou řazeny podle kontextu: ráno se zobrazuje počasí a kalendář, během dne — aktivita a připomínky, večer — meditace a příprava na spánek. Vývojář může přidávat vlastní widgety prostřednictvím WidgetKit pro watchOS s použitím stejných API jako pro iOS 17.
Double Tap — gesto spojení ukazováčku a palce, rozpoznávané akcelerometrem a gyroskopem bez dotyku obrazovky. V Apple Watch Series 9 a Ultra 2 je gesto prováděno na hardwarové úrovni prostřednictvím Neural Engine. Vývojář obdrží událost přes UIDoubleTapGestureRecognizer nebo přes SwiftUI modifikátor .onTapGesture(count: 2). Gesto nevyžaduje kalibraci a funguje v libovolné orientaci ruky.
watchOS 10 představil: SwiftUI Animation s podporou Spring a Keyframe animací, MapKit pro zobrazení map na hodinkách, VideoPlayer pro přehrávání krátkých videí (do 30 sekund), vylepšený VoiceOver s gesty a nové navigační paradigma NavigationStack místo NavigationView.
| API | Účel | Dostupné od |
|---|---|---|
| WidgetKit for watchOS | Widgety pro Smart Stack | watchOS 10 |
| UIDoubleTapGesture | Gesto Double Tap | watchOS 10 (S9+) |
| MapKit | Zobrazení map na hodinkách | watchOS 10 |
| NavigationStack | Nové navigační paradigma | watchOS 10 |
| SwiftUI Keyframe | Snímková animace | watchOS 10 |
SwiftUI — hlavní framework pro vývoj rozhraní na watchOS. Apple doporučuje SwiftUI pro všechny nové projekty od watchOS 7. SwiftUI pro hodinky používá stejné principy jako pro iOS, ale s modifikátory a komponentami specifickými pro watchOS.
SwiftUI pro watchOS zahrnuje: TabView se stylem page pro swipe mezi obrazovkami, DigitalCrownRotation pro zpracování otáčení korunky, SceneStorage pro ukládání stavu mezi spuštěními, WKNotificationScene pro vlastní oznámení a ComplicationDescriptor pro data na ciferníku.
import SwiftUI
import HealthKit
/// Aplikace watchOS pro monitorování pulsu
@main
struct HeartMonitorApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
WKNotificationScene(
controller: NotificationController.self,
category: "heartAlert"
)
}
}
struct ContentView: View {
@State private var heartRate: Double = 0
private let healthStore = HKHealthStore()
var body: some View {
TabView {
HeartRateView(rate: heartRate)
.tabItem { Label("Puls", systemImage: "heart.fill") }
StepsView()
.tabItem { Label("Kroky", systemImage: "figure.walk") }
SettingsView()
.tabItem { Label("Nastavení", systemImage: "gear") }
}
.tabViewStyle(.page)
.onAppear(perform: setupHealthKit)
}
private func setupHealthKit() {
guard HKHealthStore.isHealthDataAvailable() else { return }
let heartType = HKQuantityType(.heartRate)
healthStore.requestAuthorization(toShare: nil, read: [heartType]) { success, error in
guard success else { return }
startHeartRateQuery()
}
}
private func startHeartRateQuery() {
let heartType = HKQuantityType(.heartRate)
let query = HKObserverQuery(sampleType: heartType, predicate: nil) { _, _, error in
guard error == nil else { return }
fetchLatestHeartRate()
}
healthStore.execute(query)
}
private func fetchLatestHeartRate() {
let heartType = HKQuantityType(.heartRate)
let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
let query = HKSampleQuery(sampleType: heartType, predicate: nil,
limit: 1, sortDescriptors: [sort]) { _, samples, _ in
guard let sample = samples?.first as? HKQuantitySample else { return }
let rate = sample.quantity.doubleValue(for: HKUnit(from: "count/min"))
DispatchQueue.main.async { heartRate = rate }
}
healthStore.execute(query)
}
}
struct HeartRateView: View {
let rate: Double
var body: some View {
VStack(spacing: 12) {
Image(systemName: "heart.fill")
.foregroundStyle(.red)
.font(.system(size: 48))
.symbolEffect(.pulse)
Text("\(Int(rate))")
.font(.system(.title, design: .rounded))
.contentTransition(.numericText())
.bold()
Text("bpm")
.font(.caption)
.foregroundStyle(.secondary)
}
}
}Aplikace HeartMonitorApp demonstruje typickou strukturu aplikace watchOS ve SwiftUI: TabView se stylem page pro swipe mezi obrazovkami, integraci s HealthKit pro čtení pulsu v reálném čase, WKNotificationScene pro zpracování oznámení. SymbolEffect s pulse animací využívá hardwarové zrychlení Neural Engine pro plynulou animaci bez zatížení CPU.
Digital Crown — korunka na bočním panelu Apple Watch. SwiftUI poskytuje DigitalCrownRotation pro připojení hodnoty k otáčení korunky. Modifikátor přijímá binding, rozsah a krok. Gesta: tap (dotyk), longPress (dlouhé stisknutí), swipe (přejetí) a pan (tažení) — vše standardní pro SwiftUI a přizpůsobené velikosti obrazovky hodinek.
WatchKit — původní framework pro watchOS používající přístup UIKit. Přestože Apple doporučuje SwiftUI, WatchKit zůstává relevantní pro starší projekty a specifické úkoly: komplexní animace na WKInterfaceGroup a integrace se SiriKit.
Aplikace pro watchOS se skládá ze dvou cílů: WatchKit Extension (logika a rozhraní) a iOS Companion App (nastavení a synchronizace). Od Xcode 15 je možné vytvořit samostatnou aplikaci bez iOS společníka. Rozhraní je popsáno v Interface.storyboard (WatchKit) nebo programově přes SwiftUI.
| Komponenta | WatchKit | SwiftUI |
|---|---|---|
| Obrazovka | WKInterfaceController | View |
| Tlačítko | WKInterfaceButton | Button |
| Tabulka | WKInterfaceTable | List |
| Skupina | WKInterfaceGroup | VStack / HStack |
| Obrázek | WKInterfaceImage | Image / AsyncImage |
| Popisek | WKInterfaceLabel | Text |
| Mapa | WKInterfaceMap | Map (watchOS 10+) |
| Ciferník | CLKComplicationDataSource | ComplicationDescriptor |
Complication — widget zobrazující data na ciferníku Apple Watch. Vývojář implementuje protokol CLKComplicationDataSource a poskytuje šablony pro různé typy ciferníků (circular, rectangular, modular, extraLarge). watchOS 10 podporuje ComplicationDescriptor — zjednodušené API pro SwiftUI. Data jsou aktualizována prostřednictvím Background Tasks s periodou až 30 minut.
Watch Connectivity — framework pro výměnu dat mezi Apple Watch a iPhonem přes Bluetooth nebo Wi-Fi. Jediný způsob komunikace mezi spárovanými zařízeními. WCSession — centrální třída spravující relaci. iOS aplikace a rozšíření watchOS musí implementovat WCSessionDelegate.
Watch Connectivity poskytuje čtyři metody přenosu dat: sendMessage — okamžité odeslání s potvrzením (funguje pouze když jsou obě aplikace aktivní), transferUserInfo — doručení datového slovníku na pozadí, transferFile — přenos souborů s metadaty, updateApplicationContext — synchronizace sdíleného stavu. Všechny metody zaručují doručení při obnovení připojení.
import WatchConnectivity
/// Správce synchronizace mezi iPhonem a Apple Watch
final class ConnectivityManager: NSObject, WCSessionDelegate {
static let shared = ConnectivityManager()
private let session = WCSession.default
override private init() {
super.init()
session.delegate = self
session.activate()
}
// MARK: — Odeslání dat z iPhonu na hodinky
func sendWorkoutData(_ data: [String: Any]) {
guard session.isReachable else {
// Pokud hodinky nejsou k dispozici — uložit do kontextu
try? session.updateApplicationContext(data)
return
}
session.sendMessage(data, replyHandler: nil) { error in
print("Send error: \(error.localizedDescription)")
}
}
// MARK: — Příjem dat na hodinkách
func session(_ session: WCSession,
didReceiveMessage message: [String: Any]) {
DispatchQueue.main.async {
NotificationCenter.default.post(
name: NSNotification.Name("dataReceived"),
object: message
)
}
}
func session(_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?) {
print("WCSession activated: \(activationState.rawValue)")
}
// Na watchOS není vyžadováno, ale povinné pro protokol
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
}ConnectivityManager implementuje singleton pro práci s WCSession. sendWorkoutData kontroluje isReachable: pokud jsou hodinky aktivní, data jsou odeslána okamžitě přes sendMessage; pokud ne — jsou uložena v applicationContext pro odložené doručení. onReceiveMessage na straně příjemce zpracovává příchozí zprávy a upozorňuje aplikaci přes NotificationCenter.
transferFile umožňuje přenos velkých objemů dat: obrázky, zvukové soubory, archivy. Maximální velikost souboru — 100 MB. Soubory jsou uloženy v adresáři Inbox na přijímajícím zařízení. transferUserInfo je vhodný pro JSON data do 100 KB. Všechny metody pracují na pozadí: pokud zařízení není k dispozici, přenos se zařadí do fronty a automaticky se obnoví po obnovení připojení.
Publikování aplikace watchOS se řídí stejnými pravidly jako iOS: vyžaduje se předplatné Apple Developer Program ($99/rok) a absolvování moderace App Review. Aplikace se nahrává do App Store Connect jako součást iOS aplikace nebo jako samostatná aplikace.
Aplikace watchOS může být dodávána dvěma způsoby: jako vestavěné rozšíření iOS aplikace (iOS app bundle obsahuje watchOS .app) nebo jako samostatná aplikace (stahuje se a funguje bez iPhonu). Pro samostatný režim je vyžadováno WKRunsIndependently = YES v Info.plist. Velikost aplikace watchOS je omezena na 50 MB pro stahování přes mobilní síť.
Zvláštní požadavky pro watchOS: aplikace musí správně fungovat bez aktivního iPhonu (pokud je deklarována jako samostatná), rozhraní musí být čitelné bez zvětšení, všechny interaktivní prvky — nejméně 44 bodů velikosti. Zakázány jsou aplikace duplikující funkčnost vestavěných (např. měřič pulsu bez přidané hodnoty).
| Požadavek | Popis |
|---|---|
| Velikost aplikace | Až 50 MB pro mobilní stažení, až 4 GB přes Wi-Fi |
| Samostatný režim | WKRunsIndependently = YES v Info.plist |
| Dotykové cíle | Minimálně 44 pt pro všechny interaktivní prvky |
| Bezpečnost | Data HealthKit nelze odesílat na server bez souhlasu |
| Výkon | Spuštění aplikace ne více než 5 sekund |
Často kladené otázky
Hlavním jazykem je Swift s frameworkem SwiftUI. WatchKit na UIKit je také podporován, ale Apple doporučuje SwiftUI pro všechny nové projekty watchOS. Objective-C se používá pouze ve starších aplikacích vydaných před rokem 2019. Od watchOS 7 všechny příklady Apple používají výhradně SwiftUI.
Od watchOS 6 si Apple Watch mohou instalovat aplikace přímo z App Store bez iPhonu. Mnoho funkcí — synchronizace dat, push oznámení, geolokace — však vyžaduje spárování s iPhonem. Plně autonomní aplikace jsou možné s watchOS 9 a WKRunsIndependently v nastavení sestavení.
Typická výdrž baterie Apple Watch Series 9 — až 18 hodin v smíšeném režimu. Při aktivním používání aplikace s GPS a měřičem pulsu — 5-7 hodin. watchOS 10 optimalizuje spotřebu energie prostřednictvím Smart Stack a BGTaskScheduler, čímž snižuje aktivitu aplikací na pozadí až 4krát ve srovnání s watchOS 9.
Framework Watch Connectivity poskytuje čtyři metody: sendMessage (okamžitý přenos), transferUserInfo (pozadí), transferFile (soubory až 100 MB) a updateApplicationContext (synchronizace stavu). Všechny metody fungují přes Bluetooth nebo Wi-Fi s automatickým zařazením do fronty při ztrátě připojení.
Apple Watch Series 9 a Ultra 2 zahrnují: akcelerometr, gyroskop, optický a elektrický měřič pulsu, SpO2 (saturace), senzor teploty zápěstí, barometr, kompas, GPS L1+L5 a mikrofon. Přístup k senzorům — přes HealthKit a Core Motion. Data pulsu a SpO2 vyžadují výslovný souhlas uživatele.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také