I'm building an iOS application using CloudKit.
It should allow a user to add, edit and delete Products
in the cloud. The user can organize these in Folders. These folders are just other Record Types in cloudkit. There is no limit to the levels of folder the user can use, as any folder can just hold a CKReference
to it's parent Folder. All CloudKit communication in my app happens in a dedicated CloudKitController Class
This all works, but stops working after a while for no clear reason.
When I test my app, I don't even user folders that are multiple levels deep. However, after using it a while (up to a week), All deleted records seem to reappear on CloudKit. A couple of notes on this:
It has been going like this for a while now, and I have checked my code, the Apple Library and google numerous of times but I cannot figure out what causes this issue.
Question: Would anyone know anything on how to overcome this issue? As I said, I've been running into this for weeks, and resetting my CloudKit dashboard only 'cures' it for up to a week, then it pops up again. I'd also be more than happy to post any code if that would help you answer my question. I haven't posted any code initially, as I have no clue what code might cause this.
Any answer would be highly appreciated
A user can delete your app's data on the CloudKit servers through iCloud Settings->Manage Storage. Your app needs to handle this gracefully and re-create the zone and subscriptions on the server again if they don't exist.
Since CloudKit is deeply tied to Apple's operating systems and devices, it's not suitable for applications that require a broader range of device support, such as Android or Windows clients.
Overview. The CloudKit framework provides interfaces for moving data between your app and your iCloud containers. You use CloudKit to store your app's existing data in the cloud so that the user can access it on multiple devices. You can also store data in a public area where all users can access it.
Core Data owns the record ID for all of the objects that it creates in CloudKit. And, for each one, we will generate a simple UUID to use as its record name. When the Record Name is combined with a zone identifier you get a CKRecord ID. At the bottom, you'll see how Core Data manages type information.
This might happen because the dashboard trace below suggests Apple use the Tombstone technique for replicating deletes across a distributed database. One of the nodes might have a bug or an old software version and is syncing the tombstone false field back across the system, causing the record to undelete itself. Or maybe something your code is doing is accidentally bringing these deleted records back to life? A workaround would be to use your own soft-delete boolean field and see how that behaves.
[{
"results": [{
"tombstone": false
"id": "NewItem",
"etag": "ibgs5bpj",
"recordType": "Items",
"fields": {
"name": "Malc",
"location": {
"latitude": 38.0,
"longitude": -122.0
}
},
"conflictLosersEtags": [],
"created": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
},
"modified": {
"timestamp": 1435514295943,
"user": "_0ac573ae502ca7ca9d763a84b27bc42a",
"device": "_2"
}
},
...
As for the record counts, yes mine are inaccurate too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With