Розробка Apple Watch приложення (watchOS)
watchOS-додаток — це окремий таргет зі своїм життєвим циклом, обмеженими ресурсами та специфічними паттернами взаємодії. Годинник — самостійний пристрій з watchOS 7+, додаток працює без iPhone поруч. Але архітектура даних та синхронізація між iPhone та Watch — головна складність, з якою стикаються при розробці.
Стек технологій
SwiftUI — єдиний рекомендуваний UI-фреймворк для watchOS 7+. WatchKit Views (WKInterfaceController) офіційно застарілі, хоча все ще працюють. Нові додатки — тільки SwiftUI.
@main на App struct, WindowGroup — стандартна точка входу як на iOS. Але NavigationSplitView на часах не працює — тільки NavigationStack.
HealthKit, CoreMotion, CoreLocation, CoreML — доступні на Watch нативно. URLSession — є, але на часах у фоні не працює: мережеві запити лише поки додаток активний або через WKExtendedRuntimeSession.
WatchConnectivity: синхронізація з iPhone
WCSession — канал зв'язку між програмами на iPhone та Watch. Не між пристроями в цілому, а саме між додатками.
Три механізми передачі даних:
sendMessage — миттєва передача, лише коли обидва додатки активні:
WCSession.default.sendMessage(["action": "fetchData"], replyHandler: { reply in
// Відповідь від iPhone
}, errorHandler: { error in
// Обробка помилки (Watch недоступен)
})
updateApplicationContext — словник, доставляється при наступному запуску, перезаписується новим значенням:
try WCSession.default.updateApplicationContext(["lastSync": Date().timeIntervalSince1970])
Хорошо підходить для поточного стану (активна тренування, останні налаштування).
transferUserInfo — черга словників, доставляються гарантовано по порядку, не перезаписуються. Для логу подій, транзакцій.
Часта помилка: використовувати sendMessage для передачи даних коли Watch у фоні. sendMessage вимагає, щоб Watch-додаток був активний у foreground. Для фонової доставки — лише updateApplicationContext або transferUserInfo.
Перевірка досяжності: WCSession.default.isReachable — але це стан асинхронний. Додаток може отримати true, відправити повідомлення, а Watch піти в сон до отримання. Завжди обробляйте errorHandler.
Complications: дані на циферблаті
Complications — елементи на циферблаті годинника. З ClockKit (застарілий) → тепер WidgetKit, аналогічний iOS. ComplicationConfiguration через WidgetConfiguration той же API що й iOS віджети.
CLKComplication сімейства: .circularSmall, .modularSmall, .modularLarge, .utilitarianSmall, .utilitarianLarge, .graphicCorner, .graphicBezel, .graphicCircular, .graphicRectangular, .graphicExtraLarge.
Timeline в Complication працює як iOS WidgetKit: TimelineProvider, заздалегідь заповнені TimelineEntry. Годинник знає, що показати на наступні кілька годин — економія батареї.
CLKComplicationDataSource.getPrivacyBehavior — що показувати на заблокованому циферблаті. hideOnLockScreen — приховати дані, показати порожню комплекцію.
Background Modes на watchOS
WKExtendedRuntimeSession — до 60 хвилин фонової роботи для специфічних сценаріїв:
-
workout— тренування (необмежений час з активним WorkoutSession) -
selfCare— медитація, дихальні вправи (до 10 хвилин після екрану) -
alarm— будильник (вимагає дозволу користувача) -
sleepTracking— відстеження сну (ніч)
Для трекингу тренування: HKWorkoutSession + HKLiveWorkoutBuilder — офіційний API. Без HKWorkoutSession система агресивно вбиває фонові процеси.
Мережеві запити у фоні: URLSession з фоновою конфігурацією на watchOS не підтримується. Дані з сети у фоні — лише через iPhone (WatchConnectivity) або при наступному foreground-запуску.
UX-особливості, які важливо урахувати
Екран маленький: Series 4+ — 44mm (368×448pt retina). Мінімальний touch target — 44pt. Список рядків без складної ієрархії — переважна навігація. Digital Crown — прокрутка контенту, zoom у MapKit, введення значень через Stepper або Picker з кастомним стилем.
onLongPressGesture — працює, але вимагає 0.8 секунд за замовчуванням. На маленькому екрані — часто випадкові спрацьовування.
Haptic feedback через WKInterfaceDevice.current().play(.click) — важливий UX-елемент на Watch, де візуальні відповіді обмежені.
Тестування
Watch Simulator — для базового UI. Фізичні годинники обов'язкові для: GPS, HealthKit, датчиків серцебиття, Digital Crown tactile feedback, продуктивності на реальному залізі. Series 4 та Series 9 ведуть себе по-різному по продуктивності.
Термін: 1-2 тижні для повноцінного watchOS-додатка з WatchConnectivity та Complications. Простий companion-app (без власної логіки, лише відображення даних з iPhone): 3-5 днів. Вартість розраховується після аналізу вимог.







