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/CloudSharingLifecycle.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/CloudSharingLifecycle.swift')
| -rw-r--r-- | DomainDig/CloudSharingLifecycle.swift | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/DomainDig/CloudSharingLifecycle.swift b/DomainDig/CloudSharingLifecycle.swift new file mode 100644 index 0000000..fc5de80 --- /dev/null +++ b/DomainDig/CloudSharingLifecycle.swift @@ -0,0 +1,31 @@ +import CloudKit +import UIKit + +final class DomainDigAppDelegate: NSObject, UIApplicationDelegate { + func application( + _ application: UIApplication, + configurationForConnecting connectingSceneSession: UISceneSession, + options: UIScene.ConnectionOptions + ) -> UISceneConfiguration { + let configuration = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role) + configuration.delegateClass = DomainDigSceneDelegate.self + return configuration + } +} + +final class DomainDigSceneDelegate: NSObject, UIWindowSceneDelegate { + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let metadata = connectionOptions.cloudKitShareMetadata else { return } + accept(metadata: metadata) + } + + func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) { + accept(metadata: cloudKitShareMetadata) + } + + private func accept(metadata: CKShare.Metadata) { + Task { + try? await CloudSyncService.shared.acceptShare(metadata: metadata) + } + } +} |
