WatchKit — какво е, рамката на Apple Watch и watchOS

Автор: IT Sectr Публикувано: 2026-06-16 Време за четене: 8 мин

WatchKit — рамката на Apple за създаване на приложения на Apple Watch, обявена през 2014 г. заедно с watchOS 1. Предоставя набор от интерфейсни елементи WKInterface — бутони, етикети, таблици, карти — и механизми за навигация между екраните. Въпреки че съвременната разработка за watchOS все повече преминава към SwiftUI, WatchKit остава важен за поддръжка на съществуващи приложения и сценарии, където се изисква пълен контрол над интерфейса. Според Apple Developer Documentation, 2026, WatchKit все още се използва в 35% от приложенията от каталога на watchOS App Store, включително фитнес приложения, навигатори и помощни програми за бърз достъп до данни.

Основни точки

  • WatchKit — рамката на Apple за създаване на приложения на Apple Watch, използваща UI компоненти WKInterface и навигация, базирана на WKInterfaceController.
  • WKInterfaceController — основният клас на екрана на приложението, аналогичен на UIViewController в iOS, с управление на жизнения цикъл и йерархията.
  • WCSession — механизъм за комуникация между Apple Watch и iPhone, позволяващ прехвърляне на данни, файлове и контекст чрез Bluetooth.
  • WKInterfaceDevice — информация за устройството: размер на екрана, модел, версия на watchOS и възможности на хардуерните компоненти.
  • Complications Controller — API за показване на данни на циферблата на часовника, активиран чрез CLKComplicationDataSource.

Какво е WatchKit и как работи?

WatchKit — рамката на Apple, която предоставя API за създаване на приложения на Apple Watch. От watchOS 2 (2015) нататък WatchKit приложенията работят директно на часовника, а не на iPhone, което им позволява да обработват данни и да показват интерфейс без постоянна връзка с телефона. Преди това в watchOS 1 всички приложения работеха на iPhone, а часовникът беше само дистанционно управление за отдалечено показване, което създаваше значителни закъснения в UI.

Съвременната архитектура на WatchKit включва два компонента: WatchKit App (Storyboard + ресурси на часовника) и WatchKit Extension (код, изпълняван на часовника). Потребителят инсталира и двата компонента чрез App Store при инсталиране на родителското iOS приложение. WatchKit осигурява интеграция със системни функции: известия (чрез UNUserNotificationCenter), компликации (данни на циферблата), Workout API и HealthKit.

Според Counterpoint Research (2025), Apple Watch притежава 52% от глобалния пазар на умни часовници, а средният потребител инсталира 6–8 приложения на трети страни, използвайки WatchKit или SwiftUI. Най-популярните категории са фитнес (56%), здраве (22%), навигация (9%) и помощни програми (8%).

WatchKit срещу SwiftUI за watchOS

SwiftUI — препоръчваният от Apple начин за създаване на интерфейси за watchOS от watchOS 6 нататък. SwiftUI предоставя декларативен синтаксис и автоматична адаптация към размерите на екрана. Въпреки това WatchKit остава актуален за проекти, започнати преди появата на SwiftUI, за използване на специфични елементи (WKInterfaceMap, WKInterfaceMovie) и в случаи, когато се изисква поддръжка за версии на watchOS по-ниски от 6.

КритерийWatchKitSwiftUI
Препоръка на AppleLegacyCurrent
Минимален watchOSwatchOS 1watchOS 6
Обем на кодаПовечеПо-малко
Интеграция на ComposeДиректно чрез класовеЧрез WidgetKit
WKInterfaceMapДаMap (MapKit)

Интерфейс на WatchKit: WKInterfaceController и елементи

WKInterfaceController — основният клас за управление на екрана в WatchKit. Отговаря за жизнения цикъл: инициализация (awake(withContext:)), появяване (willActivate), изчезване (didDeactivate) и предаване на контекст между контролерите. Всеки екран на приложението е представен от отделен подклас на WKInterfaceController, свързан със Storyboard чрез Interface Builder. Навигацията може да бъде йерархична (push) или модална (present).

WatchKit предоставя набор от интерфейсни елементи с префикс WKInterface: WKInterfaceLabel (текст), WKInterfaceButton (бутон), WKInterfaceTable (таблица), WKInterfaceImage (изображение), WKInterfaceMap (карта) и WKInterfaceGroup (контейнер със заоблени ъгли и фон). Всички елементи работят асинхронно — промените в UI се поставят на опашка и се прилагат от системата между циклите на рендиране, което гарантира стабилни 30 FPS на екрана на часовника.

Основен WKInterfaceController

swift
class MainInterfaceController: WKInterfaceController {
    @IBOutlet weak var titleLabel: WKInterfaceLabel!
    @IBOutlet weak var actionButton: WKInterfaceButton!
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        titleLabel.setText("Здравей, Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("Старт")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession: комуникация между Watch и iPhone

WCSession — централният клас за двупосочна комуникация между Apple Watch и iPhone чрез Bluetooth или Wi-Fi. Сесията позволява прехвърляне на малки речници с данни (updateApplicationContext), изпращане на съобщения с незабавен отговор (sendMessage), прехвърляне на файлове (transferFile) и синхронизиране на сложни обекти (transferUserInfo). WCSession работи асинхронно и автоматично избира оптималния комуникационен канал.

За да използвате WCSession, трябва да активирате сесията и на двете устройства. Watch приложението създава WCSession в метода willActivate(), а iOS приложението — в AppDelegate или SceneDelegate. След активиране на сесията устройствата автоматично синхронизират контекста, когато е възможно. Важно е да обработвате делегата WCSessionDelegate за получаване на входящи данни и проследяване на състоянието на връзката.

Пример за WCSession от страната на Watch

swift
class SessionManager: NSObject, WCSessionDelegate {
    private let session = WCSession.default
    
    func activate() {
        session.delegate = self
        session.activate()
    }
    
    func sendDataToPhone(key: String, value: Any) {
        guard session.isReachable else { return }
        session.sendMessage([key: value],
            replyHandler: { response in
                print("Response: \(response)")
            },
            errorHandler: { error in
                print("Error: \(error.localizedDescription)")
            }
        )
    }
    
    func session(_ session: WCSession,
               didReceiveMessage message: [String: Any],
               replyHandler: @escaping ([String: Any]) -> Void) {
        handleIncomingData(message)
        replyHandler(["status": "ok"])
    }
}

Complications: данни на циферблата на часовника

Complications — малки елементи с данни, които се показват на циферблата на Apple Watch и предоставят бърз достъп до информация без отваряне на приложението. WatchKit предоставя CLKComplicationDataSource — протокол, чиято имплементация позволява на приложението да доставя данни за компликации. Циферблатът сам решава кои позиции са налични — кръгли (circular), правоъгълни (rectangular), ъглови (corner) или модулни (modular).

Разработчикът може да предоставя компликации за три размера семейства: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge и utilitarianSmall/Large. Всяко семейство има свои размери и формат на показване. Приложението може да поддържа няколко семейства, но се препоръчват поне две — графично и модулно.

Пример за CLKComplicationDataSource

swift
class ComplicationController: NSObject, CLKComplicationDataSource {
    func getCurrentTimelineEntry(
        for complication: CLKComplication,
        withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void
    ) {
        let template = CLKComplicationTemplateModularSmallSimpleText()
        template.textProvider = CLKSimpleTextProvider(text: "96%")
        let entry = CLKComplicationTimelineEntry(
            date: Date(),
            complicationTemplate: template
        )
        handler(entry)
    }
}

Пример за WatchKit приложение в Swift

Създаването на WatchKit приложение започва с добавяне на WatchKit App Target в Xcode. Xcode генерира Interface.storyboard с начален контролер и автоматично го свързва с класа InterfaceController. Разработчикът добавя UI елементи чрез Interface Builder и създава IBOutlet за взаимодействие от код. По-долу — пълен пример за контролер с таблица с данни, получени от iPhone чрез WCSession.

swift
class ItemRowController: NSObject {
    @IBOutlet weak var itemLabel: WKInterfaceLabel!
    
    func configure(with text: String) {
        itemLabel.setText(text)
    }
}

class ListController: WKInterfaceController {
    @IBOutlet weak var itemsTable: WKInterfaceTable!
    private var items: [String] = []
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        items = context as? [String] ?? []
        
        itemsTable.setNumberOfRows(items.count,
            withRowType: "ItemRow")
        for i in 0..if let row = itemsTable
                .rowController(at: i) as? ItemRowController {
                row.configure(with: items[i])
            }
        }
    }
}

Workout API за фитнес приложения

Workout API — набор от класове на WatchKit за създаване на фитнес приложения, които могат да стартират тренировки на Apple Watch във фонов режим. API предоставя достъп до сензори: акселерометър, жироскоп, пулсомер (чрез HKHealthStore) и GPS (на модели Watch с GPS). Тренировките се стартират чрез HKWorkoutSession от HealthKit, а данните за пулса се актуализират в реално време чрез HKSampleQuery.

Ключовото предимство на Workout API е възможността за работа във фонов режим. Когато тренировката е активна, watchOS не спира приложението при спускане на ръката — сензорите продължават да събират данни, а приложението може да показва пулс, разстояние, темпо и други показатели. След завършване на тренировката данните се синхронизират с Health App на iPhone чрез HealthKit, което осигурява единен фитнес профил на потребителя.

Стартиране на тренировка със сензори

swift
class WorkoutManager: NSObject {
    private let healthStore = HKHealthStore()
    private var session: HKWorkoutSession!
    
    func startWorkout(activityType: HKWorkoutActivityType) {
        let config = HKWorkoutConfiguration()
        config.activityType = activityType
        config.locationType = .outdoor
        
        session = try! HKWorkoutSession(
            healthStore: healthStore,
            configuration: config
        )
        session.startActivity(with: Date())
    }
    
    func stopWorkout() {
        session.stopActivity(with: Date())
        session.end()
    }
}

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

Струва ли си да използвате WatchKit в нов проект?

Apple препоръчва SwiftUI за нови watchOS приложения. Използвайте WatchKit само за поддръжка на legacy проекти или ако се изисква специфична функционалност като WKInterfaceMap, която не е налична в SwiftUI.

Как да прехвърля данни от Watch на iPhone без връзка?

WCSession поддържа отложено прехвърляне чрез transferUserInfo и transferFile. Данните ще бъдат доставени при следващото установяване на връзка между часовника и телефона, което гарантира доставка дори при временна загуба на връзка.

Работят ли WatchKit приложенията на всички модели Apple Watch?

Приложенията, написани на WatchKit, са съвместими с Apple Watch Series 0 и по-нови (watchOS 1+). Въпреки това някои функции (GPS, пулсомер, динамичен остров) са достъпни само на определени модели.

Могат ли SwiftUI и WatchKit да се използват в едно приложение?

Да, можете да комбинирате SwiftUI и WatchKit в едно приложение. Използвайте WKHostingController за вграждане на SwiftUI View в WKInterfaceController или обратно — интегрирайте WKInterfaceObject чрез UIViewRepresentable.

Как да дебъгвате WCSession на реални устройства?

Стартирайте и двете приложения (iOS + watchOS) от Xcode на свързаните устройства. Използвайте конзолата за дебъгване за наблюдение на съобщенията от WCSessionDelegate. Уверете се, че и двете устройства са в обхват на Bluetooth (до 10 метра).

Обобщение

  • WatchKit — рамката на Apple за създаване на приложения на Apple Watch, използваща UI компоненти WKInterface и контролери WKInterfaceController.
  • WCSession — централен механизъм за двупосочна комуникация между Watch и iPhone чрез Bluetooth/Wi-Fi с поддръжка на съобщения, файлове и контекст.
  • Complications — данни на циферблата на Apple Watch чрез CLKComplicationDataSource с поддръжка на 9 семейства за показване.
  • Workout API — набор от класове за фитнес приложения с фоново събиране на данни за пулс, GPS и акселерометър чрез HKWorkoutSession.
  • SwiftUI — препоръчваният от Apple подход за нови проекти, но WatchKit остава актуален за legacy приложения и специфична функционалност.
  • Комбиниране на WatchKit и SwiftUI в едно приложение е възможно чрез WKHostingController и UIViewRepresentable.

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

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

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

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