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 vs SwiftUI за watchOS

SwiftUI — препоручени Apple-ов начин креирања интерфејса за watchOS почев од watchOS 6. SwiftUI пружа декларативну синтаксу и аутоматску адаптацију на величине екрана. Међутим, WatchKit остаје релевантан за пројекте започете пре појаве SwiftUI, за коришћење специфичних елемената (WKInterfaceMap, WKInterfaceMovie) и у случајевима када је потребна подршка за watchOS верзије старије од 6.

КритеријумWatchKitSwiftUI
Препорука Apple-аLegacyCurrent
Минимални 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође