FavoritesManager Swift

FavoritesManager is a Swift package that provides a simple way to manage a list of favorite items using iCloud. It uses NSUbiquitousKeyValueStore to store and synchronize data across devices.

favoritesmanager2 copy


Swift Package Manager

You can use Swift Package Manager to install FavoritesManager by adding it to your Package.swift:

dependencies: [
    .package(url: "https://github.com/ezefranca/FavoritesManager.git", from: "1.0.0")

Or, add it to your project in Xcode:

  • Click on File > Swift Packages > Add Package Dependency
  • Enter the URL of the FavoritesManager repository: https://github.com/ezefranca/FavoritesManager.git
  • Follow the instructions to complete the installation.

To use NSUbiquitousKeyValueStore, you need to enable iCloud for your app in the Apple Developer Portal and create an App ID with iCloud enabled.

Then, follow these steps:

Go to your project in Xcode.

  • Select your target.
  • Click on the “Signing & Capabilities” tab.
  • Click the “+ Capability” button to add a new capability to your project.
  • Search for “iCloud” and select it.
  • Select the “Key-value storage” checkbox.
  • Enter a unique identifier for your key-value store in the “iCloud Containers” section.
  • Save your changes.

After completing these steps, your app should be able to access iCloud key-value storage.



There is a per-key value size limit of 1 MB, and a maximum of 1024 keys. If you attempt to write data that exceeds these quotas, the write attempt fails and no change is made to your iCloud key-value storage.
Check NSUbiquitousKeyValueStore

To use FavoritesManager, you need to create a struct or class that conforms to the Codable and Equatable protocols. You can then use it to save, remove, and retrieve favorite items. Here’s a simple example of how you could use FavoritesManager:

import Foundation
import FavoritesManager

struct Person: Codable, Equatable {
    let name: String
    let age: Int

var manager = FavoritesManager<Person>(key: "people")
let person1 = Person(name: "John", age: 25)
let person2 = Person(name: "Mary", age: 30)
let person3 = Person(name: "Alex", age: 35)

Save a favorite element

print(manager.favorites) // [Person(name: "John", age: 25)]

Save another favorite element

print(manager.favorites) // [Person(name: "John", age: 25), Person(name: "Mary", age: 30)]

Try to save a duplicated element

print(manager.favorites) // [Person(name: "John", age: 25), Person(name: "Mary", age: 30)]

Check if an element is favorite

let isFavorite = manager.isFavorite(person1)
print(isFavorite) // true

Get all favorite elements

let favorites = manager.getAll()
print(favorites) // [Person(name: "John", age: 25), Person(name: "Mary", age: 30)]

Remove a favorite element

print(manager.favorites) // [Person(name: "Mary", age: 30)]

Remove all favorite elements

print(manager.favorites) // []


Contributions are very welcome! If you have an idea or a bug report, please open an issue or submit a pull request.


FavoritesManager is available under the MIT license. See the LICENSE file for more info.


View Github