Canvas ist ein interaktiver Xcode-Vorschau-Editor, der SwiftUI View in Echtzeit anzeigt, ohne den Simulator zu starten. Canvas wird bei jeder Codeänderung automatisch aktualisiert und unterstützt Gesten, Navigation und den dunklen Modus. Laut Apple Developer Documentation (2026) verwendet Canvas einen separaten Renderer-Prozess PreviewProviderExtension, der es ermöglicht, Code zu bearbeiten und das Ergebnis sofort zu sehen, ohne das gesamte Projekt neu zu kompilieren. Lesen Sie mehr über SwiftUI im Artikel über SwiftUI.
Wichtige Punkte
Canvas ist ein integrierter Xcode-Vorschau-Editor, der erstmals in Xcode 11 zusammen mit SwiftUI vorgestellt wurde. Er befindet sich im rechten Bereich des Editors neben dem Code und zeigt eine Live-Vorschau der aktuellen SwiftUI View an. Canvas arbeitet in Echtzeit: Jede Änderung im Code wird sofort in der Vorschau ohne manuelle Neukompilierung widergespiegelt.
Architektonisch ist Canvas ein separater Prozess (Preview Provider Extension), den Xcode beim Öffnen von Canvas startet. Der Prozess lädt den kompilierten PreviewProvider, rendert das Ergebnis über Metal und zeigt es im Editorbereich an. Wenn PreviewProvider nicht implementiert ist, zeigt Canvas einen Platzhalter „Preview paused — No preview provider found“ an.
Die Canvas-Oberfläche enthält eine Symbolleiste mit Optionen zur Geräteauswahl, Ausrichtung, Farbschema und Skalierung. Die Schaltflächen Live Preview, Selectable und Embed In Diagram wechseln die Interaktionsmodi. Canvas unterstützt die Split-Ansicht: Sie können mehrere Canvas für verschiedene Dateien im selben Arbeitsbereich öffnen.
| Canvas-Element | Zweck |
|---|---|
| Geräteauswahl | Gerät für die Vorschau auswählen (iPhone, iPad, Apple Watch) |
| Ausrichtung umschalten | Hoch-/Querformat wechseln (iOS, iPadOS) |
| Farbschema | Helles/dunkles Design |
| Dynamic-Type-Regler | Schriftgröße für Barrierefreiheitstests |
| Live Preview | Interaktiver Modus mit Gestenunterstützung |
| Auswählmodus | Inspizieren von Oberflächenelementen |
Live Preview ist die wichtigste Funktion von Canvas, die Vorschauen interaktiv macht. In diesem Modus rendert Canvas die View in einem separaten Prozess und leitet Gesten (Tippen, Wischen, Scrollen) an die SwiftUI-Laufzeit zurück. Der Benutzer kann Tasten drücken, Textfelder ausfüllen und die Navigation testen, ohne den Simulator zu starten.
SwiftUI verarbeitet Gesten in Canvas über dasselbe Ereignissystem wie auf einem echten Gerät. Der Unterschied liegt in der Leistung: Canvas verwendet Software-Rendering über Metal, während der Simulator Host-Grafiken nutzt. Das bedeutet, dass komplexe Animationen in Canvas langsamer laufen oder visuell anders aussehen können.
Die Canvas-Aktualisierung erfolgt in drei Schritten. Zuerst erkennt Xcode die Dateiänderung und kompiliert nur den geänderten PreviewProvider inkrementell. Dann wird das neue Binärmodul in den PreviewProviderExtension-Prozess geladen. Schließlich erstellt SwiftUI die View neu und rendert sie über Metal. Der gesamte Zyklus dauert je nach Komplexität der View 0,5–2 Sekunden.
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()
}
}
Interaktivität: Bei laufender Live Preview funktioniert die Schaltfläche in Canvas wie eine echte — der Zähler erhöht sich bei jedem Tippen und die Drück-Animation wird angezeigt. So können Sie die Button-Logik ohne Simulator testen.
Grundeinstellungen von Canvas sind über das Menü Editor → Canvas oder über die Symbolleistenschaltflächen von Canvas verfügbar. Zu den Hauptoptionen gehören die Auswahl des Geräts, der Ausrichtung, des dunklen Designs und der Dynamic-Type-Skalierung. Für dauerhafte Einstellungen verwenden Sie PreviewProvider-Modifikatoren im Code.
Erweiterte Einstellungen umfassen: Auto Activate Preview — automatische Canvas-Aktivierung beim Öffnen einer SwiftUI-Datei; Live Preview — Gestenmodus; Draw Live Edges — Anzeigen von View-Grenzen; Show Preview Sizes — Größe des Vorschaubereichs. Xcode speichert diese Einstellungen portabel in Arbeitsbereichs-/Projektdateien.
Programmatische Konfiguration bietet eine präzisere Steuerung von Canvas. In Vorschauen angewandte Modifikatoren überschreiben die Symbolleisteneinstellungen und werden im Code gespeichert — alle Teammitglieder sehen sie über git.
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 mit .device zeigt den gesamten Gerätebildschirm an, während .sizeThatFits eine kompakte Vorschau mit an den Inhalt angepasster Größe zeigt. Für Widgets und kleine Komponenten verwenden Sie .sizeThatFits — es spart Platz im Editor.
Beispiel 1: Anpassungsfähigkeit testen. Verwenden Sie ForEach mit mehreren Geräten und Farbschemata, um sicherzustellen, dass die Benutzeroberfläche auf allen Bildschirmen gut aussieht. Canvas aktualisiert alle Vorschauen gleichzeitig, sodass Sie Layoutprobleme erkennen können, bevor Sie den Simulator starten.
Beispiel 2: Vorschau mit Daten. Für Views, die dynamische Inhalte (Listen, Profile, Karten) anzeigen, erstellen Sie mehrere Instanzen mit verschiedenen Daten in den Vorschauen. Das ist schneller, als im Simulator zwischen Bildschirmen zu wechseln und Daten einzugeben.
Vorschaugruppe über Group oder ForEach ermöglicht es, alle Komponentenzustände auf einem Bedienfeld anzuzeigen. Für Listen ist dies besonders praktisch: leere Liste, Laden, Fehler und gefüllte Liste sind gleichzeitig sichtbar.
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 und Simulator ergänzen sich, anstatt sich zu ersetzen. Canvas ist ideal für schnelle Iterationen beim Layout: Code bearbeiten mit sofortigem Feedback. Der Simulator ist für die endgültige Überprüfung notwendig: echte Leistung, benutzerdefinierte Gesten, Systemalarme und Integration mit Hardwarefunktionen (Kamera, Sensoren).
Laut WWDC 2024 positioniert Apple Canvas als Werkzeug für die frühe Entwicklungsphase und den Simulator für Integrationstests. Es wird empfohlen, 60% der UI-Entwicklungszeit in Canvas und 40% — zum Testen auf dem Simulator oder Gerät zu verbringen.
| Eigenschaft | Canvas | Simulator |
|---|---|---|
| Aktualisierungsgeschwindigkeit | 0,5–2 Sek. (inkrementell) | 10–60 Sek. (vollständiger Build) |
| Gesten | Basis (Tippen, Scrollen) | Alle (Zusammenziehen, Drehen, 3D Touch) |
| Kamera/Gyroskop | Nicht unterstützt | Simuliert |
| Animationen | Eingeschränkt | Vollständig |
| Push-Benachrichtigungen | Nicht unterstützt | Unterstützt |
| Netzwerk | Über Xcode-Prozess | Vollständiger Netzwerkstapel |
Empfehlung: Entwerfen Sie in Canvas, testen Sie auf dem Simulator. Verwenden Sie Live Preview für die Gestenlogik von Schaltflächen und Navigation, aber führen Sie abschließende Tests von Animationen, Netzwerkanfragen und Hardwarefunktionen auf dem Simulator oder einem echten Gerät durch.
Tipp 1: Verwenden Sie den Auswählmodus. Im Auswählmodus (Cursor-Symbol) können Sie auf jedes Element in der Vorschau klicken und seine Hierarchie, Modifikatoren und Rahmen im Inspektor sehen. Dies ist nützlich zum Debuggen von Layouts: Sie sehen sofort Padding, Offset und Elementgröße ohne Print-Anweisungen.
Tipp 2: Embed In Diagram. Canvas kann Elemente gruppieren: Wählen Sie zwei oder mehr Views aus, klicken Sie auf Embed In Diagram — Canvas erstellt VStack/HStack/ZStack und baut den Code automatisch um. Dies beschleunigt die Erstellung komplexer Hierarchien ohne manuelles Eingeben von Klammern.
Tipp 3: Canvas Preview Cache leeren. Wenn Canvas nicht mehr aktualisiert wird, leeren Sie Product → Preview Cache. Xcode löscht die zwischengespeicherten PreviewProvider-Binärdateien und baut sie von Grund auf neu auf. Dies löst 90% der Probleme mit eingefrorenem Canvas.
Langsames Canvas wird normalerweise durch eine übermäßige Anzahl von Vorschauen verursacht. Verwenden Sie für komplexe Views nur eine Vorschau anstelle einer Gruppe von 6–8. Schalten Sie Live Preview für Views ohne Gesten aus — der statische Modus rendert schneller. Stellen Sie sicher, dass PreviewProvider Mocks anstelle von echten Netzwerkanfragen verwendet.
// Quick debug: minimal preview
struct ComplexView_Previews: PreviewProvider {
static var previews: some View {
ComplexView()
.previewLayout(.sizeThatFits) // compact mode
}
}
previewLayout(.sizeThatFits) ist der schnellste Canvas-Modus, da nur der View-Inhalt ohne Geräterahmen gerendert wird. Verwenden Sie ihn für die tägliche Layout-Arbeit und aktivieren Sie .device nur für die endgültige Überprüfung.
Häufig gestellte Fragen
Der häufigste Grund ist das Fehlen von PreviewProvider für die aktuelle View. Canvas erfordert die Implementierung des PreviewProvider-Protokolls, das eine View in der previews-Eigenschaft zurückgibt. Andere Gründe: Kompilierungsfehler im Code, Probleme mit DerivedData oder der PreviewProviderExtension-Prozess wurde nicht gestartet.
Ja, Xcode unterstützt das Debuggen von Vorschauen über Product → Preview → Debug Preview. Nach der Aktivierung wird ein Breakpoint im View-Code beim Rendern von Canvas ausgelöst. Dies ermöglicht die Analyse von Laufzeitvariablenwerten und die Überprüfung der Anzeigelogik.
Canvas unterstützt UIKit-Komponenten über UIViewRepresentable und UIViewControllerRepresentable. Einige Komponenten werden jedoch nicht gerendert: MapKit, WebView, Video über AVPlayer, benutzerdefinierte Metal/GLKit-Ansichten. Canvas emuliert keine Hardware-Funktionen, daher sind Kamera und Sensoren nicht verfügbar.
Reduzieren Sie die Anzahl der Vorschauen in einem Group (max. 3–4), verwenden Sie previewLayout(.sizeThatFits) statt .device, schalten Sie Live Preview für Views ohne Gesten aus. Leeren Sie Product → Preview Cache. Stellen Sie sicher, dass PreviewProvider keine Netzwerkanfragen stellt — verwenden Sie Mock-Daten.
Canvas beeinflusst nicht die Größe des Release-IPA — PreviewProvider-Code wird nur in der Debug-Konfiguration kompiliert. Während der Entwicklung fügt Canvas bis zu 100–200 MB Cache in DerivedData hinzu, der von Xcode automatisch verwaltet wird. Regelmäßiges Bereinigen von DerivedData gibt Speicherplatz frei.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch