watchOS: основи на разработката за Apple Watch със SwiftUI

Автор: IT Sectr Публикувано: 2026-02-07 Време за четене: 12 мин

watchOS — операционната система на Apple за Apple Watch, пусната за първи път през 2015 г. заедно с първите часовници. Разработката на приложения за watchOS се извършва на Swift с използване на SwiftUI и WatchKit. Характеристики: малък правоъгълен екран, ограничена консумация на енергия от акумулатора 0,3 Wh и тясна интеграция с iPhone чрез Bluetooth. Според данни на Counterpoint Research, Apple Watch заема над 30% от световния пазар на умни часовници.

Основни моменти

  • watchOS — операционна система за Apple Watch на XNU ядро, ориентирана към ниска консумация на енергия
  • SwiftUI — основната рамка за разработка на интерфейси на watchOS приложения
  • Watch Connectivity — механизъм за обмен на данни между Apple Watch и iPhone
  • Smart Stack — интелигентен стек от джаджи, представен в watchOS 10
  • HealthKit — рамка за достъп до сензори: пулс, SpO2, температура, акселерометър

Какво е watchOS?

watchOS — операционната система за умните часовници на Apple, базирана на XNU Darwin ядрото. Пусната за първи път на 24 април 2015 г. заедно с Apple Watch Series 0. Системата е изградена върху същата архитектура като iOS, но оптимизирана за малък дисплей (1,5 до 1,9 инча), ограничена памет (до 1 GB RAM в Series 9) и минимална консумация на енергия.

Според StatCounter (2026), watchOS заема около 55% от пазара на операционни системи за умни часовници, изпреварвайки Wear OS и патентованите системи на китайски производители. Apple пуска ежегодни големи актуализации на watchOS, поддържайки часовниците до 5 години от пускането им.

Ключовата характеристика на watchOS — зависимостта от iPhone. Повечето приложения използват Watch Connectivity за синхронизация на данни. От watchOS 6 насам часовниците могат да инсталират приложения директно от App Store, но пълна автономност без iPhone се поддържа едва от watchOS 9.

История на версиите на watchOS

Първата версия Watch OS 1.0 не поддържаше приложения на трети страни — само предварително инсталирани Apple приложения. watchOS 2 (2015) отвори SDK за разработчици. watchOS 3 (2016) ускори стартирането на приложения 7 пъти. watchOS 6 (2019) представи App Store на часовника. watchOS 9 (2022) добави лекарства и подобрено проследяване на съня. watchOS 10 (2023) стана най-голямата актуализация на интерфейса от пускането насам.

Версия на watchOSГодинаКлючово нововъведение
Watch OS 12015Първа версия, само родни Apple приложения
watchOS 22015Отворен SDK, приложения на трети страни, Watch Connectivity
watchOS 32016Мигновено стартиране на приложения, Dock, Scribble
watchOS 62019App Store на часовника, Cycle Tracking, Noise приложение
watchOS 92022Лекарства, фази на съня, подобрен спътник за бягане
watchOS 102023Smart Stack, Double Tap, нови циферблати

Архитектура на watchOS

Архитектурата на watchOS се състои от три нива, които изолират хардуера от потребителските приложения. За разлика от iOS, watchOS използва компонентен подход: приложението се състои от две цели — разширение (extension) и хост на iPhone.

Ядро и системни услуги

Долното ниво — модифицирано XNU ядро с драйвери за S4/S5/S6/S7/S8/S9 Apple чипове. В Apple Watch Series 9 се използва S9 SiP с 5,6 милиарда транзистора и 4-ядрен Neural Engine. Системните услуги включват Core Bluetooth, Watch Connectivity, HealthKit и Core Motion. Всички фонови задачи се управляват от BGTaskScheduler — системен планировчик, оптимизиращ консумацията на енергия.

WatchKit — слой за приложения

WatchKit — рамка за създаване на интерфейси на watchOS приложения. Включва WKInterfaceController, WKInterfaceGroup, WKInterfaceLabel и WKInterfaceButton. От watchOS 6 Apple препоръчва SwiftUI вместо WatchKit. SwiftUI предоставя същите възможности, но с декларативен синтаксис и автоматична адаптация към размера на екрана: 38 mm (272×340), 42 mm (312×390), 40 mm (324×394), 44 mm (368×448), 45 mm (396×484), 49 mm (410×502 в Apple Watch Ultra).

Фонови режими и консумация на енергия

watchOS ограничава фоновата работа на приложенията за пестене на батерията. Налични фонови режими: Workout (тренировки), HealthKit (мониторинг на здравето), Location (геолокация), Audio (аудио плейър) и Complication (данни на циферблата). Всеки режим изисква отделна capability в entitlements. Типична консумация на енергия: активно приложение — 50-80 mA, фонов режим — 5-15 mA, режим на готовност — 1-3 mA.

swift
import BackgroundTasks
import WatchKit

/// Планиране на фонова актуализация на данни на 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)
            }
        }
    }
}

/// Регистриране на фонова задача в 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 гарантира, че фоновите задачи се изпълняват в оптимални моменти — когато часовникът е на зарядно и е свързан с iPhone. WKExtensionDelegate обработва входящите фонови задачи и актуализира данните на циферблата. ComplicationController.reloadComplications актуализира джаджите на избрания циферблат.

watchOS 10: Smart Stack и Double Tap

watchOS 10 — най-голямата актуализация на интерфейса в историята на платформата, пусната през септември 2023 г. Системата премина от йерархична навигация към съдържателно-ориентирана навигация: основният екран стана Smart Stack — интелигентен стек от джаджи, който замени дока на приложенията.

Smart Stack

Smart Stack — вертикален списък от джаджи, показван под циферблата. Джаджите се класират според контекста: сутрин се показват времето и календарът, през деня — активност и напомняния, вечер — медитация и подготовка за сън. Разработчикът може да добавя персонализирани джаджи чрез WidgetKit за watchOS, използвайки същите API като за iOS 17.

Double Tap

Double Tap — жест на събиране на показалеца и палеца, разпознаван от акселерометъра и жироскопа без докосване на екрана. В Apple Watch Series 9 и Ultra 2 жестът се изпълнява на хардуерно ниво чрез Neural Engine. Разработчикът получава събитието чрез UIDoubleTapGestureRecognizer или чрез SwiftUI модификатора .onTapGesture(count: 2). Жестът не изисква калибриране и работи във всяка ориентация на ръката.

Нови API за разработчици

watchOS 10 представи: SwiftUI Animation с поддръжка на Spring и Keyframe анимации, MapKit за показване на карти на часовника, VideoPlayer за възпроизвеждане на кратки видеа (до 30 секунди), подобрен VoiceOver с жестове и нова навигационна парадигма NavigationStack вместо NavigationView.

APIПредназначениеДостъпно от
WidgetKit for watchOSДжаджи за Smart StackwatchOS 10
UIDoubleTapGestureDouble Tap жестwatchOS 10 (S9+)
MapKitПоказване на карти на часовникаwatchOS 10
NavigationStackНова навигационна парадигмаwatchOS 10
SwiftUI KeyframeКадрова анимацияwatchOS 10

SwiftUI за Apple Watch

SwiftUI — основната рамка за разработка на интерфейси на watchOS. Apple препоръчва SwiftUI за всички нови проекти от watchOS 7. SwiftUI за часовници използва същите принципи като за iOS, но с watchOS-специфични модификатори и компоненти.

WatchOS-специфични SwiftUI компоненти

SwiftUI за watchOS включва: TabView с page-стил за плъзгане между екрани, DigitalCrownRotation за обработка на въртене на коронката, SceneStorage за запазване на състоянието между стартирания, WKNotificationScene за персонализирани известия и ComplicationDescriptor за данни на циферблата.

swift
import SwiftUI
import HealthKit

/// watchOS приложение за мониторинг на пулс
@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("Пулс", systemImage: "heart.fill") }

            StepsView()
                .tabItem { Label("Стъпки", systemImage: "figure.walk") }

            SettingsView()
                .tabItem { Label("Настройки", 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("уд/мин")
                .font(.caption)
                .foregroundStyle(.secondary)
        }
    }
}

Приложението HeartMonitorApp демонстрира типичната структура на watchOS приложение в SwiftUI: TabView с page-стил за плъзгане между екрани, интеграция с HealthKit за отчитане на пулс в реално време, WKNotificationScene за обработка на известия. SymbolEffect с pulse-анимация използва хардуерното ускорение на Neural Engine за гладка анимация без натоварване на CPU.

Digital Crown и жестове

Digital Crown — коронката на страничния панел на Apple Watch. SwiftUI предоставя DigitalCrownRotation за свързване на стойност с въртенето на коронката. Модификаторът приема binding, диапазон и стъпка. Жестове: tap (докосване), longPress (продължително натискане), swipe (плъзгане) и pan (влачене) — всички стандартни за SwiftUI и адаптирани към размера на екрана на часовника.

WatchKit и компоненти на watchOS приложение

WatchKit — оригиналната рамка за watchOS, която използва UIKit подход. Въпреки че Apple препоръчва SwiftUI, WatchKit остава актуален за стари проекти и специфични задачи: сложни анимации на WKInterfaceGroup и интеграция с SiriKit.

Структура на watchOS приложение

Приложението за watchOS се състои от две цели: WatchKit Extension (логика и интерфейс) и iOS Companion App (настройки и синхронизация). От Xcode 15 е възможно създаването на standalone приложение без iOS компаньон. Интерфейсът се описва в Interface.storyboard (WatchKit) или програмно чрез SwiftUI.

КомпонентWatchKitSwiftUI
ЕкранWKInterfaceControllerView
БутонWKInterfaceButtonButton
ТаблицаWKInterfaceTableList
ГрупаWKInterfaceGroupVStack / HStack
ИзображениеWKInterfaceImageImage / AsyncImage
ЕтикетWKInterfaceLabelText
КартаWKInterfaceMapMap (watchOS 10+)
ЦиферблатCLKComplicationDataSourceComplicationDescriptor

Complications — данни на циферблата

Complication — джаджа, показваща данни на циферблата на Apple Watch. Разработчикът имплементира протокола CLKComplicationDataSource, предоставяйки шаблони за различни типове циферблати (circular, rectangular, modular, extraLarge). watchOS 10 поддържа ComplicationDescriptor — опростен API за SwiftUI. Данните се актуализират чрез Background Tasks с период до 30 минути.

Интеграция с iPhone чрез Watch Connectivity

Watch Connectivity — рамка за обмен на данни между Apple Watch и iPhone чрез Bluetooth или Wi-Fi. Единственият начин за комуникация между сдвоени устройства. WCSession — централният клас, управляващ сесията. iOS приложението и watchOS разширението трябва да имплементират WCSessionDelegate.

Методи за предаване на данни

Watch Connectivity предоставя четири метода за предаване на данни: sendMessage — незабавно изпращане с потвърждение (работи само когато и двете приложения са активни), transferUserInfo — фонова доставка на речник от данни, transferFile — прехвърляне на файлове с метаданни, updateApplicationContext — синхронизация на споделено състояние. Всички методи гарантират доставка при възстановяване на връзката.

swift
import WatchConnectivity

/// Мениджър за синхронизация между iPhone и 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: — Изпращане на данни от iPhone към часовника
    func sendWorkoutData(_ data: [String: Any]) {
        guard session.isReachable else {
            // Ако часовникът не е наличен — запазваме в контекста
            try? session.updateApplicationContext(data)
            return
        }
        session.sendMessage(data, replyHandler: nil) { error in
            print("Send error: \(error.localizedDescription)")
        }
    }

    // MARK: — Получаване на данни на часовника
    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)")
    }

    // Не се изисква на watchOS, но е задължително за протокола
    func sessionDidBecomeInactive(_ session: WCSession) {}
    func sessionDidDeactivate(_ session: WCSession) {
        session.activate()
    }
}

ConnectivityManager имплементира сингълтън за работа с WCSession. sendWorkoutData проверява isReachable: ако часовникът е активен, данните се изпращат незабавно чрез sendMessage; ако не — се запазват в applicationContext за отложена доставка. onReceiveMessage от страна на получателя обработва входящите съобщения и уведомява приложението чрез NotificationCenter.

Файлов обмен и синхронизация

transferFile позволява прехвърляне на големи обеми данни: изображения, аудио файлове, архиви. Максимален размер на файла — 100 MB. Файловете се запазват в директорията Inbox на приемащото устройство. transferUserInfo е подходящ за JSON данни до 100 KB. Всички методи работят на заден план: ако устройството не е налично, предаването се поставя на опашка и автоматично се възобновява при възстановяване на връзката.

Публикуване на watchOS приложения

Публикуването на watchOS приложение следва същите правила като iOS: изисква се абонамент за Apple Developer Program ($99/година) и преминаване през модерация на App Review. Приложението се качва в App Store Connect като част от iOS приложение или като standalone приложение.

Изграждане и дистрибуция

watchOS приложението може да бъде доставено по два начина: като вградено разширение на iOS приложение (iOS app bundle съдържа watchOS .app) или като standalone приложение (изтегля се и работи без iPhone). За standalone режим е необходимо WKRunsIndependently = YES в Info.plist. Размерът на watchOS приложението е ограничен до 50 MB за изтегляне по мобилна мрежа.

Изисквания на App Review

Специфични изисквания за watchOS: приложението трябва да работи коректно без активен iPhone (ако е декларирано като standalone), интерфейсът трябва да бъде четим без увеличение, всички интерактивни елементи — най-малко 44 точки на размер. Забранени са приложения, дублиращи функционалността на вградените (например пулсомер без добавена стойност).

ИзискванеОписание
Размер на приложениетоДо 50 MB за мобилно изтегляне, до 4 GB чрез Wi-Fi
Standalone режимWKRunsIndependently = YES в Info.plist
Touch целиМинимум 44 pt за всички интерактивни елементи
СигурностДанните от HealthKit не могат да се предават на сървър без съгласие
ПроизводителностСтартиране на приложението не повече от 5 секунди

Често задавани въпроси

Какви езици се използват за разработка на watchOS?

Основният език е Swift с рамката SwiftUI. WatchKit на UIKit също се поддържа, но Apple препоръчва SwiftUI за всички нови watchOS проекти. Objective-C се използва само в стари приложения, пуснати преди 2019 г. От watchOS 7 всички примери на Apple използват изключително SwiftUI.

Необходим ли е iPhone за работа на watchOS приложение?

От watchOS 6 Apple Watch може да инсталира приложения директно от App Store без iPhone. Много функции — синхронизация на данни, push известия, геолокация — обаче изискват сдвояване с iPhone. Напълно автономни приложения са възможни с watchOS 9 и WKRunsIndependently в настройките за компилиране.

Каква е автономността на Apple Watch с активно приложение?

Типичната автономност на Apple Watch Series 9 — до 18 часа в смесен режим. При активно използване на приложение с GPS и пулсомер — 5-7 часа. watchOS 10 оптимизира консумацията на енергия чрез Smart Stack и BGTaskScheduler, намалявайки фоновата активност на приложенията до 4 пъти в сравнение с watchOS 9.

Как да прехвърляме данни между iPhone и Apple Watch?

Рамката Watch Connectivity предоставя четири начина: sendMessage (незабавно прехвърляне), transferUserInfo (фон), transferFile (файлове до 100 MB) и updateApplicationContext (синхронизация на състояние). Всички методи работят чрез Bluetooth или Wi-Fi с автоматично поставяне на опашка при загуба на връзка.

Какви сензори са налични на Apple Watch?

Apple Watch Series 9 и Ultra 2 включват: акселерометър, жироскоп, оптичен и електрически пулсомер, SpO2 (сатурация), сензор за температура на китката, барометър, компас, GPS L1+L5 и микрофон. Достъп до сензорите — чрез HealthKit и Core Motion. Данните за пулс и SpO2 изискват изрично разрешение от потребителя.

Обобщение

  • watchOS — операционната система на Apple за умни часовници на XNU ядро с фокус върху енергийната ефективност и интеграцията с iPhone
  • SwiftUI — основната рамка за watchOS, осигуряваща декларативно оформление и автоматична адаптация към размера на екрана
  • watchOS 10 представи Smart Stack, Double Tap (S9+), NavigationStack и WidgetKit за джаджи
  • Watch Connectivity — единственият комуникационен канал с iPhone чрез Bluetooth/Wi-Fi с четири режима на предаване
  • HealthKit предоставя достъп до сензорите на Apple Watch: пулс, SpO2, температура, акселерометър, GPS
  • Complications — джаджи на циферблата, имплементирани чрез CLKComplicationDataSource или SwiftUI
  • Публикуване изисква Apple Developer Program, размер до 50 MB (мобилен) и строг контрол на производителността

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също