WatchKit — рамката на Apple за създаване на приложения на Apple Watch, обявена през 2014 г. заедно с watchOS 1. Предоставя набор от интерфейсни елементи WKInterface — бутони, етикети, таблици, карти — и механизми за навигация между екраните. Въпреки че съвременната разработка за watchOS все повече преминава към SwiftUI, WatchKit остава важен за поддръжка на съществуващи приложения и сценарии, където се изисква пълен контрол над интерфейса. Според Apple Developer Documentation, 2026, WatchKit все още се използва в 35% от приложенията от каталога на watchOS App Store, включително фитнес приложения, навигатори и помощни програми за бърз достъп до данни.
Основни точки
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%).
SwiftUI — препоръчваният от Apple начин за създаване на интерфейси за watchOS от watchOS 6 нататък. SwiftUI предоставя декларативен синтаксис и автоматична адаптация към размерите на екрана. Въпреки това WatchKit остава актуален за проекти, започнати преди появата на SwiftUI, за използване на специфични елементи (WKInterfaceMap, WKInterfaceMovie) и в случаи, когато се изисква поддръжка за версии на watchOS по-ниски от 6.
| Критерий | WatchKit | SwiftUI |
|---|---|---|
| Препоръка на Apple | Legacy | Current |
| Минимален watchOS | watchOS 1 | watchOS 6 |
| Обем на кода | Повече | По-малко |
| Интеграция на Compose | Директно чрез класове | Чрез WidgetKit |
| WKInterfaceMap | Да | Map (MapKit) |
WKInterfaceController — основният клас за управление на екрана в WatchKit. Отговаря за жизнения цикъл: инициализация (awake(withContext:)), появяване (willActivate), изчезване (didDeactivate) и предаване на контекст между контролерите. Всеки екран на приложението е представен от отделен подклас на WKInterfaceController, свързан със Storyboard чрез Interface Builder. Навигацията може да бъде йерархична (push) или модална (present).
WatchKit предоставя набор от интерфейсни елементи с префикс WKInterface: WKInterfaceLabel (текст), WKInterfaceButton (бутон), WKInterfaceTable (таблица), WKInterfaceImage (изображение), WKInterfaceMap (карта) и WKInterfaceGroup (контейнер със заоблени ъгли и фон). Всички елементи работят асинхронно — промените в UI се поставят на опашка и се прилагат от системата между циклите на рендиране, което гарантира стабилни 30 FPS на екрана на часовника.
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 — централният клас за двупосочна комуникация между Apple Watch и iPhone чрез Bluetooth или Wi-Fi. Сесията позволява прехвърляне на малки речници с данни (updateApplicationContext), изпращане на съобщения с незабавен отговор (sendMessage), прехвърляне на файлове (transferFile) и синхронизиране на сложни обекти (transferUserInfo). WCSession работи асинхронно и автоматично избира оптималния комуникационен канал.
За да използвате WCSession, трябва да активирате сесията и на двете устройства. Watch приложението създава WCSession в метода willActivate(), а iOS приложението — в AppDelegate или SceneDelegate. След активиране на сесията устройствата автоматично синхронизират контекста, когато е възможно. Важно е да обработвате делегата WCSessionDelegate за получаване на входящи данни и проследяване на състоянието на връзката.
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 — малки елементи с данни, които се показват на циферблата на Apple Watch и предоставят бърз достъп до информация без отваряне на приложението. WatchKit предоставя CLKComplicationDataSource — протокол, чиято имплементация позволява на приложението да доставя данни за компликации. Циферблатът сам решава кои позиции са налични — кръгли (circular), правоъгълни (rectangular), ъглови (corner) или модулни (modular).
Разработчикът може да предоставя компликации за три размера семейства: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge и utilitarianSmall/Large. Всяко семейство има свои размери и формат на показване. Приложението може да поддържа няколко семейства, но се препоръчват поне две — графично и модулно.
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 приложение започва с добавяне на WatchKit App Target в Xcode. Xcode генерира Interface.storyboard с начален контролер и автоматично го свързва с класа InterfaceController. Разработчикът добавя UI елементи чрез Interface Builder и създава IBOutlet за взаимодействие от код. По-долу — пълен пример за контролер с таблица с данни, получени от iPhone чрез 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 — набор от класове на WatchKit за създаване на фитнес приложения, които могат да стартират тренировки на Apple Watch във фонов режим. API предоставя достъп до сензори: акселерометър, жироскоп, пулсомер (чрез HKHealthStore) и GPS (на модели Watch с GPS). Тренировките се стартират чрез HKWorkoutSession от HealthKit, а данните за пулса се актуализират в реално време чрез HKSampleQuery.
Ключовото предимство на Workout API е възможността за работа във фонов режим. Когато тренировката е активна, watchOS не спира приложението при спускане на ръката — сензорите продължават да събират данни, а приложението може да показва пулс, разстояние, темпо и други показатели. След завършване на тренировката данните се синхронизират с Health App на iPhone чрез HealthKit, което осигурява единен фитнес профил на потребителя.
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()
}
}
Често задавани въпроси
Apple препоръчва SwiftUI за нови watchOS приложения. Използвайте WatchKit само за поддръжка на legacy проекти или ако се изисква специфична функционалност като WKInterfaceMap, която не е налична в SwiftUI.
WCSession поддържа отложено прехвърляне чрез transferUserInfo и transferFile. Данните ще бъдат доставени при следващото установяване на връзка между часовника и телефона, което гарантира доставка дори при временна загуба на връзка.
Приложенията, написани на WatchKit, са съвместими с Apple Watch Series 0 и по-нови (watchOS 1+). Въпреки това някои функции (GPS, пулсомер, динамичен остров) са достъпни само на определени модели.
Да, можете да комбинирате SwiftUI и WatchKit в едно приложение. Използвайте WKHostingController за вграждане на SwiftUI View в WKInterfaceController или обратно — интегрирайте WKInterfaceObject чрез UIViewRepresentable.
Стартирайте и двете приложения (iOS + watchOS) от Xcode на свързаните устройства. Използвайте конзолата за дебъгване за наблюдение на съобщенията от WCSessionDelegate. Уверете се, че и двете устройства са в обхват на Bluetooth (до 10 метра).
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също