From 07f9619217e057d445f1b963e9da3b87f8402412 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Fri, 16 Sep 2022 21:36:30 -0400 Subject: [PATCH] Fix not being able to import keys on iOS 16 --- OTP/Views/PreferencesView.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/OTP/Views/PreferencesView.swift b/OTP/Views/PreferencesView.swift index d4706cb..9031f62 100644 --- a/OTP/Views/PreferencesView.swift +++ b/OTP/Views/PreferencesView.swift @@ -46,14 +46,22 @@ struct PreferencesView: View { } .fileExporter(isPresented: $isPresentingExport, document: BackupDocument(data: store.data), contentType: .propertyList, defaultFilename: "OTPBackup") { (_) in } - .fileImporter(isPresented: $isPresentingImport, allowedContentTypes: [.propertyList], allowsMultipleSelection: false) { (result) in + .fileImporter(isPresented: $isPresentingImport, allowedContentTypes: [.propertyList]) { (result) in switch result { case let .failure(error): self.importFailedError = error self.isPresentingImportFailedAlert = true - case let .success(urls): + case let .success(url): + guard url.startAccessingSecurityScopedResource() else { + self.importFailedError = ImportError.accessingSecurityScopedResource + self.isPresentingImportFailedAlert = true + return + } + defer { + url.stopAccessingSecurityScopedResource() + } do { - let backup = try BackupDocument(url: urls.first!) + let backup = try BackupDocument(url: url) store.updateFromStore(backup.data, replaceExisting: clearBeforeImport) dismiss() } catch { @@ -71,6 +79,10 @@ struct PreferencesView: View { } } + enum ImportError: LocalizedError { + case accessingSecurityScopedResource + } + } struct PreferencesView_Previews: PreviewProvider {