Watch App: cos'è, sviluppo per Apple Watch e Wear OS

Autore: IT Sectr Pubblicato: 2026-02-15 Tempo di lettura: 9 min

Watch App è un'applicazione per dispositivi indossabili: Apple Watch con watchOS e smartwatch con Wear OS di Google. A differenza delle app mobili, Watch App è ottimizzata per schermi piccoli (diagonale 1,5–2 pollici), sessioni di interazione brevi (5–15 secondi) e scenari specifici — fitness, notifiche, risposte rapide, input vocale. Lo sviluppo avviene con SwiftUI per Apple Watch e con Kotlin e Jetpack Compose for Wear OS per Android. Esaminiamo i concetti chiave, l'architettura, la navigazione e gli esempi di codice per entrambe le piattaforme.

Punti chiave

  • Watch App — applicazione per smartwatch con sessioni brevi (5–15 secondi) e schermo limitato
  • Apple Watch utilizza watchOS con SwiftUI e WatchKit, navigazione gerarchica rigorosa
  • Wear OS utilizza Kotlin con Jetpack Compose for Wear OS, Material You e navigazione laterale
  • Autonomia — le versioni LTE dell'orologio consentono all'app di funzionare senza connessione allo smartphone
  • Sensori — accelerometro, giroscopio, cardiofrequenzimetro, GPS disponibili tramite API native su entrambe le piattaforme

Cos'è Watch App

Watch App è un'applicazione progettata per funzionare su dispositivi indossabili: Apple Watch (watchOS) e smartwatch con Wear OS. La differenza principale rispetto a un'app mobile è il fattore di forma. Lo schermo dell'orologio ha una diagonale di 1,5–2 pollici (contro i 6–7 pollici di uno smartphone), limitando la quantità di informazioni visualizzate contemporaneamente. L'interazione con l'app è breve — l'utente controlla ora, notifica, frequenza cardiaca o passi in 5–15 secondi, poi abbassa il braccio.

Scenari chiave di Watch App: tracker fitness (passi, frequenza cardiaca, calorie, sonno), notifiche (messaggi, chiamate, calendario), azioni rapide (avviare timer, rispondere a un messaggio con la voce, controllare la musica), compagno (telecomando fotocamera, chiavi auto, pagamento NFC). Secondo Counterpoint Research (2026), il mercato globale degli smartwatch supera i 150 milioni di dispositivi all'anno, di cui Apple Watch detiene il 35%, Wear OS il 20%, il resto Fitbit, Garmin e altri.

Limitazioni di Watch App: schermo piccolo (fino a 2 pollici), durata limitata della batteria (fino a 18–24 ore), nessuna tastiera completa (solo input vocale o dettatura), limite attività in background (watchOS — fino a 10 minuti, Wear OS — fino a 5 minuti), necessità di sincronizzazione con il telefono per la maggior parte delle funzioni. A partire da watchOS 6 (2019) e Wear OS 3 (2022), le app possono funzionare autonomamente tramite modulo LTE senza essere accoppiate a un telefono.

Apple Watch: watchOS e SwiftUI

watchOS è il sistema operativo di Apple per smartwatch, basato su iOS e che utilizza gli stessi framework (Foundation, UIKit in versione adattata, SwiftUI). Lo sviluppo avviene in Xcode con Swift. Il framework UI principale è SwiftUI, che fornisce componenti specifici di watchOS: TabView con carosello, NavigationStack, Digital Crown tramite DigitalCrownModifier, menu a pressione prolungata.

Navigazione su watchOS è costruita su un paradigma gerarchico. Elementi principali: pila gerarchica (NavigationStack con ritorno automatico), presentazioni modali (sheet), navigazione a pagine (tramite TabView con .tabViewStyle(.page)), menu contestuali con pressione prolungata. La Digital Crown consente di scorrere il contenuto e modificare i valori. Gesti: tocco, pressione prolungata, scorrimento, Force Touch (fino a watchOS 7), rotazione della Digital Crown.

Framework chiave di watchOS: HealthKit (accesso ai dati sanitari — frequenza cardiaca, passi, sonno, ECG), CoreMotion (accelerometro, giroscopio), WatchConnectivity (scambio dati con iPhone), ClockKit (complicazioni sul quadrante), BackgroundTasks (aggiornamenti in background fino a 10 minuti), ARKit (effetti FaceTime su Series 9+). Un Watch App può essere completa (app separata nel dock) o un'estensione (simultanea con la versione iOS).

Wear OS: Kotlin e Compose

Wear OS è la piattaforma di Google per smartwatch, basata su Android. Lo sviluppo moderno avviene in Kotlin con Jetpack Compose for Wear OS — un insieme di componenti ottimizzati per schermi rotondi: Scaffold, ScalingLazyColumn, Chip, Button, Card, Stepper. A differenza di Compose per mobile, Wear OS utilizza propri modificatori: scrollable per lo scorrimento verticale, swipable per lo scorrimento, RotaryInput per il controllo della corona.

Navigazione su Wear OS utilizza un pannello laterale (SwipeToDismiss) e schermi a schede. Elementi principali: SwipeDismissableNavHost (navigazione con scorrimento indietro), posizionamento schermi (ScalingLazyColumn per elenchi), carosello orizzontale (Carousel), quadrante orologio (WatchFace tramite WatchFaceService). Google raccomanda di usare lo scorrimento laterale per tornare indietro e lo scorrimento verticale per gli elenchi. Il pulsante di accensione dell'orologio apre l'elenco delle app recenti.

Salute e sensori su Wear OS: Health Services API (passi, frequenza cardiaca, calorie, sonno, SpO2 tramite fornitori di dati), SensorManager (accelerometro, giroscopio, barometro, magnetometro), Location Services (GPS tramite FusedLocationProvider). Wear OS 5+ supporta il tracciamento di corsa, camminata, ciclismo e nuoto con rilevamento automatico del tipo di attività. I dati vengono sincronizzati con Google Fit tramite Health Connect.

Esempio di codice: Swift per Apple Watch

Esaminiamo un'app di monitoraggio cardiaco per Apple Watch che utilizza SwiftUI e HealthKit.

swift
import SwiftUI
import HealthKit

// Modello dati per la frequenza cardiaca
struct HeartRateData: Identifiable {
    let id = UUID()
    let bpm: Double
    let date: Date
}

// ViewModel per HealthKit
@Observable
final class HealthViewModel {
    private let healthStore = HKHealthStore()
    var currentHeartRate: Double = 0
    var isAuthorized: Bool = false

    func requestAuthorization() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let types = Set([heartRateType])
        healthStore.requestAuthorization(toShare: nil, read: types) { success, _ in
            Task { @MainActor in
                self.isAuthorized = success
                if success { self.startHeartRateQuery() }
            }
        }
    }

    func startHeartRateQuery() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let query = HKObserverQuery(
            sampleType: heartRateType, predicate: nil
        ) { [weak self] _, _, _ in
            self?.fetchLatestHeartRate()
        }
        healthStore.execute(query)
    }

    private func fetchLatestHeartRate() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
        let query = HKSampleQuery(
            sampleType: heartRateType, predicate: nil,
            limit: 1, sortDescriptors: [sort]
        ) { _, samples, _ in
            guard let sample = samples?.first as? HKQuantitySample else { return }
            let bpm = sample.quantity.doubleValue(for: HKUnit.count().unitDivided(by: .minute()))
            Task { @MainActor in
                self.currentHeartRate = bpm
            }
        }
        healthStore.execute(query)
    }
}

// Schermata principale
struct HeartRateView: View {
    @State private var viewModel = HealthViewModel()

    var body: some View {
        VStack {
            Image(systemName: "heart.fill")
                .foregroundColor(.red)
                .font(.largeTitle)

            Text("\(Int(viewModel.currentHeartRate))")
                .font(.system(size: 60, weight: .bold, design: .rounded))
                .foregroundColor(.red)

            Text("BPM")
                .font(.caption)
                .foregroundColor(.secondary)
        }
        .padding()
        .onAppear(perform: viewModel.requestAuthorization)
    }
}

Punti chiave: HKHealthStore richiede l'accesso ai dati di HealthKit; HKObserverQuery notifica i cambiamenti della frequenza cardiaca in tempo reale; HKSampleQuery ottiene l'ultimo valore. Watch App aggiorna automaticamente l'interfaccia quando currentHeartRate cambia grazie a @Observable. HealthKit elabora i dati localmente sul dispositivo — non sono necessarie richieste al server.

Esempio di codice: Kotlin per Wear OS

App simile per Wear OS in Kotlin con Jetpack Compose e Health Services API.

kotlin
// MainActivity.kt
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.wear.compose.material.*
import androidx.wear.compose.foundation.arc.BasicArcParams
import com.google.android.horologist.health.HealthService

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            WearAppTheme {
                HeartRateScreen()
            }
        }
    }
}

@Composable
fun HeartRateScreen() {
    var heartRate by remember { mutableIntStateOf(0) }
    var isConnected by remember { mutableStateOf(false) }

    LaunchedEffect(Unit) {
        // HealthService — API per accesso ai sensori
        val healthService = HealthService()
        healthService.connect().onSuccess {
            isConnected = true
        }
    }

    Scaffold(
        timeText = { TimeText() },
        vignette = { Vignette(vignettePosition = VignettePosition.TopAndBottom) }
    ) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .scrollable(state = ScrollState),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {
            Icon(
                imageVector = Icons.Filled.Favorite,
                contentDescription = "Frequenza cardiaca",
                modifier = Modifier.size(40.dp),
                tint = MaterialTheme.colors.error
            )

            Text(
                text = heartRate.toString(),
                style = MaterialTheme.typography.display1
            )
            Text(
                text = "BPM",
                style = MaterialTheme.typography.caption2
            )
        }
    }
}

Componenti chiave di Wear OS: Scaffold con TimeText e Vignette per un layout standard; modificatore .scrollable() per compatibilità con schermo rotondo; HealthService (Horologist) per l'accesso al sensore cardiaco. Jetpack Compose for Wear OS adatta automaticamente l'interfaccia a schermi rotondi e quadrati — lo sviluppatore non deve gestire diversi fattori di forma manualmente.

Domande frequenti

In cosa Watch App è diversa da un'app mobile?

Watch App ha uno schermo limitato (diagonale 1,5–2 pollici), funziona con una batteria di piccola capacità e utilizza il controllo gestuale. L'interazione è breve — 5–15 secondi, l'app deve essere il più concisa possibile e mostrare 1–2 metriche chiave.

Quali linguaggi vengono utilizzati per Watch App?

Per Apple Watch — Swift con i framework SwiftUI e WatchKit. Per Wear OS — Kotlin con Jetpack Compose for Wear OS. Entrambe le piattaforme supportano un approccio dichiarativo alla creazione di interfacce.

Watch App può funzionare senza iPhone?

Sì, a partire da Apple Watch Series 3 con LTE e watchOS 6+, l'app può funzionare autonomamente tramite App Store sull'orologio. Wear OS supporta anche versioni LTE con funzionamento autonomo tramite Google Play sull'orologio.

Quali sono le limitazioni di Watch App?

Limitazioni principali: dimensioni dello schermo (fino a 2 pollici), durata limitata della batteria (fino a 18 ore), nessun browser o tastiera completa, limite attività in background (watchOS — fino a 10 minuti, Wear OS — fino a 5 minuti).

Come accedere ai sensori dell'orologio?

Su Apple Watch si utilizza HealthKit (HKHealthStore, HKSampleQuery) per frequenza cardiaca, passi, sonno e CoreMotion per l'accelerometro. Su Wear OS — Health Services API (tramite Horologist) per le metriche sanitarie e SensorManager per i dati grezzi dei sensori.

Riepilogo

  • Watch App — applicazione per smartwatch con sessioni di 5–15 secondi e schermo fino a 2 pollici
  • Apple Watch utilizza watchOS con SwiftUI, NavigationStack, Digital Crown e HealthKit per l'accesso ai sensori
  • Wear OS utilizza Kotlin con Jetpack Compose for Wear OS, Scaffold, ScalingLazyColumn e Health Services API
  • Autonomia — il modulo LTE consente all'app di funzionare senza connessione smartphone su entrambe le piattaforme
  • HealthKit su watchOS e Health Services su Wear OS forniscono accesso a frequenza cardiaca, passi, sonno e SpO2
  • Limitazioni — schermo piccolo, batteria 18–24 ore, limite attività in background, nessuna tastiera
  • Scenari principali — tracker fitness, notifiche, risposte rapide, telecomando, pagamenti NFC

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