WatchKit — framework-ul Apple pentru crearea aplicațiilor pe Apple Watch, anunțat în 2014 împreună cu watchOS 1. Oferă un set de elemente de interfață WKInterface — butoane, etichete, tabele, hărți — și mecanisme de navigare între ecrane. Deși dezvoltarea modernă pentru watchOS trece tot mai mult la SwiftUI, WatchKit rămâne important pentru suportul aplicațiilor existente și scenariilor care necesită control complet asupra interfeței. Conform Apple Developer Documentation, 2026, WatchKit este încă utilizat în 35% din aplicațiile din catalogul watchOS App Store, inclusiv aplicații de fitness, navigatoare și utilitare pentru acces rapid la date.
Principalele idei
WatchKit — framework Apple care oferă API pentru crearea aplicațiilor pe Apple Watch. Începând cu watchOS 2 (2015), aplicațiile WatchKit rulează direct pe ceas, nu pe iPhone, permițându-le să proceseze date și să afișeze interfața fără o conexiune permanentă cu telefonul. Înainte de aceasta, în watchOS 1, toate aplicațiile rulau pe iPhone, iar ceasul era doar un telecomandă de afișare la distanță, ceea ce crea întârzieri semnificative în UI.
Arhitectura modernă WatchKit include două componente: WatchKit App (Storyboard + resurse pe ceas) și WatchKit Extension (cod executat pe ceas). Utilizatorul instalează ambele componente prin App Store la instalarea aplicației iOS părinte. WatchKit asigură integrarea cu funcțiile sistemului: notificări (prin UNUserNotificationCenter), complicații (date pe cadran), Workout API și HealthKit.
Conform Counterpoint Research (2025), Apple Watch deține 52% din piața globală a ceasurilor inteligente, iar utilizatorul mediu instalează 6–8 aplicații terțe folosind WatchKit sau SwiftUI. Cele mai populare categorii sunt fitness (56%), sănătate (22%), navigare (9%) și utilități (8%).
SwiftUI — metoda recomandată de Apple pentru crearea interfețelor watchOS începând cu watchOS 6. SwiftUI oferă sintaxă declarativă și adaptare automată la dimensiunile ecranului. Totuși, WatchKit rămâne relevant pentru proiecte începute înainte de apariția SwiftUI, pentru utilizarea elementelor specifice (WKInterfaceMap, WKInterfaceMovie) și în cazurile care necesită suport pentru versiuni watchOS mai vechi de 6.
| Criteriu | WatchKit | SwiftUI |
|---|---|---|
| Recomandare Apple | Legacy | Current |
| WatchOS minim | watchOS 1 | watchOS 6 |
| Volum de cod | Mai mult | Mai puțin |
| Integrare Compose | Directă prin clase | Prin WidgetKit |
| WKInterfaceMap | Da | Map (MapKit) |
WKInterfaceController — clasa de bază pentru gestionarea ecranului în WatchKit. Răspunde de ciclul de viață: inițializare (awake(withContext:)), apariție (willActivate), dispariție (didDeactivate) și transmiterea contextului între controlere. Fiecare ecran al aplicației este reprezentat de o subclasă separată WKInterfaceController, legată de Storyboard prin Interface Builder. Navigarea poate fi ierarhică (push) sau modală (present).
WatchKit oferă un set de elemente de interfață cu prefixul WKInterface: WKInterfaceLabel (text), WKInterfaceButton (buton), WKInterfaceTable (tabel), WKInterfaceImage (imagine), WKInterfaceMap (hartă) și WKInterfaceGroup (container cu colțuri rotunjite și fundal). Toate elementele funcționează asincron — modificările UI sunt puse în coadă și aplicate de sistem între ciclurile de randare, garantând 30 FPS stabile pe ecranul ceasului.
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("Salut, Watch!")
}
override func willActivate() {
super.willActivate()
actionButton.setTitle("Start")
}
@IBAction func didTapButton() {
pushController(withName: "DetailController", context: nil)
}
}
WCSession — clasa centrală pentru comunicarea bidirecțională între Apple Watch și iPhone prin Bluetooth sau Wi-Fi. Sesimea permite transmiterea de dicționare mici de date (updateApplicationContext), trimiterea de mesaje cu răspuns imediat (sendMessage), transmiterea de fișiere (transferFile) și sincronizarea obiectelor complexe (transferUserInfo). WCSession funcționează asincron și selectează automat canalul de comunicare optim.
Pentru a folosi WCSession, trebuie activată sesiunea pe ambele dispozitive. Aplicația Watch creează WCSession în metoda willActivate(), iar aplicația iOS — în AppDelegate sau SceneDelegate. După activarea sesiunii, dispozitivele sincronizează automat contextul atunci când este posibil. Este important să gestionați delegatul WCSessionDelegate pentru primirea datelor de intrare și urmărirea stării conexiunii.
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 — elemente mici de date care sunt afișate pe cadranul Apple Watch și oferă acces rapid la informații fără a deschide aplicația. WatchKit oferă CLKComplicationDataSource — un protocol a cărui implementare permite aplicației să furnizeze date pentru complicații. Cadranul decide singur ce poziții sunt disponibile — rotunde (circular), dreptunghiulare (rectangular), colț (corner) sau modulare (modular).
Dezvoltatorul poate furniza complicații pentru trei dimensiuni de familii: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge și utilitarianSmall/Large. Fiecare familie are propriile dimensiuni și format de afișare. Aplicația poate suporta mai multe familii, dar se recomandă cel puțin două — grafică și modulară.
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)
}
}
Crearea unei aplicații WatchKit începe cu adăugarea WatchKit App Target în Xcode. Xcode generează Interface.storyboard cu un controler inițial și îl leagă automat de clasa InterfaceController. Dezvoltatorul adaugă elemente UI prin Interface Builder și creează IBOutlet pentru interacțiunea din cod. Mai jos — un exemplu complet de controler cu un tabel de date primite de pe iPhone prin WCSession.
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 — un set de clase WatchKit pentru crearea aplicațiilor de fitness care pot rula antrenamente pe Apple Watch în fundal. API oferă acces la senzori: accelerometru, giroscop, pulsmetru (prin HKHealthStore) și GPS (pe modelele Watch cu GPS). Antrenamentele sunt lansate prin HKWorkoutSession din HealthKit, iar datele pulsului sunt actualizate în timp real prin HKSampleQuery.
Avantajul cheie al Workout API este posibilitatea de a lucra în fundal. Când antrenamentul este activ, watchOS nu întrerupe aplicația la coborârea mâinii — senzorii continuă să colecteze date, iar aplicația poate afișa pulsul, distanța, ritmul și alte metrici. După încheierea antrenamentului, datele sunt sincronizate cu Health App pe iPhone prin HealthKit, asigurând un profil de fitness unificat al utilizatorului.
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()
}
}
Întrebări frecvente
Apple recomandă SwiftUI pentru aplicațiile noi watchOS. Folosiți WatchKit doar pentru suportul proiectelor legacy sau dacă este necesară o funcționalitate specifică precum WKInterfaceMap, indisponibilă în SwiftUI.
WCSession suportă transmiterea întârziată prin transferUserInfo și transferFile. Datele vor fi livrate la următoarea stabilire a conexiunii între ceas și telefon, garantând livrarea chiar și în cazul pierderii temporare a conexiunii.
Aplicațiile scrise în WatchKit sunt compatibile cu Apple Watch Series 0 și mai noi (watchOS 1+). Cu toate acestea, unele funcții (GPS, pulsmetru, insulă dinamică) sunt disponibile doar pe anumite modele.
Da, puteți combina SwiftUI și WatchKit în aceeași aplicație. Folosiți WKHostingController pentru încorporarea unei vederi SwiftUI în WKInterfaceController sau invers — integrați WKInterfaceObject prin UIViewRepresentable.
Rulați ambele aplicații (iOS + watchOS) din Xcode pe dispozitivele conectate. Folosiți consola de depanare pentru a observa mesajele WCSessionDelegate. Asigurați-vă că ambele dispozitive se află în raza Bluetooth (până la 10 metri).
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și