diff --git a/Samples/Forkers/Forkers/Models/Store.swift b/Samples/Forkers/Forkers/Models/Store.swift index 97cd713..54f23f1 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 51084f9..4a94095 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.") + } } } }