// // FeelsApp.swift // Shared // // Created by Trey Tartt on 1/5/22. // import SwiftUI import BackgroundTasks import WidgetKit @main struct FeelsApp: App { @Environment(\.scenePhase) private var scenePhase @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate let persistenceController = PersistenceController.shared @StateObject var iapManager = IAPManager() @AppStorage(UserDefaultsStore.Keys.firstLaunchDate.rawValue, store: GroupUserDefaults.groupDefaults) private var firstLaunchDate = Date() @State private var showSubscriptionFromWidget = false init() { BGTaskScheduler.shared.cancelAllTaskRequests() BGTaskScheduler.shared.register(forTaskWithIdentifier: BGTask.updateDBMissingID, using: nil) { (task) in BGTask.runFillInMissingDatesTask(task: task as! BGProcessingTask) } UIApplication.shared.applicationIconBadgeNumber = 0 // PersistenceController.shared.clearDB() // PersistenceController.shared.populateMemory() } var body: some Scene { WindowGroup { // build these here so when tints and other things get updated the views / their data dont // have to get redrawn#imageLiteral(resourceName: "simulator_screenshot_0017B4DC-100B-42A3-A406-9019704AE275.png") MainTabView(dayView: DayView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: false)), monthView: MonthView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: true)), yearView: YearView(viewModel: YearViewModel()), customizeView: CustomizeView()) .environment(\.managedObjectContext, persistenceController.viewContext) .environmentObject(iapManager) .sheet(isPresented: $showSubscriptionFromWidget) { FeelsSubscriptionStoreView() .environmentObject(iapManager) } .onOpenURL { url in if url.scheme == "feels" && url.host == "subscribe" { showSubscriptionFromWidget = true } } }.onChange(of: scenePhase) { phase in if phase == .background { //BGTask.scheduleBackgroundProcessing() WidgetCenter.shared.reloadAllTimelines() } if phase == .active { UIApplication.shared.applicationIconBadgeNumber = 0 // Check subscription status on each app launch Task { await iapManager.checkSubscriptionStatus() } } } } }