Latest 0.0.2
Homepage https://github.com/sobri909/CloudKitQueues
License MIT
Platforms ios 11.0
Frameworks CloudKit
Authors

A queue manager for simplifying both individual and batch operations on CloudKit records.

Seamless Individual and Batch Operations

CloudKitQueues provides methods for performing fetch, save, and delete actions on individual CKRecords
and CKRecordIDs. The actions are then intelligently batched together, to get the fastest results in the
least amount of CloudKit requests.

This makes it possible to get the best possible performance out of CloudKit, with the minimum
number of requests within CloudKit’s request limits.

No Manual Queue Management Required

With CloudKitQueues you no longer need to manage batch CloudKit operations in your loops, nor
manage failures or retries on batch operations. Simply call fetch(), save(), delete() on
individual CKRecords and CKRecordIDs, and CloudKitQueues will ensure that they are batched
together in the most efficient manner.

The same methods are suitable both for single standalone operations and large batch operations.
CloudKitQueues will ensure that the they are performed optimally in all cases.

Individual Completion Closures

Every fetch, save, and delete request takes an optional completion closure, which will be executed
once the record’s database action has completed. This allows the batching of hundreds of concurrent
database operations together, while being able to easily perform completion actions on each record
individually.

queue.fetch(ckRecordId) { ckRecord, error in
    if let ckRecord = ckRecord {
        print("ckRecord: " + ckRecord)
    }
}

Automatic Rate Limit Management

CloudKitQueues observes and respects CloudKit’s rate limit timeouts, and automatically retries once the
timeouts permit.

Fast and Slow Queues

CloudKitQueues manages two sets of queues:

  • Fast Queue: For fast operations, eg actions for which the user is waiting to see the result
    in the UI.
  • Slow Queue: For slow operations, eg backups, restores, and deletes that the user is
    not expecting to see the immediate results of.

When fetching a record you can choose to either queue.fetch(ckRecordId) or
queue.slowFetch(ckRecordId).

When saving changes to a record you can choose to either queue.save(ckRecord) or
queue.slowSave(ckRecord).

When deleting a record you can choose to either queue.delete(ckRecordId) or
queue.slowDelete(ckRecordId).

CloudKitQueues manages these queues internally so that "fast" actions are batched together and
performed as quickly as possible, and "slow" actions are batched together and performed when
CloudKit determines that the energy and network conditions best suit.

Setup

pod 'CloudKitQueues'

Or just drop CloudKitQueue.swift into your project.

Examples

let publicQueue = CloudKitQueue(for: CKContainer.default().publicCloudDatabase)
let privateQueue = CloudKitQueue(for: CKContainer.default().privateCloudDatabase)

Fast Queue Actions

Note that all save(), fetch(), and delete() methods accept optional completion closures.

// save the CKRecords for all cars
for car in cars { 
    publicQueue.save(car.ckRecord) 
}
// fetch the CKRecords for all cars, and assign the fetched records
// to their car objects on fetch completion
for car in cars { 
    publicQueue.fetch(car.ckRecordId) { ckRecord, error in
        car.ckRecord = ckRecord
    }
}
// delete the remote CKRecords for all cars
for car in cars { 
    publicQueue.delete(car.ckRecordId)
}

Slow Queue Actions

// slow save the CKRecords for all cars
for car in cars { 
    publicQueue.slowSave(car.ckRecord) 
}
// slow fetch the CKRecords for all cars, and assign the fetched records
// to their car objects on fetch completion
for car in cars { 
    publicQueue.slowFetch(car.ckRecordId) { ckRecord, error in
        car.ckRecord = ckRecord
    }
}
// slow delete the remote CKRecords for all cars
for car in cars { 
    publicQueue.slowDelete(car.ckRecordId)
}

Latest podspec

{
    "name": "CloudKitQueues",
    "version": "0.0.2",
    "summary": "A queue manager for simplifying individual and batch operations on CloudKit records",
    "homepage": "https://github.com/sobri909/CloudKitQueues",
    "authors": {
        "Matt Greenfield": "[email protected]"
    },
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "source": {
        "git": "https://github.com/sobri909/CloudKitQueues.git",
        "tag": "0.0.2"
    },
    "source_files": "Source/*.swift",
    "swift_version": "4.1",
    "platforms": {
        "ios": "11.0"
    },
    "frameworks": "CloudKit"
}

Pin It on Pinterest

Share This