Uso de Core Data, iCloud y CloudKit para sincronizar y realizar copias de seguridad y cómo funcionan juntos

111

Estoy en las primeras etapas de la creación de una aplicación en la que me gustaría guardar, sincronizar y hacer copias de seguridad de los datos. La aplicación no almacenará ningún archivo, solo datos en una base de datos. Va a ser iOS 8 en adelante, así que puedo usar CloudKit. Investigué un poco y todavía no tengo claro cómo funcionan juntos Core Data, iCloud y CloudKit.

Por lo que entendemos, CloudKit es solo una forma de obtener y recuperar datos hacia / desde la nube. ¿CloudKit es solo una forma diferente de sincronizar datos con iCloud?

Mis preguntas son:

  1. Si utilizo CloudKit, ¿todavía necesito crear una base de datos de datos central local?

    • En caso afirmativo, ¿se sincronizará automáticamente con iCloud o tendré que llamar a métodos para almacenar en ambos lugares?
  2. Si los datos solo se almacenan en la nube, el usuario podrá acceder a ellos cuando el dispositivo iOS no esté conectado a Internet. Leí que CloudKit solo tendrá un almacenamiento en caché limitado.

  3. ¿Cómo funcionará eso si la cuenta de iCloud no está habilitada?

Si alguien puede desglosar lo que hace cada tecnología en el proceso de guardar y sincronizar la base de datos central fuera de línea y en línea.

Mi comprensión actual es:

  • Los datos básicos se utilizan para almacenar datos localmente

  • iCloud sincroniza los datos y los almacena en la nube

  • CloudKit brinda la capacidad de almacenar y administrar datos en la nube.

Espero haber proporcionado suficiente información para que esta pregunta no se cierre.

Yan
fuente
2
Incluso yo no investigué mucho al respecto, pero por lo que entendí, no se almacena en local. Es algo así como un servicio de cliente de servidor normal. Es por eso que sin Internet no puede acceder a su base de datos. y según Doc, si el usuario no habilitó la cuenta de icloud en ese momento, solo puede leer los datos del contenedor público
Sachin
@Yan, ¿podemos hacer esto? Por favor sugiera, stackoverflow.com/questions/25600556/…
Nikunj

Respuestas:

183

Es como esto:

  • Core Data por sí solo, es completamente local y no funciona automáticamente con ninguno de los servicios en la nube de Apple.
  • Core Data con iCloud habilitado activa la sincronización a través de iCloud. Los cambios que guarde en Core Data se propagan a la nube y los cambios realizados en la nube se descargan automáticamente. Los datos se almacenan tanto en iCloud como en un archivo de tienda persistente local, por lo que están disponibles incluso cuando el dispositivo está desconectado. No tiene que escribir ningún código específico de la nube, solo necesita agregar la escucha de los cambios entrantes (que es muy parecido a los cambios realizados en un contexto de objeto administrado diferente).
  • CloudKit no está relacionado con Core Data. No es un sistema de sincronización, es un sistema de transferencia. Lo que significa que cada vez que desee leer / escribir datos en la nube, debe realizar llamadas explícitas a la API de CloudKit para hacerlo. No pasa nada automáticamente. CloudKit no almacena datos en el dispositivo, por lo que los datos no están disponibles si el dispositivo está fuera de línea. CloudKit también agrega algunas funciones que no están disponibles para Core Data con iCloud, como datos públicos compartidos y la capacidad de descargar solo una parte del conjunto de datos en lugar de todo.

Si quisiera usar CloudKit con Core Data, tendría que escribir su propio código personalizado para traducir entre objetos administrados y registros de CloudKit. No es imposible, pero es más código para escribir. Se podría ser más fiable, pero es demasiado pronto para decir con seguridad.

Escribí una publicación de blog que describe CloudKit desde la perspectiva de alguien que ha usado Core Data e iCloud en el pasado.

Actualización , junio de 2016: a partir de la documentación más reciente deNSPersistentStoreCoordinator , todo lo relacionado con Core Data con iCloud está marcado como obsoleto. Como resultado, probablemente debería evitarse para nuevos desarrollos.

Tom Harrington
fuente
1
En el pasado tuve problemas con la corrupción al usar Core Data con iCloud, pero no lo he usado mucho desde que salió iOS 7. Se supone que es mucho mejor. Con CloudKit es demasiado pronto para decirlo, ya que aún no se ha lanzado oficialmente.
Tom Harrington
3
@Tom Harrington - ¿Podría probar Core Data con iCloud para iOS 8 y dejarnos saber su impresión? También he experimentado mucha corrupción en iOS 7, y el soporte de Apple confirmó muchos errores. Espero que iOS 8 lleve su confiabilidad a un nivel aceptable, pero me encantaría saber de usted, el experto;)
hyouuu
1
Consulte CKSIncrementalStore. github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood
3
"No tiene que escribir ningún código específico de la nube, solo necesita agregar la escucha de los cambios entrantes (que es muy parecido a los cambios realizados en un contexto de objeto administrado diferente)". - ¿Tiene una muestra de código / ejemplo en este comentario? No hay ejemplos sólidos que pueda encontrar :(
Ernest
1
@TomHarrington con ese tipo de comentarios, ¿por qué incluso tener stackoverflow si todo lo que tenemos que hacer es verificar la documentación ?:(
Ernest