Canvas in Xcode — cos'è, editor SwiftUI e lavoro con le anteprime

Autore: IT Sectr Pubblicato: 2026-06-27 Tempo di lettura: 10 min

Canvas è un editor di anteprima interattivo di Xcode che visualizza SwiftUI View in tempo reale senza avviare il simulatore. Canvas si aggiorna automaticamente a ogni modifica del codice e supporta gesti, navigazione e modalità scura. Secondo la Apple Developer Documentation (2026), Canvas utilizza un processo di rendering separato PreviewProviderExtension, che consente di modificare il codice e vedere immediatamente il risultato senza ricompilare l'intero progetto. Ulteriori informazioni su SwiftUI nell'articolo su SwiftUI.

Punti chiave

  • Canvas — editor di anteprima interattivo di Xcode per SwiftUI View in tempo reale.
  • PreviewProvider — protocollo obbligatorio per Canvas: senza di esso, l'editor è vuoto.
  • Aggiornamento automatico — Canvas ridisegna l'interfaccia a ogni modifica del codice senza compilare il progetto.
  • Interattività — Canvas supporta gesti, navigazione, modalità scura ed emulazione dispositivi.
  • Limitazioni UIKit — alcuni componenti UIKit (MapKit, WebView) non vengono renderizzati in Canvas.

Cos'è Canvas in Xcode?

Canvas è un editor di anteprima integrato in Xcode, presentato per la prima volta in Xcode 11 insieme a SwiftUI. Si trova nel pannello destro dell'editor accanto al codice e mostra un'anteprima live della SwiftUI View corrente. Canvas funziona in tempo reale: ogni modifica al codice si riflette istantaneamente nell'anteprima senza ricompilazione manuale.

Architetturalmente, Canvas è un processo separato (Preview Provider Extension) che Xcode avvia all'apertura di Canvas. Il processo carica il PreviewProvider compilato, renderizza il risultato tramite Metal e lo visualizza nel pannello dell'editor. Se PreviewProvider non è implementato, Canvas mostra un segnaposto “Preview paused — No preview provider found”.

Interfaccia di Canvas

L'interfaccia di Canvas include una barra degli strumenti con selezione del dispositivo, orientamento, schema colori e scala. I pulsanti Live Preview, Selectable e Embed In Diagram cambiano le modalità di interazione. Canvas supporta la vista divisa: è possibile aprire più Canvas per file diversi nello stesso spazio di lavoro.

Elemento CanvasScopo
Selettore dispositivoSelezionare il dispositivo per l'anteprima (iPhone, iPad, Apple Watch)
Commutatore orientamentoPassare da verticale a orizzontale (iOS, iPadOS)
Schema coloriTema chiaro/scuro
Cursore Dynamic TypeScala del carattere per test di accessibilità
Live PreviewModalità interattiva con supporto gesti
Modalità selezionabileIspezione degli elementi dell'interfaccia

Come funziona Canvas interattivo

Live Preview è la funzionalità chiave di Canvas che rende le anteprime interattive. In questa modalità, Canvas renderizza la View in un processo separato e passa i gesti (tocco, scorrimento, swipe) al runtime di SwiftUI. L'utente può premere pulsanti, compilare campi di testo e testare la navigazione senza avviare il simulatore.

SwiftUI elabora i gesti in Canvas attraverso lo stesso sistema di eventi di un dispositivo reale. La differenza sta nelle prestazioni: Canvas utilizza il rendering software tramite Metal, mentre il simulatore utilizza la grafica dell'host. Ciò significa che le animazioni complesse in Canvas potrebbero funzionare più lentamente o avere un aspetto visivamente diverso.

Processo di aggiornamento di Canvas

L'aggiornamento di Canvas avviene in tre fasi. Innanzitutto, Xcode rileva la modifica del file e compila in modo incrementale solo il PreviewProvider modificato. Quindi, il nuovo modulo binario viene caricato nel processo PreviewProviderExtension. Infine, SwiftUI ricrea la View e la renderizza tramite Metal. L'intero ciclo richiede 0,5–2 secondi a seconda della complessità della View.

swift
struct TappableButton: View {
    @State private var count = 0
    
    var body: some View {
        Button("Tapped \(count) times") {
            count += 1
        }
        .buttonStyle(.borderedProminent)
    }
}

struct TappableButton_Previews: PreviewProvider {
    static var previews: some View {
        TappableButton()
    }
}

Interattività: quando Live Preview è in esecuzione, il pulsante in Canvas funziona come uno reale — il contatore aumenta a ogni tocco e viene visualizzata l'animazione di pressione. Ciò consente di testare la logica dei pulsanti senza il simulatore.

Configurazione di Canvas

Impostazioni di base di Canvas sono disponibili tramite il menu Editor → Canvas o tramite i pulsanti della barra degli strumenti di Canvas. Le opzioni principali includono la selezione del dispositivo, l'orientamento, il tema scuro e la scala Dynamic Type. Per impostazioni permanenti, utilizzare i modificatori PreviewProvider nel codice.

Impostazioni avanzate includono: Auto Activate Preview — attivazione automatica di Canvas all'apertura di un file SwiftUI; Live Preview — modalità gesti; Draw Live Edges — visualizzazione dei bordi della vista; Show Preview Sizes — dimensione dell'area di anteprima. Xcode salva queste impostazioni in modo portatile nei file del workspace/progetto.

Configurazione tramite PreviewProvider

Configurazione programmatica offre un controllo più preciso su Canvas. I modificatori applicati nelle anteprime sovrascrivono le impostazioni della barra degli strumenti e vengono salvati nel codice — tutti i membri del team li vedono tramite git.

swift
struct SettingsView_Previews: PreviewProvider {
    static var previews: some View {
        SettingsView()
            .previewDevice("iPhone 16 Pro")
            .previewLayout(.device)
            .preferredColorScheme(.dark)
            .dynamicTypeSize(.xxxLarge)
            .previewDisplayName("Dark + XL Text")
    }
}

previewLayout con .device mostra lo schermo completo del dispositivo, mentre .sizeThatFits mostra un'anteprima compatta con dimensione adattata al contenuto. Per widget e componenti piccoli, utilizzare .sizeThatFits — risparmia spazio nell'editor.

Esempi di lavoro con Canvas

Esempio 1: test di adattabilità. Utilizzare ForEach con più dispositivi e schemi colore per garantire che l'interfaccia appaia bene su tutti gli schermi. Canvas aggiorna tutte le anteprime contemporaneamente, consentendo di individuare problemi di layout prima di avviare il simulatore.

Esempio 2: anteprima con dati. Per Views che mostrano contenuti dinamici (elenchi, profili, schede), creare più istanze con dati diversi nelle anteprime. Questo è più veloce che passare da una schermata all'altra nel simulatore e inserire dati.

Anteprima con stati diversi

Gruppo di anteprime tramite Group o ForEach consente di visualizzare tutti gli stati del componente su un unico pannello. Per gli elenchi questo è particolarmente comodo: elenco vuoto, caricamento, errore ed elenco popolato sono visibili contemporaneamente.

swift
struct LoadingStateView: View {
    let state: LoadingState
    
    var body: some View {
        switch state {
        case .loading:
            ProgressView()
        case .loaded(let items):
            List(items, id: \.self) { Text($0) }
        case .error(let message):
            Text(message).foregroundColor(.red)
        }
    }
}

struct LoadingStateView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            LoadingStateView(state: .loading)
                .previewDisplayName("Loading")
            LoadingStateView(state: .loaded(["Item 1", "Item 2"]))
                .previewDisplayName("Loaded")
            LoadingStateView(state: .error("Failed to load"))
                .previewDisplayName("Error")
        }
    }
}

Canvas vs Simulatore — confronto

Canvas e Simulatore si completano a vicenda, anziché sostituirsi. Canvas è ideale per iterazioni rapide durante il layout: modificare il codice con feedback immediato. Il Simulatore è necessario per la verifica finale: prestazioni reali, gesti personalizzati, avvisi di sistema e integrazione con funzionalità hardware (fotocamera, sensori).

Secondo la WWDC 2024, Apple posiziona Canvas come strumento per le fasi iniziali dello sviluppo e il Simulatore per i test di integrazione. Si consiglia di dedicare il 60% del tempo di sviluppo dell'interfaccia in Canvas e il 40% — ai test sul simulatore o dispositivo.

CaratteristicaCanvasSimulatore
Velocità di aggiornamento0,5–2 sec (incrementale)10–60 sec (compilazione completa)
GestiBase (tocco, scorrimento)Tutti (pizzico, rotazione, 3D Touch)
Fotocamera/giroscopioNon supportatoSimulato
AnimazioniLimitateComplete
Notifiche pushNon supportatoSupportato
ReteAttraverso il processo XcodeStack di rete completo

Raccomandazione: progettare in Canvas, testare sul simulatore. Utilizzare Live Preview per la logica gestuale di pulsanti e navigazione, ma eseguire i test finali di animazioni, richieste di rete e funzioni hardware sul simulatore o su un dispositivo reale.

Consigli per lavorare con Canvas

Consiglio 1: utilizzare la modalità selezionabile. In modalità selezionabile (icona cursore), è possibile fare clic su qualsiasi elemento dell'anteprima e visualizzarne la gerarchia, i modificatori e il frame nell'ispettore. Ciò è utile per il debug del layout: si vedono immediatamente padding, offset e dimensione dell'elemento senza stampe.

Consiglio 2: Embed In Diagram. Canvas può raggruppare elementi: selezionare due o più Views, fare clic su Embed In Diagram — Canvas creerà VStack/HStack/ZStack e ricostruirà il codice automaticamente. Questo accelera la creazione di gerarchie complesse senza digitare manualmente le parentesi.

Consiglio 3: cancellare la cache di anteprima di Canvas. Se Canvas smette di aggiornarsi, cancellare Product → Preview Cache. Xcode eliminerà i binari cache di PreviewProvider e li ricostruirà da zero. Questo risolve il 90% dei problemi di blocco di Canvas.

Ottimizzazione della velocità di Canvas

Canvas lento è solitamente causato da un numero eccessivo di anteprime. Per Views complesse, utilizzare una sola anteprima invece di un gruppo di 6–8. Disattivare Live Preview per Views senza gesti — la modalità statica esegue il rendering più velocemente. Assicurarsi che PreviewProvider utilizzi mock invece di richieste di rete reali.

swift
// Quick debug: minimal preview
struct ComplexView_Previews: PreviewProvider {
    static var previews: some View {
        ComplexView()
            .previewLayout(.sizeThatFits) // compact mode
    }
}

previewLayout(.sizeThatFits) è la modalità più veloce di Canvas perché renderizza solo il contenuto della View senza i bordi del dispositivo. Utilizzarla per il layout quotidiano, attivando .device solo per i controlli finali.

Domande frequenti

Perché Canvas non mostra l'anteprima?

Il motivo più comune è l'assenza di PreviewProvider per la View corrente. Canvas richiede l'implementazione del protocollo PreviewProvider che restituisce una View nella proprietà previews. Altri motivi: errore di compilazione nel codice, problemi con DerivedData o il processo PreviewProviderExtension non si è avviato.

Si può eseguire il debug del codice in Canvas?

Sì, Xcode supporta il debug delle anteprime tramite Product → Preview → Debug Preview. Dopo l'attivazione, un breakpoint nel codice della View scatterà durante il rendering di Canvas. Ciò consente di analizzare i valori delle variabili in runtime e verificare la logica di visualizzazione.

Canvas supporta i componenti UIKit?

Canvas supporta i componenti UIKit tramite UIViewRepresentable e UIViewControllerRepresentable. Tuttavia, alcuni componenti non vengono renderizzati: MapKit, WebView, video tramite AVPlayer, viste Metal/GLKit personalizzate. Canvas non emula le capacità hardware, quindi fotocamera e sensori non sono disponibili.

Come velocizzare Canvas quando è lento?

Ridurre il numero di anteprime in un Group (max 3–4), utilizzare previewLayout(.sizeThatFits) invece di .device, disattivare Live Preview per Views senza gesti. Cancellare Product → Preview Cache. Assicurarsi che PreviewProvider non effettui richieste di rete — utilizzare dati mock.

Canvas influisce sulla dimensione del progetto?

Canvas non influisce sulla dimensione dell'IPA di rilascio — il codice PreviewProvider viene compilato solo nella configurazione Debug. Durante lo sviluppo, Canvas aggiunge fino a 100–200 MB di cache in DerivedData, gestita automaticamente da Xcode. La pulizia regolare di DerivedData libera spazio.

Riepilogo

  • Canvas — editor di anteprima interattivo di Xcode per SwiftUI con aggiornamenti in tempo reale.
  • PreviewProvider — prerequisito per Canvas: definisce il contenuto da visualizzare.
  • Live Preview — modalità con supporto gesti per testare pulsanti, navigazione e moduli.
  • Configurazione — tramite la barra degli strumenti di Canvas e modificatori programmatici di PreviewProvider.
  • Canvas vs Simulatore — Canvas per il layout, Simulatore per i test di performance finali.
  • Ottimizzazione — .sizeThatFits, anteprime minime, disattivazione di Live Preview accelerano Canvas.

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