WatchKit — qu'est-ce que c'est, le framework Apple Watch et watchOS

Auteur : IT Sectr Publié le : 2026-06-16 Temps de lecture : 8 min

WatchKit est un framework Apple pour créer des applications sur Apple Watch, annoncé en 2014 avec watchOS 1. Il fournit un ensemble d'éléments d'interface WKInterface — boutons, étiquettes, tableaux, cartes — et des mécanismes de navigation entre les écrans. Bien que le développement moderne sous watchOS se tourne de plus en plus vers SwiftUI, WatchKit reste important pour prendre en charge les applications existantes et les scénarios où un contrôle total de l'interface est requis. Selon Apple Developer Documentation, 2026, WatchKit est encore utilisé dans 35 % des applications du catalogue watchOS App Store, y compris les applications de fitness, les navigateurs et les utilitaires d'accès rapide aux données.

Points clés

  • WatchKit est un framework Apple pour créer des applications sur Apple Watch, utilisant des composants d'interface WKInterface et une navigation basée sur WKInterfaceController.
  • WKInterfaceController est la classe d'écran principale de l'application, similaire à UIViewController sur iOS, avec gestion du cycle de vie et hiérarchie.
  • WCSession est le mécanisme de communication entre Apple Watch et iPhone, permettant le transfert de données, de fichiers et de contexte via Bluetooth.
  • WKInterfaceDevice fournit des informations sur l'appareil : taille de l'écran, modèle, version de watchOS et capacités des composants matériels.
  • Complications Controller est une API pour afficher des données sur le cadran de la montre, activée via CLKComplicationDataSource.

Qu'est-ce que WatchKit et comment ça marche ?

WatchKit est un framework Apple qui fournit une API pour créer des applications sur Apple Watch. À partir de watchOS 2 (2015), les applications WatchKit s'exécutent directement sur la montre, et non sur l'iPhone, ce qui leur permet de traiter les données et d'afficher l'interface sans connexion constante au téléphone. Avant cela, sous watchOS 1, toutes les applications s'exécutaient sur l'iPhone et la montre n'était qu'un affichage à distance, ce qui entraînait des retards importants dans l'interface utilisateur.

L'architecture moderne de WatchKit comprend deux composants : WatchKit App (Storyboard + ressources sur la montre) et WatchKit Extension (code exécuté sur la montre). L'utilisateur installe les deux composants via l'App Store lors de l'installation de l'application iOS parente. WatchKit s'intègre aux fonctions système : notifications (via UNUserNotificationCenter), complications (données sur le cadran), Workout API et HealthKit.

Selon Counterpoint Research (2025), l'Apple Watch détient 52 % du marché mondial des montres connectées, et l'utilisateur moyen installe 6 à 8 applications tierces utilisant WatchKit ou SwiftUI. Les catégories les plus populaires sont le fitness (56 %), la santé (22 %), la navigation (9 %) et les utilitaires (8 %).

WatchKit vs SwiftUI pour watchOS

SwiftUI est la méthode recommandée par Apple pour créer des interfaces pour watchOS à partir de watchOS 6. SwiftUI offre une syntaxe déclarative et une adaptation automatique aux tailles d'écran. Cependant, WatchKit reste pertinent pour les projets commencés avant l'existence de SwiftUI, pour utiliser des éléments spécifiques (WKInterfaceMap, WKInterfaceMovie) et dans les cas où la prise en charge des versions de watchOS antérieures à 6 est nécessaire.

CritèreWatchKitSwiftUI
Recommandation AppleLegacyActuel
watchOS minimumwatchOS 1watchOS 6
Volume de codePlusMoins
Intégration des complicationsDirecte via les classesVia WidgetKit
WKInterfaceMapOuiCarte (MapKit)

Interface WatchKit : WKInterfaceController et éléments

WKInterfaceController est la classe de base pour gérer les écrans dans WatchKit. Elle gère le cycle de vie : initialisation (awake(withContext:)), apparition (willActivate), disparition (didDeactivate) et transfert de contexte entre les contrôleurs. Chaque écran de l'application est représenté par une sous-classe distincte de WKInterfaceController connectée au Storyboard via Interface Builder. La navigation peut être hiérarchique (push) ou modale (present).

WatchKit fournit un ensemble d'éléments d'interface avec le préfixe WKInterface : WKInterfaceLabel (texte), WKInterfaceButton (bouton), WKInterfaceTable (tableau), WKInterfaceImage (image), WKInterfaceMap (carte) et WKInterfaceGroup (conteneur avec coins arrondis et fond). Tous les éléments fonctionnent de manière asynchrone — les modifications de l'interface sont mises en file d'attente et appliquées par le système entre les cycles de rendu, garantissant 30 images par seconde stables sur l'écran de la montre.

WKInterfaceController de base

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

WCSession : communication entre Watch et iPhone

WCSession est la classe centrale pour la communication bidirectionnelle entre Apple Watch et iPhone via Bluetooth ou Wi-Fi. La session permet de transférer de petits dictionnaires de données (updateApplicationContext), d'envoyer des messages avec réponse immédiate (sendMessage), de transférer des fichiers (transferFile) et de synchroniser des objets complexes (transferUserInfo). WCSession fonctionne de manière asynchrone et sélectionne automatiquement le canal de communication optimal.

Pour utiliser WCSession, vous devez activer la session sur les deux appareils. L'application Watch crée une WCSession dans la méthode willActivate(), tandis que l'application iOS le fait dans AppDelegate ou SceneDelegate. Une fois activée, les appareils synchronisent automatiquement le contexte lorsque c'est possible. Il est important de gérer le délégué WCSessionDelegate pour recevoir les données entrantes et surveiller l'état de la connexion.

Exemple WCSession côté 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 : données sur le cadran de la montre

Complications sont de petits éléments de données affichés sur le cadran de l'Apple Watch qui permettent un accès rapide aux informations sans ouvrir l'application. WatchKit fournit CLKComplicationDataSource — un protocole dont l'implémentation permet à l'application de fournir des données pour les complications. Le cadran de la montre décide lui-même quelles positions sont disponibles — circulaires, rectangulaires, d'angle ou modulaires.

Le développeur peut fournir des complications pour trois familles de taille : CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge et utilitarianSmall/Large. Chaque famille a ses propres dimensions et format d'affichage. Une application peut prendre en charge plusieurs familles, mais un minimum de deux — graphique et modulaire — est recommandé.

Exemple 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)
    }
}

Exemple d'application WatchKit en Swift

La création d'une application WatchKit commence par l'ajout d'une cible WatchKit App dans Xcode. Xcode génère un Interface.storyboard avec un contrôleur initial et le lie automatiquement à la classe InterfaceController. Le développeur ajoute des éléments d'interface via Interface Builder et crée des IBOutlets pour l'interaction depuis le code. Voici un exemple complet d'un contrôleur avec un tableau de données reçues de l'iPhone via 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 pour les applications de fitness

Workout API est un ensemble de classes WatchKit pour créer des applications de fitness capables d'exécuter des entraînements sur Apple Watch en arrière-plan. L'API donne accès aux capteurs : accéléromètre, gyroscope, moniteur de fréquence cardiaque (via HKHealthStore) et GPS (sur les modèles de Watch avec GPS). Les entraînements sont démarrés via HKWorkoutSession de HealthKit, et les données de fréquence cardiaque sont mises à jour en temps réel via HKSampleQuery.

L'avantage clé de Workout API est le fonctionnement en arrière-plan. Lorsqu'un entraînement est actif, watchOS ne suspend pas l'application lorsque l'utilisateur baisse le poignet — les capteurs continuent de collecter des données et l'application peut afficher la fréquence cardiaque, la distance, l'allure et d'autres métriques. Après la fin de l'entraînement, les données sont synchronisées avec l'application Santé sur l'iPhone via HealthKit, fournissant un profil de fitness unifié pour l'utilisateur.

Démarrer un entraînement avec des capteurs

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

Questions fréquentes

Dois-je utiliser WatchKit dans un nouveau projet ?

Apple recommande SwiftUI pour les nouvelles applications watchOS. Utilisez WatchKit uniquement pour la prise en charge de projets existants ou si vous avez besoin de fonctionnalités spécifiques comme WKInterfaceMap qui ne sont pas disponibles dans SwiftUI.

Comment transférer des données du Watch vers l'iPhone sans connexion ?

WCSession prend en charge le transfert différé via transferUserInfo et transferFile. Les données seront livrées lors de la prochaine connexion entre la montre et le téléphone, garantissant la livraison même en cas de perte temporaire de connectivité.

Les applications WatchKit fonctionnent-elles sur tous les modèles d'Apple Watch ?

Les applications écrites avec WatchKit sont compatibles avec Apple Watch Series 0 et ultérieures (watchOS 1+). Cependant, certaines fonctionnalités (GPS, moniteur de fréquence cardiaque, Dynamic Island) ne sont disponibles que sur des modèles spécifiques.

Puis-je utiliser SwiftUI et WatchKit dans la même application ?

Oui, vous pouvez combiner SwiftUI et WatchKit dans une seule application. Utilisez WKHostingController pour intégrer des vues SwiftUI dans un WKInterfaceController, ou intégrez des WKInterfaceObjects via UIViewRepresentable.

Comment déboguer WCSession sur des appareils réels ?

Exécutez les deux applications (iOS + watchOS) depuis Xcode sur des appareils connectés. Utilisez la console de débogage pour surveiller les messages WCSessionDelegate. Assurez-vous que les deux appareils sont à portée Bluetooth (jusqu'à 10 mètres).

Résumé

  • WatchKit est un framework Apple pour créer des applications sur Apple Watch, utilisant des composants d'interface WKInterface et des contrôleurs WKInterfaceController.
  • WCSession est le mécanisme central de communication bidirectionnelle entre Watch et iPhone via Bluetooth/Wi-Fi avec prise en charge des messages, des fichiers et du contexte.
  • Complications sont des données sur le cadran de l'Apple Watch via CLKComplicationDataSource avec prise en charge de 9 familles d'affichage.
  • Workout API est un ensemble de classes pour les applications de fitness avec collecte en arrière-plan des données de fréquence cardiaque, GPS et accéléromètre via HKWorkoutSession.
  • SwiftUI est l'approche recommandée par Apple pour les nouveaux projets, mais WatchKit reste pertinent pour les applications existantes et les fonctionnalités spécifiques.
  • Combinaison de WatchKit et SwiftUI dans une même application est possible via WKHostingController et UIViewRepresentable.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi