krz/domain-dig

an ios app for DNS & SSL analysis

clone: git clone https://gitbay.org/krz/domain-dig.git

v4.4.1: DomainDig/DomainDigApp.swift · raw

 1//
 2//  DomainDigApp.swift
 3//  DomainDig
 4//
 5//  Created by cmc on 2026-03-10.
 6//
 7
 8import SwiftUI
 9
10@main
11struct DomainDigApp: App {
12    @UIApplicationDelegateAdaptor(DomainDigAppDelegate.self) private var appDelegate
13    @Environment(\.scenePhase) private var scenePhase
14    @AppStorage(AppDensity.userDefaultsKey) private var density = AppDensity.compact.rawValue
15    @State private var viewModel = DomainViewModel()
16    @State private var purchaseService = PurchaseService.shared
17    @State private var cloudSyncService = CloudSyncService.shared
18    @State private var localAPIService = LocalAPIService.shared
19
20    init() {
21        LocalNotificationService.shared.configureForegroundPresentation()
22        DomainMonitoringScheduler.shared.registerBackgroundTask()
23    }
24
25    var body: some Scene {
26        WindowGroup {
27            RootTabView(viewModel: viewModel)
28                .environment(\.appDensity, AppDensity(rawValue: density) ?? .compact)
29                .task {
30                    let _ = purchaseService.currentTier
31                    let _ = cloudSyncService.status
32                    let _ = localAPIService.isRunning
33                    let _ = IntegrationService.shared.targets.count
34                    await purchaseService.refreshEntitlements()
35                    viewModel.refreshMonitoringState()
36                    await viewModel.refreshMonitoringAuthorizationStatus()
37                    await cloudSyncService.refreshAvailability()
38                    localAPIService.refresh()
39                    cloudSyncService.scheduleSyncIfNeeded(trigger: .launch)
40                    viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule()
41                    IntegrationService.shared.processQueueNow()
42                }
43                .onReceive(NotificationCenter.default.publisher(for: .cloudSyncDidApplyChanges)) { _ in
44                    viewModel.refreshPersistedData()
45                    viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule()
46                    IntegrationService.shared.refresh()
47                }
48        }
49        .onChange(of: scenePhase) { _, newValue in
50            guard newValue == .active else { return }
51            viewModel.refreshMonitoringState()
52            Task {
53                await viewModel.refreshMonitoringAuthorizationStatus()
54                await cloudSyncService.refreshAvailability()
55            }
56            localAPIService.refresh()
57            cloudSyncService.scheduleSyncIfNeeded(trigger: .launch)
58            viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule()
59            IntegrationService.shared.processQueueNow()
60        }
61    }
62}