We use CKSyncEngine in Tapestry and it works pretty well, but there's one situation that kinda sucks - when someone deletes the app and reinstalls, the sync engine is started with a nil stateSerialization so it has to fetch all of the records. This is normal and expected, except it appears to fetch the *entire history* of the zones including deletion events for records that will never matter because they predate when the initial sync started in the first place!