CloudStorage

0.4.0

Swift property wrapper to sync settings through iCloud key-value storage
nonstrict-hq/CloudStorage

What's New

0.4.0

2023-04-20T20:42:04Z
  • Keep multiple @CloudStorage property wrappers with same key in sync
  • Add @Published like behaviour, if @CloudStorage property wrapper is inside an ObservableObject

@CloudStorage property wrapper

Sync settings through iCloud key-value storage.

What is this?

Similar to @AppStorage and @SceneStorage in iOS14, this @CloudStorage property wrapper persists values across app restarts. But this also synchronizes these values across devices using iCloud Key-Value Storage.

Usage

Step 1: Enable the iCloud "Key-value storage" service

  1. Select your project file in Xcode, select the target and click "Signing & Capabilities"
  2. Hit the "+ Capability" button in the top-left
  3. Search for "iCloud" and add the capability
  4. Enable the "Key-value storage" service
📺 Watch the screen recording of this instruction

Screen recording

Step 2: Add this library as an SPM dependency

Hit File -> Add Packages... and paste the URL of this GitHub repo to add it to your project.

Step 3: Use the property wrapper

These values will be synced between devices of the user of your app:

@CloudStorage("readyForAction") var readyForAction: Bool = false
@CloudStorage("numberOfItems") var numberOfItems: Int = 0
@CloudStorage("orientation") var orientation: String?

See also the example app in this repository.

For what should this be used?

The same caveats apply as with key-value storage itself:

Key-value storage is for discrete values such as preferences, settings, and simple app state.

Use iCloud key-value storage for small amounts of data: stocks or weather information, locations, bookmarks, a recent documents list, settings and preferences, and simple game state. Every app submitted to the App Store or Mac App Store should take advantage of key-value storage.

From Apple's documenation on choosing the proper iCloud Storage API

In general, key-value storage is not meant as a general purpose syncing service. If you need any advanced capabilities to prevent data loss, consider using CloudKit instead.

Authors

Nonstrict B.V., Tom Lokhorst & Mathijs Kadijk, released under MIT License

Description

  • Swift Tools 5.7.0
View More Packages from this Author

Dependencies

  • None
Last updated: Mon Dec 09 2024 01:36:56 GMT-1000 (Hawaii-Aleutian Standard Time)