From 28509d16926894a9164d73bfd6afe0800b4f81da Mon Sep 17 00:00:00 2001 From: Drew McCormack Date: Wed, 25 Dec 2024 22:55:33 +0700 Subject: [PATCH] Added alert if a sync detected an unknown model version. --- Samples/Forkers/Forkers/Models/Store.swift | 11 +++++++++-- Samples/Forkers/Forkers/Views/ContentView.swift | 6 ++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Samples/Forkers/Forkers/Models/Store.swift b/Samples/Forkers/Forkers/Models/Store.swift index 97cd713d..54f23f1b 100644 --- a/Samples/Forkers/Forkers/Models/Store.swift +++ b/Samples/Forkers/Forkers/Models/Store.swift @@ -26,7 +26,7 @@ class Store { private typealias RepoType = AtomicRepository private let repo: RepoType private let forkedModel: ForkedResource - private let cloudKitExchange: CloudKitExchange + private var cloudKitExchange: CloudKitExchange! private static let repoDirURL: URL = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first! private static let repoFileURL: URL = repoDirURL.appendingPathComponent("Forkers.json") @@ -52,6 +52,8 @@ class Store { } } + var showUpgradeAlert = false + init() throws { // Reads repo from disk if it exists, otherwise creates it anew repo = try AtomicRepository(managedFileURL: Self.repoFileURL) @@ -72,7 +74,12 @@ class Store { try forkedModel.syncMain(with: [.ui, .editingForker]) // Setup CloudKitExchange - cloudKitExchange = try .init(id: "Forkers", forkedResource: forkedModel) + cloudKitExchange = try .init(id: "Forkers", + forkedResource: forkedModel, + unknownModelVersionHandler: { [weak self] error in + self?.showUpgradeAlert = true + } + ) // Set displayed forkers to what is in the repo displayedForkers = uiForkers diff --git a/Samples/Forkers/Forkers/Views/ContentView.swift b/Samples/Forkers/Forkers/Views/ContentView.swift index 51084f91..4a940953 100644 --- a/Samples/Forkers/Forkers/Views/ContentView.swift +++ b/Samples/Forkers/Forkers/Views/ContentView.swift @@ -5,6 +5,7 @@ struct ContentView: View { @State var editorConfig = EditorConfig() var body: some View { + @Bindable var store = store NavigationStack { List { ForEach(store.displayedForkers) { forker in @@ -63,6 +64,11 @@ struct ContentView: View { } } } + .alert("Update Required", isPresented: $store.showUpgradeAlert) { + Button("OK", role: .cancel) { } + } message: { + Text("Please upgrade to the latest version of the app to continue syncing.") + } } } }