Verwendung von SyncState
June 11, 2026 · View on GitHub
SyncState ist eine Komponente der AppState-Bibliothek, mit der Sie den App-Zustand über mehrere Geräte hinweg mithilfe von iCloud synchronisieren können. Dies ist besonders nützlich, um Benutzereinstellungen, Einstellungen oder andere wichtige Daten über Geräte hinweg konsistent zu halten.
Übersicht
SyncState nutzt den NSUbiquitousKeyValueStore von iCloud, um kleine Datenmengen über Geräte hinweg synchron zu halten. Dies macht es ideal für die Synchronisierung von leichtgewichtigen Anwendungszuständen wie Einstellungen oder Benutzereinstellungen.
Hauptmerkmale
- iCloud-Synchronisierung: Synchronisieren Sie den Zustand automatisch über alle Geräte, die mit demselben iCloud-Konto angemeldet sind.
- Permanenter Speicher: Daten werden dauerhaft in iCloud gespeichert, was bedeutet, dass sie auch dann erhalten bleiben, wenn die App beendet oder neu gestartet wird.
- Nahezu Echtzeit-Synchronisierung: Zustandsänderungen werden fast sofort auf andere Geräte übertragen.
Hinweis:
SyncStatewird auf watchOS 9.0 und höher unterstützt.
Anwendungsbeispiel
Datenmodell
Angenommen, wir haben eine Struktur namens Settings, die Codable entspricht:
struct Settings: Codable {
var text: String
var isShowingSheet: Bool
var isDarkMode: Bool
}
Definieren eines SyncState
Sie können einen SyncState definieren, indem Sie das Application-Objekt erweitern und die Zustandseigenschaften deklarieren, die synchronisiert werden sollen:
extension Application {
var settings: SyncState<Settings> {
syncState(
initial: Settings(
text: "Hello, World!",
isShowingSheet: false,
isDarkMode: false
),
id: "settings"
)
}
}
Umgang mit externen Änderungen
Um sicherzustellen, dass die App auf externe Änderungen von iCloud reagiert, überschreiben Sie die Funktion didChangeExternally, indem Sie eine benutzerdefinierte Application-Unterklasse erstellen:
class CustomApplication: Application {
override func didChangeExternally(notification: Notification) {
super.didChangeExternally(notification: notification)
DispatchQueue.main.async {
self.notifyChange()
}
}
}
Erstellen von Ansichten zum Ändern und Synchronisieren des Zustands
Im folgenden Beispiel haben wir zwei Ansichten: ContentView und ContentViewInnerView. Diese Ansichten teilen und synchronisieren den Settings-Zustand zwischen sich. ContentView ermöglicht es dem Benutzer, den text zu ändern und isDarkMode umzuschalten, während ContentViewInnerView denselben Text anzeigt und ihn bei Berührung aktualisiert.
struct ContentView: View {
@SyncState(\.settings) private var settings: Settings
var body: some View {
VStack {
TextField("", text: $settings.text)
Button(settings.isDarkMode ? "Light" : "Dark") {
settings.isDarkMode.toggle()
}
Button("Show") { settings.isShowingSheet = true }
}
.preferredColorScheme(settings.isDarkMode ? .dark : .light)
.sheet(isPresented: $settings.isShowingSheet, content: ContentViewInnerView.init)
}
}
struct ContentViewInnerView: View {
@Slice(\.settings, \.text) private var text: String
var body: some View {
Text("\(text)")
.onTapGesture {
text = Date().formatted()
}
}
}
Einrichten der App
Richten Sie schließlich die Anwendung in der @main-Struktur ein. In der Initialisierung bewerben Sie die benutzerdefinierte Anwendung, aktivieren die Protokollierung und laden die iCloud-Speicherabhängigkeit für die Synchronisierung:
@main
struct SyncStateExampleApp: App {
init() {
Application
.promote(to: CustomApplication.self)
.logging(isEnabled: true)
.load(dependency: \.icloudStore)
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Aktivieren des iCloud-Schlüssel-Wert-Speichers
Um die iCloud-Synchronisierung zu aktivieren, stellen Sie sicher, dass Sie dieser Anleitung folgen, um die Funktion des iCloud-Schlüssel-Wert-Speichers zu aktivieren: Erste Schritte mit SyncState.
SyncState: Hinweise zum iCloud-Speicher
Obwohl SyncState eine einfache Synchronisierung ermöglicht, ist es wichtig, die Einschränkungen von NSUbiquitousKeyValueStore zu beachten:
- Speicherlimit: Sie können mit
NSUbiquitousKeyValueStorebis zu 1 MB Daten in iCloud speichern, mit einem Größenlimit von 1 MB pro Schlüssel-Wert-Paar.
Überlegungen zur Migration
Bei der Aktualisierung Ihres Datenmodells ist es wichtig, potenzielle Migrationsherausforderungen zu berücksichtigen, insbesondere bei der Arbeit mit persistenten Daten mit StoredState, FileState oder SyncState. Ohne eine ordnungsgemäße Migrationsbehandlung können Änderungen wie das Hinzufügen neuer Felder oder das Ändern von Datenformaten Probleme beim Laden älterer Daten verursachen.
Hier sind einige wichtige Punkte, die Sie beachten sollten:
- Hinzufügen neuer nicht optionaler Felder: Stellen Sie sicher, dass neue Felder entweder optional sind oder Standardwerte haben, um die Abwärtskompatibilität zu gewährleisten.
- Umgang mit Änderungen des Datenformats: Wenn sich die Struktur Ihres Modells ändert, implementieren Sie eine benutzerdefinierte Dekodierungslogik, um alte Formate zu unterstützen.
- Versionierung Ihrer Modelle: Verwenden Sie ein
version-Feld in Ihren Modellen, um bei Migrationen zu helfen und Logik basierend auf der Datenversion anzuwenden.
Weitere Informationen zur Verwaltung von Migrationen und zur Vermeidung potenzieller Probleme finden Sie im Leitfaden zu Migrationsüberlegungen.
SyncState-Implementierungsleitfaden
Detaillierte Anweisungen zur Konfiguration von iCloud und zur Einrichtung von SyncState in Ihrem Projekt finden Sie im SyncState-Implementierungsleitfaden.
Bewährte Praktiken
- Verwendung für kleine, kritische Daten:
SyncStateist ideal für die Synchronisierung kleiner, wichtiger Zustandsteile wie Benutzereinstellungen, Einstellungen oder Funktionskennzeichen. - Überwachen Sie den iCloud-Speicher: Stellen Sie sicher, dass Ihre Verwendung von
SyncStateinnerhalb der iCloud-Speichergrenzen bleibt, um Probleme bei der Datensynchronisierung zu vermeiden. - Behandeln Sie externe Aktualisierungen: Wenn Ihre App auf Zustandsänderungen reagieren muss, die auf einem anderen Gerät initiiert wurden, überschreiben Sie die Funktion
didChangeExternally, um den Zustand der App in Echtzeit zu aktualisieren.
Fazit
SyncState bietet eine leistungsstarke Möglichkeit, kleine Mengen von Anwendungszuständen über Geräte hinweg über iCloud zu synchronisieren. Es ist ideal, um sicherzustellen, dass Benutzereinstellungen und andere wichtige Daten auf allen Geräten, die mit demselben iCloud-Konto angemeldet sind, konsistent bleiben. Für fortgeschrittenere Anwendungsfälle erkunden Sie andere Funktionen von AppState, wie SecureState und FileState.
Diese Übersetzung wurde automatisch generiert und kann Fehler enthalten. Wenn Sie Muttersprachler sind, freuen wir uns über Ihre Korrekturvorschläge per Pull Request.