☁️

CloudKit

iOS 8+

Apple's cloud backend service that enables apps to store and sync data across devices using iCloud. CloudKit provides a scalable backend without managing servers.

CloudData Persistence
Official Apple Documentation →
iOS Version Compatibility
99.7%
coverage

of iOS users worldwide can use CloudKit (iOS 8+ required)

iOS VersionMarket ShareStatus
iOS 18.730.3%Supported
iOS 18.629.8%Supported
iOS 26.110.7%Supported
iOS 18.56.0%Supported
iOS 16.72.3%Supported
iOS 26.22.0%Supported
iOS 18.31.8%Supported
iOS 15.81.8%Supported
iOS 11.01.7%Supported
iOS 17.61.7%Supported

Key Features

Store structured data in public and private databases

Automatic sync across user devices via iCloud

Built-in user authentication with iCloud accounts

Asset storage for files and media

Subscriptions for real-time push notifications

Free tier with generous limits for indie developers

Code Examples

Save a Record

Create and save a record to CloudKit

import CloudKit

let container = CKContainer.default()
let privateDatabase = container.privateCloudDatabase

let record = CKRecord(recordType: "Note")
record["title"] = "My First Note" as CKRecordValue
record["content"] = "Hello CloudKit!" as CKRecordValue

privateDatabase.save(record) { savedRecord, error in
    if let error = error {
        print("Error saving: \(error)")
    } else {
        print("Record saved successfully")
    }
}

Fetch Records

Query records from CloudKit

import CloudKit

let container = CKContainer.default()
let privateDatabase = container.privateCloudDatabase

let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Note", predicate: predicate)

privateDatabase.perform(query, inZoneWith: nil) { records, error in
    if let records = records {
        for record in records {
            print(record["title"] ?? "No title")
        }
    }
}

Subscribe to Changes

Set up a subscription for push notifications

import CloudKit

let container = CKContainer.default()
let privateDatabase = container.privateCloudDatabase

let predicate = NSPredicate(value: true)
let subscription = CKQuerySubscription(
    recordType: "Note",
    predicate: predicate,
    options: [.firesOnRecordCreation, .firesOnRecordUpdate]
)

let notification = CKSubscription.NotificationInfo()
notification.alertBody = "A note was updated"
subscription.notificationInfo = notification

privateDatabase.save(subscription) { _, error in
    if let error = error {
        print("Error creating subscription: \(error)")
    }
}

Frequently Asked Questions

What is CloudKit?

Apple's cloud backend service that enables apps to store and sync data across devices using iCloud. CloudKit provides a scalable backend without managing servers.

Which iOS versions support CloudKit?

CloudKit is available on iOS 8 and later. Currently, 99.7% of iOS users worldwide can use this framework.

What are alternatives to CloudKit?

Related frameworks include Swiftdata, Coredata. Each has different capabilities and iOS version requirements.