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}