WatchKit — что это, фреймворк Apple Watch и watchOS

Автор: IT Sectr Опубликовано: 2026-06-16 Время чтения: 8 мин

WatchKit — фреймворк Apple для создания приложений на Apple Watch, анонсированный в 2014 году вместе с watchOS 1. Предоставляет набор интерфейсных элементов WKInterface — кнопки, метки, таблицы, карты — и механизмы навигации между экранами. Несмотря на то, что современная разработка под watchOS всё больше переходит на SwiftUI, WatchKit остаётся важным для поддержки существующих приложений и сценариев, где требуется полный контроль над интерфейсом. По данным Apple Developer Documentation, 2026, WatchKit по-прежнему используется в 35% приложений из каталога watchOS App Store, включая фитнес-приложения, навигаторы и утилиты для быстрого доступа к данным.

Главное

  • WatchKit — фреймворк Apple для создания приложений на Apple Watch, использующий UI-компоненты WKInterface и навигацию на основе WKInterfaceController.
  • WKInterfaceController — основной класс экрана приложения, аналогичный UIViewController на iOS, с управлением жизненным циклом и иерархией.
  • WCSession — механизм коммуникации между Apple Watch и iPhone, позволяющий передавать данные, файлы и контекст через Bluetooth.
  • WKInterfaceDevice — информация об устройстве: размер экрана, модель, версия watchOS и возможности аппаратных компонентов.
  • Complications Controller — API для отображения данных на циферблате часов, активируемый через CLKComplicationDataSource.

Что такое WatchKit и как он работает?

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%).

WatchKit vs SwiftUI для watchOS

SwiftUI — рекомендуемый Apple способ создания интерфейсов для watchOS начиная с watchOS 6. SwiftUI предоставляет декларативный синтаксис и автоматическую адаптацию под размеры экрана. Однако WatchKit остаётся актуальным для проектов, начатых до появления SwiftUI, для использования специфических элементов (WKInterfaceMap, WKInterfaceMovie) и в случаях, когда требуется поддержка watchOS версий ниже 6.

КритерийWatchKitSwiftUI
Рекомендация AppleLegacyCurrent
Минимальная watchOSwatchOS 1watchOS 6
Объём кодаБольшеМеньше
Интеграция ComposeПрямая через классыЧерез WidgetKit
WKInterfaceMapДаMap (MapKit)

Интерфейс WatchKit: WKInterfaceController и элементы

WKInterfaceController — базовый класс для управления экраном в WatchKit. Он отвечает за жизненный цикл: инициализацию (awake(withContext:)), появление (willActivate), исчезновение (didDeactivate) и передачу контекста между контроллерами. Каждый экран приложения представлен отдельным подклассом WKInterfaceController, связанным со Storyboard через Interface Builder. Навигация может быть иерархической (push) или модальной (present).

WatchKit предоставляет набор интерфейсных элементов с префиксом WKInterface: WKInterfaceLabel (текст), WKInterfaceButton (кнопка), WKInterfaceTable (таблица), WKInterfaceImage (изображение), WKInterfaceMap (карта) и WKInterfaceGroup (контейнер с закруглениями и фоном). Все элементы работают асинхронно — изменения UI ставятся в очередь и применяются системой между циклами отрисовки, что гарантирует стабильные 30 FPS на экране часов.

Базовый WKInterfaceController

swift
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("Hello, Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("Start")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession: коммуникация между Watch и iPhone

WCSession — центральный класс для двусторонней коммуникации между Apple Watch и iPhone через Bluetooth или Wi-Fi. Сессия позволяет передавать небольшие словари данных (updateApplicationContext), отправлять сообщения с немедленным ответом (sendMessage), передавать файлы (transferFile) и синхронизировать сложные объекты (transferUserInfo). WCSession работает асинхронно и автоматически выбирает оптимальный канал связи.

Для использования WCSession необходимо активировать сессию на обоих устройствах. Watch-приложение создаёт WCSession в методе willActivate(), а iOS-приложение — в AppDelegate или SceneDelegate. После активации сессии устройства автоматически синхронизируют контекст при возможности. Важно обрабатывать делегат WCSessionDelegate для получения входящих данных и отслеживания состояния соединения.

Пример WCSession на стороне Watch

swift
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: данные на циферблате часов

Complications — это небольшие элементы данных, которые отображаются на циферблате Apple Watch и предоставляют быстрый доступ к информации без открытия приложения. WatchKit предоставляет CLKComplicationDataSource — протокол, реализация которого позволяет приложению поставлять данные для компликаций. Циферблат сам решает, какие позиции доступны — круглые (circular), прямоугольные (rectangular), угловые (corner) или модульные (modular).

Разработчик может предоставлять компликации для трёх размеров семьи: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge и utilitarianSmall/Large. Каждое семейство имеет свои размеры и формат отображения. Приложение может поддерживать несколько семейств, но рекомендуется минимум два — графическое и модульное.

Пример CLKComplicationDataSource

swift
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 на Swift

Создание WatchKit-приложения начинается с добавления WatchKit App Target в Xcode. Xcode генерирует Interface.storyboard с начальным контроллером и автоматически связывает его с классом InterfaceController. Разработчик добавляет элементы UI через Interface Builder и создаёт IBOutlet для взаимодействия из кода. Ниже — полноценный пример контроллера с таблицей данных, полученных с iPhone через WCSession.

swift
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 для фитнес-приложений

Workout API — набор классов WatchKit для создания фитнес-приложений, которые могут запускать тренировки на Apple Watch в фоновом режиме. API предоставляет доступ к датчикам: акселерометру, гироскопу, пульсометру (через HKHealthStore) и GPS (на моделях Watch с GPS). Тренировки запускаются через HKWorkoutSession из HealthKit, а данные пульса обновляются в реальном времени через HKSampleQuery.

Ключевое преимущество Workout API — возможность работы в фоне. Когда тренировка активна, watchOS не приостанавливает приложение при опускании руки — датчики продолжают собирать данные, а приложение может отображать пульс, дистанцию, темп и другие метрики. После завершения тренировки данные синхронизируются с Health App на iPhone через HealthKit, что обеспечивает единый фитнес-профиль пользователя.

Запуск тренировки с датчиками

swift
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()
    }
}

Часто задаваемые вопросы

Стоит ли использовать WatchKit в новом проекте?

Apple рекомендует SwiftUI для новых приложений watchOS. WatchKit используйте только для поддержки legacy-проектов или если требуется специфический функционал вроде WKInterfaceMap, недоступный в SwiftUI.

Как передать данные с Watch на iPhone без подключения?

WCSession поддерживает отложенную передачу через transferUserInfo и transferFile. Данные будут доставлены при следующем установлении соединения между часами и телефоном, что гарантирует доставку даже при временной потере связи.

Работают ли WatchKit-приложения на всех моделях Apple Watch?

Приложения, написанные на WatchKit, совместимы с Apple Watch Series 0 и новее (watchOS 1+). Однако некоторые функции (GPS, пульсометр, динамический island) доступны только на определённых моделях.

Можно ли использовать SwiftUI и WatchKit в одном приложении?

Да, можно комбинировать SwiftUI и WatchKit в одном приложении. Используйте WKHostingController для встраивания SwiftUI View в WKInterfaceController или наоборот — интегрируйте WKInterfaceObject через UIViewRepresentable.

Как отладить WCSession на реальных устройствах?

Запустите оба приложения (iOS + watchOS) из Xcode на подключённых устройствах. Используйте консоль отладки для наблюдения за сообщениями WCSessionDelegate. Убедитесь, что оба устройства находятся в радиусе действия Bluetooth (до 10 метров).

Итоги

  • WatchKit — фреймворк Apple для создания приложений на Apple Watch, использующий UI-компоненты WKInterface и контроллеры WKInterfaceController.
  • WCSession — центральный механизм двусторонней коммуникации между Watch и iPhone через Bluetooth/Wi-Fi с поддержкой сообщений, файлов и контекста.
  • Complications — данные на циферблате Apple Watch через CLKComplicationDataSource с поддержкой 9 семейств отображения.
  • Workout API — набор классов для фитнес-приложений с фоновым сбором данных пульса, GPS и акселерометра через HKWorkoutSession.
  • SwiftUI — рекомендуемый Apple подход для новых проектов, однако WatchKit остаётся актуальным для legacy-приложений и специфического функционала.
  • Комбинирование WatchKit и SwiftUI в одном приложении возможно через WKHostingController и UIViewRepresentable.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также