watchOS: základy vývoje pro Apple Watch se SwiftUI

Autor: IT Sectr Publikováno: 2026-02-07 Doba čtení: 12 min

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 — OS pro Apple Watch na jádře XNU zaměřený na nízkou spotřebu energie
  • SwiftUI — hlavní framework pro vývoj rozhraní aplikací watchOS
  • Watch Connectivity — mechanismus výměny dat mezi Apple Watch a iPhonem
  • Smart Stack — inteligentní zásobník widgetů představený v watchOS 10
  • HealthKit — framework pro přístup k senzorům: puls, SpO2, teplota, akcelerometr

Co je watchOS?

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.

Historie verzí watchOS

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 watchOSRokKlíčová inovace
Watch OS 12015První verze, pouze nativní aplikace Apple
watchOS 22015Otevřené SDK, aplikace třetích stran, Watch Connectivity
watchOS 32016Okamžité spouštění aplikací, Dock, Scribble
watchOS 62019App Store na hodinkách, Cycle Tracking, Noise aplikace
watchOS 92022Léky, fáze spánku, vylepšený společník pro běh
watchOS 102023Smart Stack, Double Tap, nové ciferníky

Architektura watchOS

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.

Jádro a systémové služby

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 — aplikační vrstva

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).

Režimy na pozadí a spotřeba energie

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.

swift
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: Smart Stack a Double Tap

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

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

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.

Nová API pro vývojáře

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ÚčelDostupné od
WidgetKit for watchOSWidgety pro Smart StackwatchOS 10
UIDoubleTapGestureGesto Double TapwatchOS 10 (S9+)
MapKitZobrazení map na hodinkáchwatchOS 10
NavigationStackNové navigační paradigmawatchOS 10
SwiftUI KeyframeSnímková animacewatchOS 10

SwiftUI pro Apple Watch

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.

Komponenty SwiftUI specifické 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.

swift
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 a gesta

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 a komponenty aplikace watchOS

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.

Struktura aplikace watchOS

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.

KomponentaWatchKitSwiftUI
ObrazovkaWKInterfaceControllerView
TlačítkoWKInterfaceButtonButton
TabulkaWKInterfaceTableList
SkupinaWKInterfaceGroupVStack / HStack
ObrázekWKInterfaceImageImage / AsyncImage
PopisekWKInterfaceLabelText
MapaWKInterfaceMapMap (watchOS 10+)
CiferníkCLKComplicationDataSourceComplicationDescriptor

Complications — data na ciferníku

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.

Integrace s iPhonem přes Watch Connectivity

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.

Metody přenosu dat

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í.

swift
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.

Výměna souborů a synchronizace

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í aplikací watchOS

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.

Sestavení a distribuce

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íť.

Požadavky App Review

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žadavekPopis
Velikost aplikaceAž 50 MB pro mobilní stažení, až 4 GB přes Wi-Fi
Samostatný režimWKRunsIndependently = YES v Info.plist
Dotykové cíleMinimálně 44 pt pro všechny interaktivní prvky
BezpečnostData HealthKit nelze odesílat na server bez souhlasu
VýkonSpuštění aplikace ne více než 5 sekund

Často kladené otázky

Jaké jazyky se používají pro vývoj watchOS?

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.

Je pro fungování aplikace watchOS vyžadován iPhone?

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í.

Jaká je výdrž baterie Apple Watch s aktivní aplikací?

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.

Jak přenášet data mezi iPhonem a Apple Watch?

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í.

Jaké senzory jsou k dispozici na Apple Watch?

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í

  • watchOS — operační systém Apple pro chytré hodinky na jádře XNU zaměřený na energetickou účinnost a integraci s iPhonem
  • SwiftUI — hlavní framework pro watchOS poskytující deklarativní rozvržení a automatickou adaptaci na velikost obrazovky
  • watchOS 10 představil Smart Stack, Double Tap (S9+), NavigationStack a WidgetKit pro widgety
  • Watch Connectivity — jediný komunikační kanál s iPhonem přes Bluetooth/Wi-Fi se čtyřmi režimy přenosu
  • HealthKit poskytuje přístup k senzorům Apple Watch: puls, SpO2, teplota, akcelerometr, GPS
  • Complications — widgety na ciferníku implementované přes CLKComplicationDataSource nebo SwiftUI
  • Publikování vyžaduje Apple Developer Program, velikost do 50 MB (mobil) a přísnou kontrolu výkonu

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í.

Prodiskutovat projekt

Přečtěte si také