diff options
| author | Christian Cleberg <[email protected]> | 2026-04-23 23:12:34 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-23 23:12:34 -0500 |
| commit | b35f1b432fc24fbab1fa05593c9a0bca7e4d95a6 (patch) | |
| tree | 099cea2cc4324331a719ed2cad8c0815033b5471 /DomainDig/DomainDigApp.swift | |
| parent | f045a5d339a796f40a9e958436ebc6f5314bdab8 (diff) | |
| download | domain-dig-b35f1b432fc24fbab1fa05593c9a0bca7e4d95a6.tar.gz domain-dig-b35f1b432fc24fbab1fa05593c9a0bca7e4d95a6.tar.bz2 domain-dig-b35f1b432fc24fbab1fa05593c9a0bca7e4d95a6.zip | |
feat(v3.6.0): add iCloud sharing for workflows and tracked domains
- implement CloudKit sharing (CKShare) for TrackedDomain and DomainWorkflow
- support read-only and editable permissions
- add Share actions and shared state indicators in UI
- handle shared record ownership and participant roles
- implement deterministic conflict resolution to prevent duplication
- ensure compatibility with existing iCloud sync layer
- maintain local-first behavior with graceful offline handling
- remove debug logging for domain availability/rdap messages
notes:
- no custom backend or accounts introduced
- sharing is Apple ecosystem only (iCloud-based)
- large history data remains local-only
Diffstat (limited to 'DomainDig/DomainDigApp.swift')
| -rw-r--r-- | DomainDig/DomainDigApp.swift | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/DomainDig/DomainDigApp.swift b/DomainDig/DomainDigApp.swift index f7cd15e..4bb1b8f 100644 --- a/DomainDig/DomainDigApp.swift +++ b/DomainDig/DomainDigApp.swift @@ -9,10 +9,12 @@ import SwiftUI @main struct DomainDigApp: App { + @UIApplicationDelegateAdaptor(DomainDigAppDelegate.self) private var appDelegate @Environment(\.scenePhase) private var scenePhase @AppStorage(AppDensity.userDefaultsKey) private var density = AppDensity.compact.rawValue @State private var viewModel = DomainViewModel() @State private var purchaseService = PurchaseService.shared + @State private var cloudSyncService = CloudSyncService.shared init() { LocalNotificationService.shared.configureForegroundPresentation() @@ -25,9 +27,16 @@ struct DomainDigApp: App { .environment(\.appDensity, AppDensity(rawValue: density) ?? .compact) .task { let _ = purchaseService.currentTier + let _ = cloudSyncService.status await purchaseService.refreshEntitlements() viewModel.refreshMonitoringState() await viewModel.refreshMonitoringAuthorizationStatus() + await cloudSyncService.refreshAvailability() + cloudSyncService.scheduleSyncIfNeeded(trigger: .launch) + viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule() + } + .onReceive(NotificationCenter.default.publisher(for: .cloudSyncDidApplyChanges)) { _ in + viewModel.refreshPersistedData() viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule() } } @@ -36,7 +45,9 @@ struct DomainDigApp: App { viewModel.refreshMonitoringState() Task { await viewModel.refreshMonitoringAuthorizationStatus() + await cloudSyncService.refreshAvailability() } + cloudSyncService.scheduleSyncIfNeeded(trigger: .launch) viewModel.monitoringStatusMessage = DomainMonitoringScheduler.shared.syncSchedule() } } |
