import SwiftUI @main struct PortfolioJournalApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @StateObject private var iapService: IAPService @StateObject private var adMobService: AdMobService @StateObject private var accountStore: AccountStore @StateObject private var tabSelection = TabSelectionStore() @Environment(\.scenePhase) private var scenePhase let coreDataStack = CoreDataStack.shared init() { // Clean up any duplicate objects from previous bugs before initializing stores CoreDataStack.shared.cleanupDuplicateObjects() let iap = IAPService() _iapService = StateObject(wrappedValue: iap) _adMobService = StateObject(wrappedValue: AdMobService()) _accountStore = StateObject(wrappedValue: AccountStore(iapService: iap)) } var body: some Scene { WindowGroup { ContentView() .environment(\.managedObjectContext, coreDataStack.viewContext) .environmentObject(coreDataStack) .environmentObject(iapService) .environmentObject(adMobService) .environmentObject(accountStore) .environmentObject(tabSelection) } .onChange(of: scenePhase) { _, newPhase in if newPhase == .active { coreDataStack.refreshWidgetData() } else if newPhase == .background { guard iapService.isPremium else { return } guard UserDefaults.standard.bool(forKey: "backupsEnabled") else { return } let retention = UserDefaults.standard.integer(forKey: "backupRetentionCount") let keepCount = [5, 10, 20].contains(retention) ? retention : 10 let includeICloud = UserDefaults.standard.bool(forKey: "cloudSyncEnabled") _ = BackupService.shared.createBackup( retentionCount: keepCount, includeICloud: includeICloud ) } } } }