关于

CloudUserDefaults 会自动将使用特定前缀的 UserDefaults 同步到云端。它会静默监听系统事件,检测到带有给定前缀的 UserDefaults 发生更改时,会自动同步该 。例如,如果您选择 cloud_ 作为前缀,则 UserDefaults.standard.set(1, forKey: "cloud_count") 将会在用户的所有设备上设置。

这基于 Mugunth Kumar 的优雅解决方案 MKiCloudSync,这是一个现已存档的 Objective-C GitHub 仓库。感谢 Paul Hudson 对 MKiCloudSync 的介绍

安装

Swift Package Manager

如果您使用的是 Xcode 11 或更高版本

  1. 点击 文件
  2. Swift Packages
  3. 添加 Package Dependency...
  4. 指定 CloudUserDefaults 的 git URL。
https://github.com/nbasham/CloudUserDefaults.git

手动

CloudUserDefaults.swift 复制到您的项目

设置

在 Xcode 中,单击您的项目,单击您的 target,单击 Signing & Capabilities,单击 + Capability,选择 iCloud。选中 Key-value storage 复选框。

注意 iCloud 事件不会发送到模拟器。

用法

创建 CloudUserDefaults 的一个实例,将其保存在作用域内(例如在您的 AppDelegate 中),并使用您选择的前缀调用 start,例如:

import CloudUserDefaults
...
let cloudUserDefaults = CloudUserDefaults()
cloudUserDefaults.start(prefix: "cloud_")

就是这样,只要 UserDefaults cloud_ 开头,它就会自动同步到用户的所有设备,例如:

UserDefaults.standard.set(42, forKey: "cloud_answer") // synced to cloud
UserDefaults.standard.set(42, forKey: "answer")       // local

如果您想在收到来自其他设备的 user defaults 通知时订阅 CloudUserDefaults.cloudSyncNotification,例如:

NotificationCenter.default.addObserver(self,
 selector: #selector(cloudUpdate(notification:)),
 name: CloudUserDefaults.cloudSyncNotification,
 object: nil)

贡献

欢迎提交 pull requests。对于重大更改,请先打开一个 issue 来讨论您想要更改的内容。

请确保适当地更新测试。

许可

MIT