summaryrefslogtreecommitdiff
path: root/DomainDig/CloudSharingLifecycle.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-23 23:12:34 -0500
committerChristian Cleberg <[email protected]>2026-04-23 23:12:34 -0500
commitb35f1b432fc24fbab1fa05593c9a0bca7e4d95a6 (patch)
tree099cea2cc4324331a719ed2cad8c0815033b5471 /DomainDig/CloudSharingLifecycle.swift
parentf045a5d339a796f40a9e958436ebc6f5314bdab8 (diff)
downloaddomain-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.swift31
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)
+ }
+ }
+}