WatchKit — che cos'è, il framework Apple Watch e watchOS

Autore: IT Sectr Pubblicato: 2026-06-16 Tempo di lettura: 8 min

WatchKit è un framework Apple per creare applicazioni su Apple Watch, annunciato nel 2014 insieme a watchOS 1. Fornisce un insieme di elementi dell'interfaccia WKInterface — pulsanti, etichette, tabelle, mappe — e meccanismi di navigazione tra schermate. Sebbene lo sviluppo moderno per watchOS si stia sempre più spostando verso SwiftUI, WatchKit rimane importante per supportare le applicazioni esistenti e gli scenari in cui è richiesto il controllo completo dell'interfaccia. Secondo Apple Developer Documentation, 2026, WatchKit è ancora utilizzato nel 35% delle applicazioni del catalogo watchOS App Store, incluse app per il fitness, navigatori e utilità per l'accesso rapido ai dati.

Punti chiave

  • WatchKit è un framework Apple per creare applicazioni su Apple Watch, che utilizza componenti dell'interfaccia WKInterface e navigazione basata su WKInterfaceController.
  • WKInterfaceController è la classe principale dello schermo dell'applicazione, simile a UIViewController su iOS, con gestione del ciclo di vita e gerarchia.
  • WCSession è il meccanismo di comunicazione tra Apple Watch e iPhone, che consente il trasferimento di dati, file e contesto tramite Bluetooth.
  • WKInterfaceDevice fornisce informazioni sul dispositivo: dimensioni dello schermo, modello, versione watchOS e capacità dei componenti hardware.
  • Complications Controller è un'API per visualizzare dati sul quadrante dell'orologio, attivata tramite CLKComplicationDataSource.

Cos'è WatchKit e come funziona?

WatchKit è un framework Apple che fornisce un'API per creare applicazioni su Apple Watch. A partire da watchOS 2 (2015), le app WatchKit vengono eseguite direttamente sull'orologio, non sull'iPhone, consentendo loro di elaborare dati e visualizzare l'interfaccia senza una connessione costante al telefono. Prima di ciò, in watchOS 1, tutte le app venivano eseguite sull'iPhone e l'orologio era solo un display remoto, causando ritardi significativi nell'interfaccia utente.

L'architettura moderna di WatchKit include due componenti: WatchKit App (Storyboard + risorse sull'orologio) e WatchKit Extension (codice eseguito sull'orologio). L'utente installa entrambi i componenti tramite l'App Store durante l'installazione dell'applicazione iOS principale. WatchKit si integra con le funzioni di sistema: notifiche (tramite UNUserNotificationCenter), complicazioni (dati sul quadrante), Workout API e HealthKit.

Secondo Counterpoint Research (2025), Apple Watch detiene il 52% del mercato globale degli smartwatch e l'utente medio installa 6–8 app di terze parti che utilizzano WatchKit o SwiftUI. Le categorie più popolari sono fitness (56%), salute (22%), navigazione (9%) e utilità (8%).

WatchKit vs SwiftUI per watchOS

SwiftUI è il metodo consigliato da Apple per creare interfacce per watchOS a partire da watchOS 6. SwiftUI fornisce sintassi dichiarativa e adattamento automatico alle dimensioni dello schermo. Tuttavia, WatchKit rimane rilevante per i progetti iniziati prima dell'esistenza di SwiftUI, per l'uso di elementi specifici (WKInterfaceMap, WKInterfaceMovie) e nei casi in cui è richiesto il supporto per versioni watchOS precedenti alla 6.

CriterioWatchKitSwiftUI
Raccomandazione AppleLegacyAttuale
watchOS minimowatchOS 1watchOS 6
Volume di codicePiùMeno
Integrazione complicazioniDiretta tramite classiTramite WidgetKit
WKInterfaceMapMappa (MapKit)

Interfaccia WatchKit: WKInterfaceController ed elementi

WKInterfaceController è la classe base per gestire gli schermi in WatchKit. Gestisce il ciclo di vita: inizializzazione (awake(withContext:)), comparsa (willActivate), scomparsa (didDeactivate) e trasferimento del contesto tra controller. Ogni schermo dell'applicazione è rappresentato da una sottoclasse separata di WKInterfaceController collegata allo Storyboard tramite Interface Builder. La navigazione può essere gerarchica (push) o modale (present).

WatchKit fornisce un insieme di elementi dell'interfaccia con il prefisso WKInterface: WKInterfaceLabel (testo), WKInterfaceButton (pulsante), WKInterfaceTable (tabella), WKInterfaceImage (immagine), WKInterfaceMap (mappa) e WKInterfaceGroup (contenitore con angoli arrotondati e sfondo). Tutti gli elementi funzionano in modo asincrono — le modifiche all'interfaccia vengono messe in coda e applicate dal sistema tra i cicli di rendering, garantendo 30 FPS stabili sullo schermo dell'orologio.

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

WCSession: comunicazione tra Watch e iPhone

WCSession è la classe centrale per la comunicazione bidirezionale tra Apple Watch e iPhone tramite Bluetooth o Wi-Fi. La sessione consente di trasferire piccoli dizionari di dati (updateApplicationContext), inviare messaggi con risposta immediata (sendMessage), trasferire file (transferFile) e sincronizzare oggetti complessi (transferUserInfo). WCSession funziona in modo asincrono e seleziona automaticamente il canale di comunicazione ottimale.

Per utilizzare WCSession, è necessario attivare la sessione su entrambi i dispositivi. L'app Watch crea una WCSession nel metodo willActivate(), mentre l'app iOS lo fa in AppDelegate o SceneDelegate. Dopo l'attivazione, i dispositivi sincronizzano automaticamente il contesto quando possibile. È importante gestire il delegato WCSessionDelegate per ricevere i dati in arrivo e monitorare lo stato della connessione.

Esempio WCSession sul lato 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: dati sul quadrante dell'orologio

Complications sono piccoli elementi di dati visualizzati sul quadrante dell'Apple Watch che forniscono accesso rapido alle informazioni senza aprire l'app. WatchKit fornisce CLKComplicationDataSource — un protocollo la cui implementazione consente all'app di fornire dati per le complicazioni. Il quadrante stesso decide quali posizioni sono disponibili — circolari, rettangolari, angolari o modulari.

Lo sviluppatore può fornire complicazioni per tre famiglie di dimensioni: CLKComplicationFamily — circularSmall, extraLarge, graphicCircular, graphicRectangular, graphicCorner, graphicBezel, modularSmall, modularLarge e utilitarianSmall/Large. Ogni famiglia ha le proprie dimensioni e formato di visualizzazione. Un'app può supportare più famiglie, ma si consiglia un minimo di due — grafica e modulare.

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

Esempio di applicazione WatchKit in Swift

La creazione di un'app WatchKit inizia aggiungendo un WatchKit App Target in Xcode. Xcode genera un Interface.storyboard con un controller iniziale e lo collega automaticamente alla classe InterfaceController. Lo sviluppatore aggiunge elementi dell'interfaccia tramite Interface Builder e crea IBOutlets per l'interazione dal codice. Di seguito è riportato un esempio completo di controller con una tabella di dati ricevuti dall'iPhone tramite 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 per applicazioni fitness

Workout API è un insieme di classi WatchKit per creare app per il fitness in grado di eseguire allenamenti su Apple Watch in background. L'API fornisce accesso ai sensori: accelerometro, giroscopio, monitoraggio della frequenza cardiaca (tramite HKHealthStore) e GPS (sui modelli Watch con GPS). Gli allenamenti vengono avviati tramite HKWorkoutSession da HealthKit e i dati della frequenza cardiaca vengono aggiornati in tempo reale tramite HKSampleQuery.

Il vantaggio principale di Workout API è il funzionamento in background. Quando un allenamento è attivo, watchOS non sospende l'app quando l'utente abbassa il polso — i sensori continuano a raccogliere dati e l'app può visualizzare frequenza cardiaca, distanza, ritmo e altre metriche. Al termine dell'allenamento, i dati vengono sincronizzati con l'app Salute sull'iPhone tramite HealthKit, fornendo un profilo fitness unificato per l'utente.

Avviare un allenamento con i sensori

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

Domande frequenti

Dovrei usare WatchKit in un nuovo progetto?

Apple raccomanda SwiftUI per le nuove app watchOS. Utilizza WatchKit solo per supportare progetti legacy o se hai bisogno di funzionalità specifiche come WKInterfaceMap non disponibili in SwiftUI.

Come trasferire dati dal Watch all'iPhone senza connessione?

WCSession supporta il trasferimento differito tramite transferUserInfo e transferFile. I dati verranno consegnati al prossimo stabilirsi della connessione tra orologio e telefono, garantendo la consegna anche in caso di perdita temporanea di connettività.

Le app WatchKit funzionano su tutti i modelli di Apple Watch?

Le app scritte con WatchKit sono compatibili con Apple Watch Series 0 e successivi (watchOS 1+). Tuttavia, alcune funzionalità (GPS, monitoraggio della frequenza cardiaca, Dynamic Island) sono disponibili solo su modelli specifici.

Posso usare SwiftUI e WatchKit nella stessa app?

, puoi combinare SwiftUI e WatchKit in un'unica app. Usa WKHostingController per incorporare viste SwiftUI in un WKInterfaceController o integra WKInterfaceObjects tramite UIViewRepresentable.

Come eseguire il debug di WCSession su dispositivi reali?

Esegui entrambe le app (iOS + watchOS) da Xcode sui dispositivi collegati. Utilizza la console di debug per monitorare i messaggi di WCSessionDelegate. Assicurati che entrambi i dispositivi siano nel raggio Bluetooth (fino a 10 metri).

Riepilogo

  • WatchKit è un framework Apple per creare app su Apple Watch, utilizzando componenti dell'interfaccia WKInterface e controller WKInterfaceController.
  • WCSession è il meccanismo centrale per la comunicazione bidirezionale tra Watch e iPhone tramite Bluetooth/Wi-Fi con supporto per messaggi, file e contesto.
  • Complications sono dati sul quadrante dell'Apple Watch tramite CLKComplicationDataSource con supporto per 9 famiglie di visualizzazione.
  • Workout API è un insieme di classi per app fitness con raccolta in background di dati di frequenza cardiaca, GPS e accelerometro tramite HKWorkoutSession.
  • SwiftUI è l'approccio raccomandato da Apple per i nuovi progetti, ma WatchKit rimane rilevante per le app legacy e le funzionalità specifiche.
  • Combinazione di WatchKit e SwiftUI in un'unica app è possibile tramite WKHostingController e UIViewRepresentable.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche