iCloudSyncStatusKit

一个 Swift 库,用于在使用 Core Data 和 CloudKit 时监控 iCloud 帐户状态并响应同步事件。它利用了 iOS 17 和 macOS 14 中的新 Observation 框架,并使用 ObservableObject 兼容较旧的操作系统版本。

特性

要求

安装

Swift Package Manager

将包添加到您的 Package.swift 文件

dependencies: [
    .package(url: "https://github.com/fatbobman/iCloudSyncStatusKit.git", from: "0.1.0")
]

或通过 Xcode 添加

  1. 前往 File > Add Packages...(文件 > 添加包...)
  2. 输入仓库 URL:https://github.com/fatbobman/iCloudSyncStatusKit.git
  3. 选择版本并将包添加到您的项目中。

用法

导入库

import SyncStatusManager

初始化 SyncStatusManager

@StateObject var syncManager = SyncStatusManager()

观察同步事件

您可以观察 syncEvent 以监控同步状态。

SwiftUI 视图示例

struct ContentView: View {
    @StateObject var syncManager = SyncStatusManager()

    var body: some View {
        VStack {
            Text("Sync Event: \(syncManager.syncEvent)")
            // Your UI components
            Button("Check iCloud Status") {
                Task {
                    let status = await syncManager.validateICloudAvailability { status, error in
                        print("Status: \(status)")
                        if let error = error {
                            print("Error: \(error)")
                        }
                    }
                    if let status = status {
                        print("iCloud Account Status: \(status)")
                    }
                }
            }
        }
    }
}

检查 iCloud 可用性

使用 validateICloudAvailability 方法检查 iCloud 帐户状态

Task {
    let status = await syncManager.validateICloudAvailability { status, error in
        print("Account Status: \(status)")
        if let error = error {
            print("Error: \(error.localizedDescription)")
        }
    }
    if status == .available {
        // Proceed with synchronization
    } else {
        // Handle unavailable iCloud account
    }
}

处理超出配额

初始化 SyncStatusManager 时,提供一个 quotaExceededHandler

let syncManager = SyncStatusManager(
    quotaExceededHandler: {
        // Notify the user about the quota issue
    }
)

记录同步事件

如果想要记录同步事件以进行调试,请将 showEventInLog 设置为 true 并提供一个符合 LoggerManagerProtocol 的 logger。

let syncManager = SyncStatusManager(
    logger: YourLoggerInstance, // Conforming to LoggerManagerProtocol
    showEventInLog: true
)

许可

本项目采用 MIT 许可证授权 - 有关详细信息,请参阅 LICENSE 文件。

鸣谢

Buy Me A Coffee