PreviewProvider — was es ist, SwiftUI-Protokoll und Einrichtung in Xcode

Autor: IT Sectr Veröffentlicht: 2026-06-27 Lesezeit: 10 Min.

PreviewProvider ist ein SwiftUI-Protokoll, das den Einstiegspunkt für die Generierung von Vorschauen in Xcode Canvas definiert. Die Implementierung des Protokolls ermöglicht es dem Entwickler, die Oberfläche ohne Starten des Simulators zu sehen und beschleunigt die Iteration in der Layout-Phase. Laut Apple Developer Documentation (2026) ist PreviewProvider für alle SwiftUI Views obligatorisch, wenn das Projekt Canvas verwendet — ohne ihn zeigt Canvas keine Benutzeroberfläche an. Erfahren Sie mehr im Artikel über SwiftUI.

Das Wichtigste

  • PreviewProvider — ein SwiftUI-Protokoll zur Generierung von Xcode-Vorschauen in Canvas.
  • Eine Anforderung — das Protokoll enthält nur eine berechnete Eigenschaft previews: some View.
  • Mehrere Vorschauen — Group kann mehrere Zustände einer View anzeigen.
  • Gerätekonfigurationen — previewDevice, previewLayout und displayName konfigurieren die Anzeige.
  • UIKit-Kompatibilität — UIViewRepresentable und UIViewControllerRepresentable unterstützen ebenfalls PreviewProvider.

Was ist PreviewProvider?

PreviewProvider ist ein SwiftUI-Protokoll, das einen Vertrag zur Erstellung von Vorschauinhalten in Xcode Canvas definiert. Das Protokoll enthält eine einzige erforderliche Eigenschaft: previews vom Typ some View. Jeder von previews zurückgegebene Wert wird in Canvas als interaktive Vorschau angezeigt. PreviewProvider erfordert keine Vererbung — eine statische Implementierung in einer Extension ist ausreichend.

Architektonisch ist PreviewProvider kein Teil der SwiftUI-Laufzeit — es ist ausschließlich ein Entwicklungstool. Das Protokoll ist mit dem Attribut @available(iOS 13.0, *) gekennzeichnet und wird nicht in Release-Builds kompiliert, da Xcode bedingte Kompilierung verwendet, um Vorschau-Code aus der Produktion auszuschließen. Das bedeutet, dass PreviewProvider weder die Binärgröße noch die Anwendungsleistung beeinflusst.

Das previews-Protokoll

Die previews-Eigenschaft ist die einzige Anforderung von PreviewProvider. Sie muss jede View zurückgeben: von einem einfachen Text bis zu einer komplexen Hierarchie mit Group und ForEach. Xcode rendert die zurückgegebene View in Canvas unter Anwendung der Systemeinstellungen (Design, Größe, Schriftart).

swift
import SwiftUI

struct GreetingView: View {
    let name: String
    
    var body: some View {
        Text("Hello, \(name)!")
            .padding()
    }
}

// PreviewProvider — static implementation
struct GreetingView_Previews: PreviewProvider {
    static var previews: some View {
        GreetingView(name: "World")
    }
}

Namenskonvention: Apple empfiehlt, die Vorschau-Struktur als {ViewName}_Previews zu benennen. Dies ist keine Compiler-Anforderung, verbessert jedoch die Lesbarkeit und Navigation im Projekt. Xcode fügt diese Vorlage automatisch beim Erstellen einer neuen SwiftUI-Datei ein.

Wie PreviewProvider funktioniert: Protokoll und previews-Methode

Der Arbeitsmechanismus von PreviewProvider basiert auf statischem Dispatch: Xcode kompiliert die PreviewProvider-Erweiterung nur für die Debug-Konfiguration und ruft previews während des Canvas-Erstellungsprozesses auf. Bei jeder Codeänderung kompiliert Xcode nur die geänderten PreviewProvider neu, was nahezu sofortige Vorschauaktualisierungen gewährleistet.

SwiftUI garantiert keine exakte Übereinstimmung zwischen der Vorschau und der endgültigen Benutzeroberfläche auf einem Simulator oder Gerät — Canvas verwendet vereinfachtes Rendering. Animationen mit Verzögerungen können falsch angezeigt werden, und einige UIKit-Komponenten (MapKit, WebView) werden ohne zusätzliche Konfiguration nicht in Canvas gerendert.

Mehrere Vorschauen über Group

Group ermöglicht die gleichzeitige Anzeige mehrerer Zustände einer View und beschleunigt so die Iteration beim Layout verschiedener Konfigurationen. Jede Vorschau innerhalb von Group wird unabhängig gerendert.

swift
struct ButtonView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            ButtonView(title: "Primary", style: .primary)
                .previewDisplayName("Primary")
            
            ButtonView(title: "Disabled", style: .primary)
                .disabled(true)
                .previewDisplayName("Disabled")
            
            ButtonView(title: "Secondary", style: .secondary)
                .previewDisplayName("Secondary")
        }
    }
}

previewDisplayName fügt jeder Vorschau in Canvas eine Beschriftung hinzu, was besonders beim Vergleich mehrerer Zustände nützlich ist. Die maximale Anzahl von Vorschauen in Group ist nicht begrenzt, aber mehr als 6–8 verlangsamen Canvas.

Konfiguration von Vorschauen in Xcode

Xcode bietet mehrere Modifikatoren zur Konfiguration der Vorschauanzeige. Die wichtigsten: previewDevice — emuliert ein bestimmtes Gerät (iPhone 16 Pro, iPad Air, Apple Watch Ultra), previewLayout — legt die Größe fest (device, fixed, sizeThatFits). Die Kombination dieser Modifikatoren gibt die vollständige Kontrolle über die Vorschauumgebung.

previewDevice akzeptiert eine Zeichenfolge mit dem Gerätenamen, z. B. „iPhone 16 Pro" oder „iPad Pro 13-inch (M4)". Die Liste der verfügbaren Geräte hängt von den in Xcode installierten Simulatoren ab. Wenn das Gerät nicht gefunden wird, zeigt Canvas die Vorschau auf dem Standardgerät ohne Fehler an.

ModifikatorBeschreibungBeispiel
previewDeviceGeräteemulation.previewDevice("iPhone 16 Pro")
previewLayoutGrößenmodus.previewLayout(.sizeThatFits)
previewDisplayNameVorschau-Beschriftung.previewDisplayName("Dark Mode")
preferredColorSchemeFarbschema.preferredColorScheme(.dark)
dynamicTypeSizeSchriftgröße.dynamicTypeSize(.xxxLarge)

Vorschauen für verschiedene Geräte

Übliche Praxis ist es, eine View auf mehreren Geräten gleichzeitig anzuzeigen, um die Anpassungsfähigkeit zu prüfen. Dazu wird ForEach mit einem Array von Gerätenamen verwendet.

swift
struct AdaptiveView_Previews: PreviewProvider {
    static var previews: some View {
        ForEach(["iPhone SE (3rd generation)", "iPhone 16 Pro Max", "iPad Pro 13-inch (M4)"], id: \.self) { device in
            AdaptiveView()
                .previewDevice(.previewDevice(device))
                .previewDisplayName(device)
        }
    }
}

PreviewProvider-Beispiele

Praktische Beispiele zeigen verschiedene Verwendungsszenarien von PreviewProvider: von einfachen Vorschauen bis zu komplexen Konfigurationen mit Live-Daten und UIKit-Kompatibilität.

Vorschau mit Mock-Daten

Mock-Daten sind ein Standardmuster für Vorschauen, wenn eine View ein Modell akzeptiert. Anstelle einer echten API werden Testdaten eingesetzt, was eine visuelle Überprüfung des UI-Zustands ohne Starten der Anwendung ermöglicht.

swift
struct UserProfileView: View {
    let user: User
    
    var body: some View {
        VStack {
            AsyncImage(url: user.avatarURL)
                .clipShape(Circle())
            Text(user.name)
                .font(.title)
            Text(user.bio)
                .font(.body)
                .foregroundColor(.secondary)
        }
    }
}

struct UserProfileView_Previews: PreviewProvider {
    static var previews: some View {
        UserProfileView(user: .mock)
            .previewDisplayName("Profile")
        
        UserProfileView(user: .mockLongName)
            .previewDisplayName("Long Name")
    }
}

UIKit-Vorschau über UIViewRepresentable

UIKit-Kompatibilität — PreviewProvider funktioniert auch mit UIKit-Komponenten, die in UIViewRepresentable eingewickelt sind. Dies ermöglicht die Vorschau vorhandener UIKit-Views in SwiftUI Canvas, ohne das gesamte Projekt migrieren zu müssen.

swift
struct MapViewRepresentable: UIViewRepresentable {
    func makeUIView(context: Context) -> MKMapView {
        MKMapView()
    }
    
    func updateUIView(_ uiView: MKMapView, context: Context) {
        // Configure map
    }
}

struct MapView_Previews: PreviewProvider {
    static var previews: some View {
        MapViewRepresentable()
    }
}

PreviewProvider und SwiftUI Canvas

Canvas ist der visuelle Editor von Xcode, der die Ausgabe von PreviewProvider in Echtzeit rendert. Ohne eine PreviewProvider-Implementierung bleibt Canvas leer. Canvas und PreviewProvider arbeiten zusammen: PreviewProvider definiert, was angezeigt wird, Canvas definiert, wo und wie.

Wichtig zu verstehen: Canvas ist die Ausführungsumgebung für Vorschauen, kein Ersatz für PreviewProvider. Selbst wenn der Entwickler Canvas nicht öffnet, kann PreviewProvider zur schnellen Code-Überprüfung über die Popup-Vorschau beim Überfahren des Canvas-Symbols verwendet werden. Laut WWDC 2024 empfiehlt Apple, PreviewProvider für jede View als Entwicklungsstandard zu schreiben, ähnlich wie das Schreiben von Unit-Tests.

KomponenteRolleVerpflichtend
PreviewProviderDefiniert VorschauinhaltErforderlich für Canvas
CanvasRendert Vorschau im EditorOptional (.preview kann verwendet werden)
SwiftUI ViewUI-KomponenteErforderlich

Empfehlung: Schreiben Sie PreviewProvider für jede öffentliche View im Projekt. Dies beschleunigt das Onboarding neuer Entwickler, vereinfacht Code-Reviews und ermöglicht die schnelle Überprüfung visueller Änderungen ohne das gesamte Projekt zu bauen.

Häufige Probleme mit PreviewProvider

Problem 1: Vorschau wird nicht aktualisiert. Wenn Canvas Codeänderungen nicht widerspiegelt, liegt die Ursache meist im DerivedData-Cache. Leeren Sie DerivedData über Product → Clean Build Folder (⇧⌘K) oder löschen Sie manuell den Ordner ~/Library/Developer/Xcode/DerivedData. Nach der Bereinigung erstellt Canvas die Vorschau neu.

Problem 2: PreviewProvider sieht @StateObject nicht. PreviewProvider erstellt eine statische Instanz der View, daher müssen Abhängigkeiten, die eine Injektion erfordern (ViewModels, Dienste), über den Initialisierer oder @StateObject mit einem Standardwert übergeben werden. Verwenden Sie in Vorschauen Mock-Objekte anstelle echter Dienste.

Problem 3: Animationen funktionieren nicht in Canvas. Canvas unterstützt nicht alle SwiftUI-Animationen — insbesondere solche, die von der Zeit abhängen (withAnimation mit Verzögerung, .spring). Zum Testen von Animationen führen Sie die Anwendung auf einem Simulator aus. Canvas eignet sich für die statische Layout-Überprüfung.

PreviewProvider mit Abhängigkeiten reparieren

Abhängigkeitsinjektion ist der beste Weg, PreviewProvider mit komplexen ViewModels zum Funktionieren zu bringen. Erstellen Sie eine separate ViewModel-Instanz mit Testdaten und übergeben Sie sie an den View-Initialisierer.

swift
struct DashboardView: View {
    @StateObject var viewModel: DashboardViewModel
    
    var body: some View {
        List(viewModel.items) { item in
            Text(item.title)
        }
    }
}

struct DashboardView_Previews: PreviewProvider {
    static var previews: some View {
        DashboardView(viewModel: DashboardViewModel.mock)
    }
}

Mock-Erweiterungen: Erstellen Sie eine Extension für das ViewModel, die statische .mock-Instanzen bereitstellt. Dies hält Testdaten nahe am ViewModel und macht PreviewProvider lesbar.

Häufig gestellte Fragen

Muss ich für jede View PreviewProvider schreiben?

Technisch gesehen nein — die Anwendung wird auch ohne PreviewProvider kompiliert. In der Praxis empfehlen Apple und die SwiftUI-Community jedoch, für jede öffentliche View Vorschauen zu schreiben. PreviewProvider beschleunigt die Entwicklung, ermöglicht eine schnelle Layout-Überprüfung auf verschiedenen Geräten und dient als visuelle Dokumentation für das Team.

Warum zeigt PreviewProvider manchmal einen Kompilierungsfehler?

PreviewProvider fügt Code nur in Debug-Builds hinzu, daher können Kompilierungsfehler auftreten, wenn die Vorschau Typen verwendet, die in der Release-Konfiguration nicht verfügbar sind. Fehler treten auch bei Verwendung von @available mit Plattformen auf, die Canvas nicht unterstützen, oder bei Überschreitung der Vorschau-Komplexitätsgrenze.

Wie übergebe ich Daten von einer API an PreviewProvider?

Direkt — gar nicht, PreviewProvider wird isoliert ausgeführt. Verwenden Sie Mock-Daten: Erstellen Sie eine statische Model-Extension mit .mock-Instanzen. Für Views mit @StateObject übergeben Sie ein ViewModel mit Testdaten über den Initialisierer. Dies simuliert reale Daten ohne Netzwerkanfragen.

Beeinflusst PreviewProvider die endgültige IPA-Größe?

Nein, PreviewProvider beeinflusst nicht die Release-Binärgröße. Xcode verwendet bedingte Kompilierung (#if DEBUG / #if !RELEASE), um Vorschau-Code aus Release-Builds auszuschließen. PreviewProvider-Code existiert nur in der Debug-Konfiguration und gelangt nicht in App Store-Builds.

Kann ich PreviewProvider in Xcode debuggen?

Ja, Xcode unterstützt das Debuggen von Vorschauen. Setzen Sie einen Breakpoint innerhalb von previews oder des View-Codes selbst und wählen Sie Product → Preview → Debug Preview. Der Breakpoint wird während des Canvas-Renderings ausgelöst. Dies ist nützlich für die Analyse von Layout-Problemen, die nur in Vorschauen sichtbar sind.

Zusammenfassung

  • PreviewProvider — ein SwiftUI-Protokoll zum Erstellen von Vorschauen in Xcode Canvas mit einer einzigen previews-Eigenschaft.
  • Mehrere Vorschauen — Group mit ForEach ermöglicht die Anzeige mehrerer View-Zustände auf verschiedenen Geräten.
  • Modifikatoren — previewDevice, previewLayout, preferredColorScheme und dynamicTypeSize konfigurieren die Anzeige.
  • Isolation — PreviewProvider funktioniert nur in der Debug-Konfiguration und beeinflusst nicht die Release-IPA-Größe.
  • Mock-Daten — für Vorschauen mit komplexen Modellen verwenden Sie statische .mock-Instanzen.
  • UIKit-Unterstützung — über UIViewRepresentable funktioniert PreviewProvider auch mit UIKit-Komponenten.

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.

Projekt besprechen

Lesen Sie auch