core-data swift3 ios10 cloudkit ckoperation

Cómo sincronizar registros entre Core Data y CloudKit de manera eficiente



core-data swift3 (2)

Actualmente estoy aprendiendo cómo usar CloudKit Framework y la falta de documentación o ejemplos que muestren cómo sincronizar Core Data y CloudKit.

He visto todos los videos de la WWDC (2014, 2015, 2016) Dedicados a CloudKit, pero ninguno de ellos nos dice cómo implementar la sincronización con Core Data. No puedo encontrar ejemplos nuevos, tutoriales o libros que muestren cómo implementar esta sincronización.

Sé que es efectivo usar la API de Operaciones por CloudKit (no la API de Conveniencia) y Suscribirse a los cambios como se dijo en los nuevos videos de la WWDC 2016, dedicados a CloudKit, pero la asignación con CoreData es un problema real.

Por ejemplo, digamos que me gustaría crear una aplicación similar a la aplicación Notes. mientras está desconectado, el usuario puede crear sus notas y trabajar con ellas guardándolas en su base de datos de datos central. Cuando el dispositivo se conecta, la aplicación comprueba qué ha cambiado en el servidor y guarda los registros recién creados en el servidor (CloudKit).

Cuando se inicia la aplicación, también obtiene los cambios del CloudKit y, si hay cambios, actualiza la caché local (Core Data) con los nuevos cambios.

Me gustaría tener un patrón común de sincronización. ¿Dónde ubicar la sincronización con los métodos Core Data y cómo deberían ser?

Apreciaría cualquier información o ayuda sobre esto.

Estoy usando Swift 3, Xcode 8, iOS 10.


Apple ha publicado recientemente una guía que parece responder a esta pregunta. Consulte Mantenimiento de una memoria caché local de los registros de CloudKit de Apple para ver cómo almacenar los datos de CloudKit en el dispositivo.

Si bien esta guía no proporciona un código de ejemplo para escribir en el dispositivo, sí responde al resto de la pregunta. Esto le indica cómo obtener cambios de CloudKit y crear datos que se pueden almacenar en el dispositivo.


Core Data ya le brinda al usuario la capacidad de sincronizar con iCloud. No hay necesidad de usar CloudKit.

Diseño para datos básicos en iCloud

Pero sí, Core Data con iCloud ha quedado en desuso. Aun así, no se ha suspendido , y no hay planes inmediatos en Apple para descontinuarlo, solo quieren desalentar su uso. Pero también tiene problemas con la racionalización de actualizaciones desde múltiples dispositivos.

En cualquier caso, he estado investigando la cuestión de cómo hacer esto con el kit de nube. Dos respuestas; Lo primero es usar lo siguiente;

Costura en GitHub

El segundo es hacerlo manualmente;

Diseñando para CloudKit

La clave aquí es que Cloud Kit necesita los metadatos de registro para poder manejar las actualizaciones de los registros de manera confiable, por lo que debe guardar esos metadatos en su base de datos de Core Data. La clase CKRecord incluye un método encodeSystemFields(with:) que codificará esos campos en un registro de datos que se puede almacenar en su base de datos, y luego puede usar el decodificador adecuado cuando necesite restaurar el CKRecord.

De todos modos, estoy a punto de comenzar a hacer esto yo mismo Actualizaré esto con más información cuando lo tenga.