import Foundation public protocol SettingsProtocol: ObservableObject { var user: User { get set } var showDebugInfo: Bool { get set } } public class MainSettings: SettingsProtocol { private let defaults: UserDefaults public static var shared: any SettingsProtocol = Testing.isUITesting ? TestSettings() : MainSettings() @Published public var user: User { didSet { if let json = try? JSONEncoder().encode(self.user) { self.defaults.set(json, forKey: "user") self.defaults.synchronize() } } } public var showDebugInfo: Bool = false { didSet { self.defaults.set(self.showDebugInfo, forKey: "showDebugInfo") self.defaults.synchronize() } } public init(defaults: UserDefaults = .standard) { self.defaults = defaults // if let bundleID = Bundle.main.bundleIdentifier { // UserDefaults.standard.removePersistentDomain(forName: bundleID) // } self.defaults.register(defaults: [ "showDebugInfo": false ]) self.showDebugInfo = self.defaults.bool(forKey: "showDebugInfo") if let data = self.defaults.data(forKey: "user") { self.user = (try? JSONDecoder().decode(User.self, from: data)) ?? User() } else { self.user = User() } } }