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 |
| Обсяг коду | Більше | Менше |
| Інтеграція комплікацій | Пряма через класи | Через 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, пульсометр, Dynamic Island) доступні тільки на певних моделях.
Так, можна комбінувати SwiftUI та WatchKit в одному додатку. Використовуйте WKHostingController для вбудовування SwiftUI View у WKInterfaceController або навпаки — інтегруйте WKInterfaceObject через UIViewRepresentable.
Запустіть обидва додатки (iOS + watchOS) з Xcode на підключених пристроях. Використовуйте консоль налагодження для спостереження за повідомленнями WCSessionDelegate. Переконайтеся, що обидва пристрої знаходяться в радіусі дії Bluetooth (до 10 метрів).
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.