Add os.Logger diagnostics to SyncEngine.connect()
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import Foundation
|
||||
import SwiftData
|
||||
import Observation
|
||||
import os
|
||||
|
||||
enum ICloudStatus: Equatable {
|
||||
case checking
|
||||
@@ -23,6 +24,7 @@ final class SyncEngine {
|
||||
/// this to push fresh state to the watch.
|
||||
var onCacheChanged: (() -> Void)?
|
||||
|
||||
private let log = Logger(subsystem: "dev.rzen.indie.Workouts", category: "sync")
|
||||
private let modelContainer: ModelContainer
|
||||
private var fileManager: ICloudFileManager?
|
||||
private var monitor: ICloudFileMonitor?
|
||||
@@ -42,14 +44,17 @@ final class SyncEngine {
|
||||
connectAttempt += 1
|
||||
let attempt = connectAttempt
|
||||
iCloudStatus = .checking
|
||||
log.info("connect[\(attempt)]: resolving container \(Self.containerIdentifier, privacy: .public)")
|
||||
|
||||
let url = await Task.detached {
|
||||
FileManager.default.url(forUbiquityContainerIdentifier: Self.containerIdentifier)
|
||||
}.value
|
||||
guard let containerURL = url else {
|
||||
log.error("connect[\(attempt)]: ubiquity container URL is nil → unavailable (iCloud Drive off, or container not provisioned)")
|
||||
if attempt == connectAttempt { iCloudStatus = .unavailable }
|
||||
return
|
||||
}
|
||||
log.info("connect[\(attempt)]: container URL = \(containerURL.path, privacy: .public)")
|
||||
|
||||
let fm = ICloudFileManager(containerURL: containerURL)
|
||||
|
||||
@@ -57,15 +62,18 @@ final class SyncEngine {
|
||||
try? await Task.sleep(for: .seconds(20))
|
||||
guard let self, !Task.isCancelled else { return }
|
||||
if self.iCloudStatus == .checking, attempt == self.connectAttempt {
|
||||
self.log.error("connect[\(attempt)]: timed out after 20s — first container file op blocked (dataless container?)")
|
||||
self.iCloudStatus = .unavailable
|
||||
}
|
||||
}
|
||||
log.info("connect[\(attempt)]: preparing directories…")
|
||||
await fm.prepareDirectories()
|
||||
timeout.cancel()
|
||||
guard attempt == connectAttempt else { return }
|
||||
|
||||
self.fileManager = fm
|
||||
iCloudStatus = .available
|
||||
log.info("connect[\(attempt)]: directories ready → available")
|
||||
WorkoutsModelContainer.persistCurrentIdentityToken()
|
||||
|
||||
await reconcile()
|
||||
|
||||
Reference in New Issue
Block a user