Saturday, October 14, 2023
HomeiOS Developmentswift - Troubleshooting iOS RealmSwift database restore from iCloud after app reinstall

swift – Troubleshooting iOS RealmSwift database restore from iCloud after app reinstall


I’ve an app which makes use of realmSwift Database.

I am making an attempt to manually save the database to icloud which works advantageous to date Right here is my code:

Backup:

let fileManager = FileManager.default
non-public func retrieveLocalRealmURL() -> URL {
        let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let documentaryDirectory = urls[0]
        let realmURL = documentaryDirectory.appendingPathComponent("default.realm");
        
        return realmURL
    }
    
    non-public func backupRealmToiCloudDrive() {
        let backgroundQueue = DispatchQueue.world(qos: .background)
        
        backgroundQueue.async {
            guard
                let ubiquityURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)
            else {
                return
            }
                
            let iCloudDriveURL = ubiquityURL.appendingPathComponent("Paperwork")
            let iCloudRealmURL = iCloudDriveURL.appendingPathComponent("default.realm")
            
            let fileExists = FileManager.default.fileExists(atPath: iCloudDriveURL.path, isDirectory: nil)
            
            func copy() {
                let localRealmURL = self.retrieveLocalRealmURL()
                
                do {
                    strive FileManager.default.copyItem(at: localRealmURL, to: iCloudRealmURL)
                    
                    DispatchQueue.fundamental.async {
                        let alert = UIAlertController(title: "Sicherung erfolgreich", message: "Die Datenbank wurde erfolgreich in iCloud wiederhergestellt.", preferredStyle: .alert)
                        alert.addAction(UIAlertAction(title: "OK", fashion: .default, handler: nil))
                        self.current(alert, animated: true, completion: nil)
                    }
                    
                    print("Realm File succesfully uploaded to iCloud")
                } catch {
                    print(error.localizedDescription)
                }
            }
            
            if fileExists {
                self.deleteExistedFile(iCloudRealmURL)
                copy()
                print("File already existts, deleting outdated copy")
            } else {
                do {
                    strive FileManager.default.createDirectory(at: iCloudDriveURL, withIntermediateDirectories: true, attributes: nil)
                    copy()
                } catch {
                    print(error.localizedDescription)
                }
            }
        }
    }

    non-public func deleteExistedFile(_ url: URL) {
        let fileCoordinator = NSFileCoordinator(filePresenter: nil)
        
        fileCoordinator.coordinate(writingItemAt: url, choices: .forDeleting, error: nil) { deleteURL in
            do {
                let fileExists = FileManager.default.fileExists(atPath: deleteURL.path, isDirectory: nil)
                
                if fileExists {
                    strive FileManager.default.removeItem(at: deleteURL)
                }
            } catch {
                print(error.localizedDescription)
            }
        }
    }

And right here is my code to revive from iCloud:

non-public func restoreRealmFromiCloudDrive() {
        let backgroundQueue = DispatchQueue.world(qos: .background)
        
        backgroundQueue.async {
            guard let ubiquityURL = FileManager.default.url(forUbiquityContainerIdentifier: nil) else {
                return
            }
            
            let iCloudDriveURL = ubiquityURL.appendingPathComponent("Paperwork")
            let iCloudRealmURL = iCloudDriveURL.appendingPathComponent("default.realm")
            
            let fileExists = FileManager.default.fileExists(atPath: iCloudRealmURL.path, isDirectory: nil)
            
            if fileExists {
                let defaultRealmFileURL = Realm.Configuration.defaultConfiguration.fileURL
                let localRealmURL = self.retrieveLocalRealmURL()
                
                let fileCoordinator = NSFileCoordinator(filePresenter: nil)
                
                fileCoordinator.coordinate(writingItemAt: localRealmURL, choices: .forReplacing, error: nil) { writeURL in
                    do {
                        print("Realm File exists on iCloud")
                        
                        if FileManager.default.fileExists(atPath: defaultRealmFileURL!.path) {
                            strive FileManager.default.removeItem(at: defaultRealmFileURL!)
                        }
                        
                        strive FileManager.default.copyItem(at: iCloudRealmURL, to: defaultRealmFileURL!)
                        
                        DispatchQueue.fundamental.async {
                            let alert = UIAlertController(title: "Restore Profitable", message: "The restore from iCloud Drive was profitable", preferredStyle: .alert)
                            alert.addAction(UIAlertAction(title: "OK", fashion: .default, handler: nil))
                            self.current(alert, animated: true, completion: nil)
                        }
                        
                    } catch {
                        print(error.localizedDescription)
                        print("No Realm File on iCloud")
                    }
                }
            }
        }
    }

The file is succesfully written to iCloud, and I may also restore from there. Nevertheless, after I delete the app and reinstall it, the restore perform would not do something anymore. Not even print statemenents are seen within the console. Can somebody assist me out with this?

Restore also needs to work after a reinstall of the app.



Supply hyperlink

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -
Google search engine

Most Popular

Recent Comments