more tests
Some checks are pending
Build and Release IPA / Build IPA (push) Waiting to run

This commit is contained in:
Francesco 2025-04-24 21:42:57 +02:00
parent 1511a0ed26
commit f6bc1326cf

View file

@ -44,10 +44,7 @@ class iCloudSyncManager {
private init() { private init() {
setupSync() setupSync()
NotificationCenter.default.addObserver(self, NotificationCenter.default.addObserver(self, selector: #selector(willEnterBackground), name: UIApplication.willResignActiveNotification, object: nil)
selector: #selector(willEnterBackground),
name: UIApplication.willResignActiveNotification,
object: nil)
} }
private func setupSync() { private func setupSync() {
@ -59,25 +56,45 @@ class iCloudSyncManager {
self.syncModulesFromiCloud() self.syncModulesFromiCloud()
DispatchQueue.main.async { DispatchQueue.main.async {
NotificationCenter.default.addObserver(self, NotificationCenter.default.addObserver(self, selector: #selector(self.iCloudDidChangeExternally), name: NSUbiquitousKeyValueStore.didChangeExternallyNotification, object: NSUbiquitousKeyValueStore.default)
selector: #selector(self.iCloudDidChangeExternally), NotificationCenter.default.addObserver(self, selector: #selector(self.userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: NSUbiquitousKeyValueStore.default)
NotificationCenter.default.addObserver(self,
selector: #selector(self.userDefaultsDidChange),
name: UserDefaults.didChangeNotification,
object: nil)
} }
} }
} }
@objc private func iCloudDidChangeExternally(_ notification: NSNotification) {
guard let iCloud = notification.object as? NSUbiquitousKeyValueStore,
let changedKeys = notification.userInfo?[NSUbiquitousKeyValueStoreChangedKeysKey] as? [String] else {
Logger.shared.log("Invalid iCloud notification data", type: "Error")
return
}
syncQueue.async { [weak self] in
guard let self = self else { return }
let defaults = UserDefaults.standard
for key in changedKeys {
if let value = iCloud.object(forKey: key), self.isValidValueType(value) {
defaults.set(value, forKey: key)
} else {
defaults.removeObject(forKey: key)
}
}
defaults.synchronize()
DispatchQueue.main.async {
NotificationCenter.default.post(name: .iCloudSyncDidComplete, object: nil)
}
}
}
@objc private func userDefaultsDidChange(_ notification: Notification) { @objc private func userDefaultsDidChange(_ notification: Notification) {
syncQueue.async { [weak self] in syncQueue.async { [weak self] in
self?.syncToiCloud() self?.syncToiCloud()
} }
} }
private func syncToiCloud() { private func syncToiCloud() {
let iCloud = NSUbiquitousKeyValueStore.default let iCloud = NSUbiquitousKeyValueStore.default
let defaults = UserDefaults.standard let defaults = UserDefaults.standard
@ -92,8 +109,6 @@ class iCloudSyncManager {
} }
iCloud.synchronize() iCloud.synchronize()
} catch {
Logger.shared.log("Failed to sync to iCloud: \(error)", type: "Error")
} }
} }
@ -114,15 +129,15 @@ class iCloudSyncManager {
} }
private func isValidValueType(_ value: Any) -> Bool { private func isValidValueType(_ value: Any) -> Bool {
return value is String || return value is String ||
value is Bool || value is Bool ||
value is Int || value is Int ||
value is Float || value is Float ||
value is Double || value is Double ||
value is Data || value is Data ||
value is Date || value is Date ||
value is [Any] || value is [Any] ||
value is [String: Any] value is [String: Any]
} }
@objc private func willEnterBackground() { @objc private func willEnterBackground() {