Utilisation de Core Data, iCloud et CloudKit pour la synchronisation et la sauvegarde et comment cela fonctionne ensemble

111

Je suis au tout début de la création d'une application dans laquelle je souhaite enregistrer, synchroniser et sauvegarder des données. L'application ne stockera aucun fichier uniquement des données dans une base de données. Ce sera iOS 8 et plus, donc je pourrai utiliser CloudKit. J'ai fait des recherches et je ne suis toujours pas clair sur la façon dont Core Data, iCloud et CloudKit fonctionnent ensemble.

Pour autant que je sache, CloudKit est juste un moyen d'obtenir et de récupérer des données vers / depuis le cloud. CloudKit est-il simplement une manière différente de synchroniser les données avec iCloud?

Mes questions sont:

  1. Si j'utilise CloudKit, dois-je encore créer une base de données de base locale?

    • Si oui, sera-t-il automatiquement synchronisé avec iCloud ou devrais-je appeler des méthodes pour stocker aux deux endroits?
  2. Si les données ne sont stockées que dans le cloud, l'utilisateur pourra y accéder lorsque l'appareil iOS n'est pas connecté à Internet. J'ai lu que CloudKit n'aura qu'une mise en cache limitée.

  3. Comment cela fonctionnera-t-il si le compte iCloud n'est pas activé.

Si quelqu'un peut en quelque sorte décomposer ce que fait chaque technologie dans le processus de sauvegarde et de synchronisation de la base de données de données de base hors ligne et en ligne.

Ma compréhension actuelle est:

  • Core Data est utilisé pour stocker des données localement

  • iCloud synchronise les données et les stocke dans le cloud

  • CloudKit donne la possibilité de stocker et de gérer des données dans le cloud ??

J'espère avoir fourni suffisamment d'informations pour que cette question ne soit pas fermée.

Yan
la source
2
Même moi, je n'ai pas fait beaucoup de recherches à ce sujet, mais autant j'ai compris qu'il ne stockait pas dans le local. C'est quelque chose comme un service client serveur normal. C'est pourquoi sans Internet, vous ne pouvez pas accéder à votre base de données. et selon le document si l'utilisateur n'a pas activé le compte icloud à ce moment-là, vous ne pouvez lire que les données du conteneur public
Sachin
@Yan pouvons-nous faire comme ça s'il vous plaît suggérer, stackoverflow.com/questions/25600556/…
Nikunj

Réponses:

183

C'est comme ça:

  • Les données de base en elles-mêmes sont entièrement locales et ne fonctionnent automatiquement avec aucun des services cloud d'Apple.
  • Core Data avec iCloud activé active la synchronisation via iCloud. Toutes les modifications que vous enregistrez dans Core Data sont propagées dans le cloud et toutes les modifications apportées dans le cloud sont automatiquement téléchargées. Les données sont stockées à la fois dans iCloud et dans un fichier de stockage persistant local, elles sont donc disponibles même lorsque l'appareil est hors ligne. Vous n'avez pas besoin d'écrire de code spécifique au cloud, il vous suffit d'ajouter l'écoute des modifications entrantes (ce qui ressemble beaucoup aux modifications apportées sur un autre contexte d'objet géré).
  • CloudKit n'est pas lié aux données de base. Ce n'est pas un système de synchronisation, c'est un système de transfert. Cela signifie que chaque fois que vous souhaitez lire / écrire des données cloud, vous devez effectuer des appels d'API CloudKit explicites pour le faire. Rien ne se passe automatiquement. CloudKit ne stocke pas de données sur l'appareil, donc les données ne sont pas disponibles si l'appareil est hors ligne. CloudKit ajoute également certaines fonctionnalités non disponibles pour Core Data avec iCloud, comme les données partagées publiques et la possibilité de télécharger uniquement une partie de l'ensemble de données au lieu de la totalité.

Si vous souhaitez utiliser CloudKit avec Core Data, vous devez écrire votre propre code personnalisé à traduire entre les objets gérés et les enregistrements CloudKit. Ce n'est pas impossible, mais c'est plus de code à écrire. C'est peut- être plus fiable, mais il est trop tôt pour le dire avec certitude.

J'ai écrit un article de blog décrivant CloudKit du point de vue de quelqu'un qui a utilisé Core Data et iCloud dans le passé.

Mise à jour , juin 2016: dans la documentation la plus récente deNSPersistentStoreCoordinator , tout ce qui concerne Core Data avec iCloud est marqué comme obsolète. En conséquence, il devrait probablement être évité pour de nouveaux développements.

Tom Harrington
la source
1
Dans le passé, j'ai eu des problèmes de corruption lors de l'utilisation de Core Data avec iCloud, mais je ne l'ai pas beaucoup utilisé depuis la sortie d'iOS 7. C'est censé être beaucoup mieux. Avec CloudKit, il est trop tôt pour le dire, car il n'est toujours pas officiellement publié.
Tom Harrington
3
@Tom Harrington - Pourriez-vous essayer Core Data avec iCloud pour iOS 8 et nous faire part de votre impression? J'ai également connu beaucoup de corruption dans iOS 7 et le support Apple a confirmé de nombreux bugs. J'espère qu'iOS 8 amènera sa fiabilité à un niveau acceptable, mais j'aimerais avoir de vos nouvelles, l'expert;)
hyouuu
1
Découvrez CKSIncrementalStore. github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood
3
"Vous n'avez pas besoin d'écrire de code spécifique au cloud, il vous suffit d'ajouter l'écoute des modifications entrantes (ce qui ressemble beaucoup aux modifications apportées sur un contexte d'objet géré différent)." - avez-vous un exemple de code / exemple sur ce commentaire? Il n'y a pas d'exemples solides que je puisse trouver :(
Ernest
1
@TomHarrington avec ce genre de commentaires, pourquoi même avoir un stackoverflow si tout ce que nous avons à faire est de vérifier la documentation :(
Ernest
15

Avec iOS 13, Apple a annoncé de nouvelles fonctionnalités dans Core Data pour mieux fonctionner avec CloudKit. Le principal ajout est NSPersistentCloudKitContainer qui gère essentiellement la synchronisation entre Core Data et CloudKit pour vous.

Vous pouvez en savoir plus dans la session WWDC Utilisation des données de base avec CloudKit .

Apple a également publié une belle collection de documents pour cette utilisation même: la mise en miroir d'un magasin de données de base avec CloudKit .

Pomme2Poule
la source