/CloudKitCodable

An encoder and decoder for CKRecord

Primary LanguageSwiftBSD 2-Clause "Simplified" LicenseBSD-2-Clause

CloudKit + Codable = ❤️

Badge showing the current build status

This project implements CloudKitRecordEncoder and CloudKitRecordDecoder, allowing for custom data types to be converted to/from CKRecord automatically.

Usage

For details on how to use CloudKitCodable, please check the included documentation.

Example

Declaring a model that can be encoded as a CKRecord:

struct Person: CustomCloudKitCodable {
    var cloudKitSystemFields: Data?
    let name: String
    let age: Int
    let website: URL
    let avatar: URL
    let isDeveloper: Bool
}

Creating a CKRecord from a CustomCloudKitCodable type:

let rambo = Person(...)

do {
   let record = try CloudKitRecordEncoder().encode(rambo)
   // record is now a CKRecord you can upload to CloudKit
} catch {
   // something went wrong
}

Decoding a CustomCloudKitCodable type from a CKRecord:

let record = // record obtained from CloudKit
do {
   let person = try CloudKitRecordDecoder().decode(Person.self, from: record)
} catch {
   // something went wrong
}

Minimum Deployment Targets

  • iOS 14
  • tvOS 14
  • watchOS 5
  • macOS 11
  • Xcode 15 (recommended)

Installation

Swift Package Manager

Add CloudKitCodable to your Package.swift:

dependencies: [
    .package(url: "https://github.com/insidegui/CloudKitCodable.git", from: "0.3.0")
]

Manually

If you prefer not to use Swift Package Manager, you can integrate CloudKitCodable into your project manually by copying the files in.