Swift extensions for asynchronous CloudKit record processing
⛅️ AsyncCloudKit
Swift extensions for asynchronous CloudKit record processing. Designed for simplicity.
AsyncCloudKit exposes CloudKit operations as
async functions and
AsyncSequences.
? Adding AsyncCloudKit to Your Project
AsyncCloudKit is a Swift Package.
Add a dependency on AsyncCloudKit to your
Package.swift
using
Xcode or the
Swift Package Manager. Optionally, specify a
version requirement.
dependencies: [
.package(url: "https://github.com/chris-araman/AsyncCloudKit.git", from: "1.0.0")
]
Then resolve the dependency:
swift package resolve
To update to the latest AsyncCloudKit version compatible with your version requirement:
swift package update AsyncCloudKit
? Using AsyncCloudKit in Your Project
Swift concurrency allows you to process CloudKit records asynchronously, without writing a lot of boilerplate code involving
CKOperation
s and completion blocks.
Here, we perform a query on our
CKDatabase
, then process the results
asynchronously. As each CKRecord
is read from the
database, we print its name
field.
import CloudKit
import AsyncCloudKit
func queryDueItems(database: CKDatabase, due: Date) async throws {
for try await record in database
.performQuery(ofType: "ToDoItem", where: NSPredicate(format: "due >= %@", due)) { (record: CKRecord) in
print("\(record.name)")
})
}
Cancellation
AsyncCloudKit functions that return an ACKSequence
queue an operation immediately. Iterating
the sequence allows you to inspect the results of the operation. If you stop iterating the sequence early,
the operation may be cancelled.
Note that because the atBackgroundPriority
functions are built on CKDatabase
methods that do not provide means of
cancellation, they cannot be canceled. If you need operations to respond to requests for cooperative cancellation,
please use the publishers that do not have atBackgroundPriority
in their names. You can still specify
QualityOfService.background
by passing in a
CKOperation.Configuration
.
? Documentation
?% documented using Jazzy.
Hosted by GitHub Pages.
❤️ Contributing
Contributions are welcome!
? Further Reading
To learn more about Swift Concurrency and CloudKit, watch these videos from WWDC:
- Explore structured concurrency in Swift
- Discover concurrency in SwiftUI
- Swift concurrency: Behind the scenes
…or review Apple’s documentation:
- CloudKit Overview
- CloudKit Documentation
- Swift Language Features for Concurrency
- Apple Concurrency Module
If you’re looking for Swift Combine extensions for CloudKit, take a look at
CombineCloudKit!
? License
AsyncCloudKit was created by Chris Araman. It is published under the
MIT license.