watchOS — операционная система Apple для Apple Watch, впервые выпущенная в 2015 году вместе с первыми часами. Разработка приложений под watchOS ведётся на Swift с использованием SwiftUI и WatchKit. Особенности: маленький прямоугольный экран, ограниченное энергопотребение от аккумулятора 0.3 Вт·ч и плотная интеграция с iPhone через Bluetooth. По данным Counterpoint Research, Apple Watch занимает более 30% мирового рынка умных часов.
Главное
watchOS — операционная система для умных часов Apple, основанная на XNU-ядре Darwin. Впервые выпущена 24 апреля 2015 года вместе с Apple Watch Series 0. Система построена на той же архитектуре, что и iOS, но оптимизирована для маленького дисплея (от 1.5 до 1.9 дюйма), ограниченной памяти (до 1 ГБ ОЗУ в Series 9) и минимального энергопотребления.
По данным StatCounter (2026), watchOS занимает около 55% рынка операционных систем для умных часов, опережая Wear OS и проприетарные системы китайских производителей. Apple выпускает мажорные обновления watchOS ежегодно, поддерживая часы до 5 лет с момента выпуска.
Ключевая особенность watchOS — зависимость от iPhone. Большинство приложений используют Watch Connectivity для синхронизации данных. Начиная с watchOS 6, часы могут устанавливать приложения напрямую из App Store, но полная автономность без iPhone поддерживается только с watchOS 9.
Первая версия Watch OS 1.0 не поддерживала сторонние приложения — только предустановленные Apple. watchOS 2 (2015) открыла SDK для разработчиков. watchOS 3 (2016) ускорила запуск приложений в 7 раз. watchOS 6 (2019) представила App Store на часах. watchOS 9 (2022) добавила медикаменты и улучшенный трекинг сна. watchOS 10 (2023) стала крупнейшим обновлением интерфейса с момента выпуска.
| Версия watchOS | Год | Ключевое нововведение |
|---|---|---|
| Watch OS 1 | 2015 | Первая версия, только нативные приложения Apple |
| watchOS 2 | 2015 | Открытый SDK, сторонние приложения, Watch Connectivity |
| watchOS 3 | 2016 | Мгновенный запуск приложений, Dock, Scribble |
| watchOS 6 | 2019 | App Store на часах, Cycle Tracking, Noise app |
| watchOS 9 | 2022 | Медикаменты, фазы сна, улучшенный компаньон для бега |
| watchOS 10 | 2023 | Smart Stack, Double Tap, новые циферблаты |
Архитектура watchOS состоит из трёх уровней, изолирующих аппаратное обеспечение от пользовательских приложений. В отличие от iOS, watchOS использует компонентный подход: приложение состоит из двух таргетов — расширение (extension) и хост на iPhone.
Нижний уровень — модифицированное ядро XNU с драйверами для S4/S5/S6/S7/S8/S9 чипов Apple. В Apple Watch Series 9 используется S9 SiP с 5.6 млрд транзисторов и 4-ядерным Neural Engine. Системные службы включают Core Bluetooth, Watch Connectivity, HealthKit и Core Motion. Все фоновые задачи управляются через BGTaskScheduler — системный планировщик, оптимизирующий энергопотребление.
WatchKit — фреймворк для создания интерфейсов watchOS-приложений. Включает WKInterfaceController, WKInterfaceGroup, WKInterfaceLabel и WKInterfaceButton. С watchOS 6 Apple рекомендует SwiftUI вместо WatchKit. SwiftUI предоставляет те же возможности, но с декларативным синтаксисом и автоматической адаптацией под размер экрана: 38 мм (272×340), 42 мм (312×390), 40 мм (324×394), 44 мм (368×448), 45 мм (396×484), 49 мм (410×502 в Apple Watch Ultra).
watchOS ограничивает фоновую работу приложений для экономии батареи. Доступные фоновые режимы: Workout (тренировки), HealthKit (мониторинг здоровья), Location (геолокация), Audio (аудиоплеер) и Complication (данные на циферблате). Каждый режим запрашивает отдельную capability в entitlements. Типичное энергопотребение: активное приложение — 50-80 мА, фоновый режим — 5-15 мА, Standby — 1-3 мА.
import BackgroundTasks
import WatchKit
/// Планирование фонового обновления данных на watchOS
class BackgroundTaskManager: NSObject {
func scheduleBackgroundRefresh() {
let request = BGAppRefreshTaskRequest(identifier: "com.example.refresh")
request.earliestBeginDate = Date(timeIntervalSinceNow: 30 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
task.expirationHandler = { task.setTaskCompleted(success: false) }
DataService.shared.fetchData { result in
switch result {
case .success:
ComplicationController.reloadComplications()
task.setTaskCompleted(success: true)
case .failure:
task.setTaskCompleted(success: false)
}
}
}
}
/// Регистрация фоновой задачи в WKExtensionDelegate
class ExtensionDelegate: NSObject, WKExtensionDelegate {
let manager = BackgroundTaskManager()
func handle(_ backgroundTasks: Set<WKBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let refreshTask as BGAppRefreshTask:
manager.handleAppRefresh(task: refreshTask)
default:
task.setTaskCompleted(success: false)
}
}
}
}BGTaskScheduler гарантирует, что фоновые задачи выполняются в оптимальные моменты — когда часы на зарядке и подключены к iPhone. WKExtensionDelegate обрабатывает входящие фоновые задачи и обновляет данные на циферблате. ComplicationController.reloadComplications обновляет виджеты на выбранном циферблате.
watchOS 10 — крупнейшее обновление интерфейса за всю историю платформы, выпущенное в сентябре 2023 года. Система перешла от иерархической навигации к контентно-ориентированной: основным экраном стал Smart Stack — интеллектуальный стек виджетов, заменивший док приложений.
Smart Stack — вертикальный список виджетов, отображаемый под циферблатом. Виджеты ранжируются по контексту: утром показывается погода и календарь, днём — активность и напоминания, вечером — медитация и подготовка ко сну. Разработчик может добавлять кастомные виджеты через WidgetKit для watchOS, используя те же API, что и для iOS 17.
Double Tap — жест сведения указательного и большого пальца, распознаваемый акселерометром и гироскопом без касания экрана. В Apple Watch Series 9 и Ultra 2 жест выполняется на аппаратном уровне через Neural Engine. Разработчик получает событие через UIDoubleTapGestureRecognizer или через SwiftUI модификатор .onTapGesture(count: 2). Жест не требует калибровки и работает в любой ориентации руки.
watchOS 10 представила: SwiftUI Animation с поддержкой Spring и Keyframe анимаций, MapKit для отображения карт на часах, VideoPlayer для воспроизведения коротких видео (до 30 секунд), улучшенный VoiceOver с жестами и новую навигационную парадигму NavigationStack вместо NavigationView.
| API | Назначение | Доступно с |
|---|---|---|
| WidgetKit for watchOS | Виджеты для Smart Stack | watchOS 10 |
| UIDoubleTapGesture | Жест Double Tap | watchOS 10 (S9+) |
| MapKit | Отображение карт на часах | watchOS 10 |
| NavigationStack | Новая навигационная парадигма | watchOS 10 |
| SwiftUI Keyframe | Покадровая анимация | watchOS 10 |
SwiftUI — основной фреймворк для разработки интерфейсов под watchOS. Apple рекомендует SwiftUI для всех новых проектов начиная с watchOS 7. SwiftUI для часов использует те же принципы, что и для iOS, но с watchOS-специфичными модификаторами и компонентами.
SwiftUI для watchOS включает: TabView с page-стилем для свайпа между экранами, DigitalCrownRotation для обработки вращения колёсика, SceneStorage для сохранения состояния между запусками, WKNotificationScene для кастомных уведомлений и ComplicationDescriptor для данных на циферблате.
import SwiftUI
import HealthKit
/// watchOS приложение для мониторинга пульса
@main
struct HeartMonitorApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
WKNotificationScene(
controller: NotificationController.self,
category: "heartAlert"
)
}
}
struct ContentView: View {
@State private var heartRate: Double = 0
private let healthStore = HKHealthStore()
var body: some View {
TabView {
HeartRateView(rate: heartRate)
.tabItem { Label("Пульс", systemImage: "heart.fill") }
StepsView()
.tabItem { Label("Шаги", systemImage: "figure.walk") }
SettingsView()
.tabItem { Label("Настройки", systemImage: "gear") }
}
.tabViewStyle(.page)
.onAppear(perform: setupHealthKit)
}
private func setupHealthKit() {
guard HKHealthStore.isHealthDataAvailable() else { return }
let heartType = HKQuantityType(.heartRate)
healthStore.requestAuthorization(toShare: nil, read: [heartType]) { success, error in
guard success else { return }
startHeartRateQuery()
}
}
private func startHeartRateQuery() {
let heartType = HKQuantityType(.heartRate)
let query = HKObserverQuery(sampleType: heartType, predicate: nil) { _, _, error in
guard error == nil else { return }
fetchLatestHeartRate()
}
healthStore.execute(query)
}
private func fetchLatestHeartRate() {
let heartType = HKQuantityType(.heartRate)
let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
let query = HKSampleQuery(sampleType: heartType, predicate: nil,
limit: 1, sortDescriptors: [sort]) { _, samples, _ in
guard let sample = samples?.first as? HKQuantitySample else { return }
let rate = sample.quantity.doubleValue(for: HKUnit(from: "count/min"))
DispatchQueue.main.async { heartRate = rate }
}
healthStore.execute(query)
}
}
struct HeartRateView: View {
let rate: Double
var body: some View {
VStack(spacing: 12) {
Image(systemName: "heart.fill")
.foregroundStyle(.red)
.font(.system(size: 48))
.symbolEffect(.pulse)
Text("\(Int(rate))")
.font(.system(.title, design: .rounded))
.contentTransition(.numericText())
.bold()
Text("уд/мин")
.font(.caption)
.foregroundStyle(.secondary)
}
}
}Приложение HeartMonitorApp демонстрирует типичную структуру watchOS-приложения на SwiftUI: TabView с page-стилем для свайпа между экранами, интеграцию с HealthKit для чтения пульса в реальном времени, WKNotificationScene для обработки уведомлений. SymbolEffect с pulse-анимацией использует аппаратное ускорение Neural Engine для плавной анимации без затрат CPU.
Digital Crown — колёсико на боковой панели Apple Watch. SwiftUI предоставляет DigitalCrownRotation для привязки значения к вращению колёсика. Модификатор принимает binding, диапазон и шаг. Жесты: tap (касание), longPress (долгое нажатие), swipe (свайп) и pan (перетаскивание) — все стандартные для SwiftUI и адаптированные под размер экрана часов.
WatchKit — оригинальный фреймворк для watchOS, использующий UIKit-подход. Хотя Apple рекомендует SwiftUI, WatchKit остаётся актуальным для легаси-проектов и специфичных задач: сложные анимации на WKInterfaceGroup и интеграция с SiriKit.
Приложение для watchOS состоит из двух таргетов: WatchKit Extension (логика и интерфейс) и iOS Companion App (настройки и синхронизация). Начиная с Xcode 15, возможно создание standalone-приложения без iOS-компаньона. Интерфейс описывается в Interface.storyboard (WatchKit) или программно через SwiftUI.
| Компонент | WatchKit | SwiftUI |
|---|---|---|
| Экран | WKInterfaceController | View |
| Кнопка | WKInterfaceButton | Button |
| Таблица | WKInterfaceTable | List |
| Группа | WKInterfaceGroup | VStack / HStack |
| Изображение | WKInterfaceImage | Image / AsyncImage |
| Метка | WKInterfaceLabel | Text |
| Карта | WKInterfaceMap | Map (watchOS 10+) |
| Циферблат | CLKComplicationDataSource | ComplicationDescriptor |
Complication — виджет, отображающий данные на циферблате Apple Watch. Разработчик реализует протокол CLKComplicationDataSource, предоставляя шаблоны для разных типов циферблатов (circular, rectangular, modular, extraLarge). watchOS 10 поддерживает ComplicationDescriptor — упрощённый API для SwiftUI. Данные обновляются через Background Tasks с периодом до 30 минут.
Watch Connectivity — фреймворк для обмена данными между Apple Watch и iPhone через Bluetooth или Wi-Fi. Единственный способ связи между парными устройствами. WCSession — центральный класс, управляющий сессией. iOS-приложение и watchOS-расширение должны реализовать WCSessionDelegate.
Watch Connectivity предоставляет четыре метода передачи данных: sendMessage — немедленная отправка с подтверждением (работает только когда оба приложения активны), transferUserInfo — фоновая доставка словаря данных, transferFile — передача файлов с метаданными, updateApplicationContext — синхронизация общего состояния. Все методы гарантируют доставку при возобновлении соединения.
import WatchConnectivity
/// Менеджер синхронизации между iPhone и Apple Watch
final class ConnectivityManager: NSObject, WCSessionDelegate {
static let shared = ConnectivityManager()
private let session = WCSession.default
override private init() {
super.init()
session.delegate = self
session.activate()
}
// MARK: — Отправка данных с iPhone на часы
func sendWorkoutData(_ data: [String: Any]) {
guard session.isReachable else {
// Если часы недоступны — сохраняем в контекст
try? session.updateApplicationContext(data)
return
}
session.sendMessage(data, replyHandler: nil) { error in
print("Send error: \(error.localizedDescription)")
}
}
// MARK: — Получение данных на часах
func session(_ session: WCSession,
didReceiveMessage message: [String: Any]) {
DispatchQueue.main.async {
NotificationCenter.default.post(
name: NSNotification.Name("dataReceived"),
object: message
)
}
}
func session(_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?) {
print("WCSession activated: \(activationState.rawValue)")
}
// Не требуется на watchOS, но обязателен для протокола
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
}ConnectivityManager реализует синглтон для работы с WCSession. sendWorkoutData проверяет isReachable: если часы активны, данные отправляются немедленно через sendMessage; если нет — сохраняются в applicationContext для отложенной доставки. onReceiveMessage на стороне получателя обрабатывает входящие сообщения и уведомляет приложение через NotificationCenter.
transferFile позволяет передавать большие объёмы данных: изображения, аудиофайлы, архивы. Максимальный размер файла — 100 МБ. Файлы сохраняются в директории Inbox на принимающем устройстве. transferUserInfo подходит для JSON-данных до 100 КБ. Все методы работают в фоне: если устройство недоступно, передача ставится в очередь и автоматически возобновляется при восстановлении соединения.
Публикация watchOS-приложения следует тем же правилам, что и iOS: требуется подписка Apple Developer Program ($99/год) и прохождение модерации App Review. Приложение загружается в App Store Connect как часть iOS-приложения или как standalone-приложение.
watchOS-приложение может поставляться двумя способами: как встроенное расширение iOS-приложения (iOS app bundle содержит watchOS .app) или как standalone-приложение (загружается и работает без iPhone). Для standalone-режима требуется WKRunsIndependently = YES в Info.plist. Размер watchOS-приложения ограничен 50 МБ для загрузки по сотовой сети.
Особые требования для watchOS: приложение должно корректно работать без активного iPhone (если заявлено как standalone), интерфейс должен быть читаем без увеличения, все интерактивные элементы — не менее 44 точек в размере. Запрещены приложения, дублирующие функциональность встроенных (например, пульсометр без дополнительной ценности).
| Требование | Описание |
|---|---|
| Размер приложения | До 50 МБ для сотовой загрузки, до 4 ГБ через Wi-Fi |
| Standalone режим | WKRunsIndependently = YES в Info.plist |
| Touch targets | Минимум 44 pt для всех интерактивных элементов |
| Безопасность | Данные HealthKit не могут передаваться на сервер без согласия |
| Производительность | Запуск приложения не более 5 секунд |
Часто задаваемые вопросы
Основной язык — Swift с фреймворком SwiftUI. WatchKit на UIKit также поддерживается, но Apple рекомендует SwiftUI для всех новых проектов под watchOS. Objective-C используется только в легаси-приложениях, выпущенных до 2019 года. С watchOS 7 все примеры Apple используют исключительно SwiftUI.
Начиная с watchOS 6, Apple Watch может устанавливать приложения напрямую из App Store без iPhone. Однако многие функции — синхронизация данных, push-уведомления, геолокация — требуют пары с iPhone. Полностью автономные приложения возможны с watchOS 9 и WKRunsIndependently в настройках сборки.
Типичная автономность Apple Watch Series 9 — до 18 часов в смешанном режиме. При активном использовании приложения с GPS и пульсометром — 5-7 часов. watchOS 10 оптимизирует энергопотребление через Smart Stack и BGTaskScheduler, уменьшая фоновую активность приложений до 4 раз по сравнению с watchOS 9.
Watch Connectivity framework предоставляет четыре способа: sendMessage (немедленная передача), transferUserInfo (фоновая), transferFile (файлы до 100 МБ) и updateApplicationContext (синхронизация состояния). Все методы работают через Bluetooth или Wi-Fi с автоматической постановкой в очередь при потере соединения.
Apple Watch Series 9 и Ultra 2 включают: акселерометр, гироскоп, оптический и электрический пульсометр, SpO2 (сатурация), датчик температуры запястья, барометр, компас, GPS L1+L5 и микрофон. Доступ к датчикам — через HealthKit и Core Motion. Данные пульса и SpO2 требуют явного разрешения пользователя.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.