Giter Club home page Giter Club logo

cloudstorage's Introduction

@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.

Syncing between apps and extensions

To sync the same key-value items between different apps (from the same team) or even between an app and its extensions, follow these steps:

  1. Designate one of the apps as the primary app
  2. In the other apps/extensions, change the iCloud Key-Value Storage ID manually to be the same as the primary app

For example, if your primary app has the bundle identifier com.example.my-app, and its .entitlements file has this entry:

<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>

Make sure in the other apps or extensions to configure the .entitlements file like so:

<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)com.example.my-app</string>

See also: Configuring a Common iCloud Container for Multiple Apps (developer.apple.com)

Authors

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

cloudstorage's People

Contributors

tomlokhorst avatar mac-cain13 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.