Korzystanie z danych podstawowych, iCloud i CloudKit do synchronizacji i tworzenia kopii zapasowych oraz tego, jak to działa razem

111

Jestem na wczesnym etapie tworzenia aplikacji, w której chciałbym zapisywać, synchronizować i tworzyć kopie zapasowe danych. Aplikacja nie będzie przechowywać żadnych plików, tylko dane w bazie danych. Będzie to iOS 8 i nowsze, więc będę mógł używać CloudKit. Zrobiłem kilka badań i nadal nie wiem, jak współdziałają Core Data, iCloud i CloudKit.

O ile rozumiem, CloudKit to tylko sposób na pobieranie i odzyskiwanie danych do / z chmury. Czy CloudKit to tylko inny sposób synchronizowania danych z iCloud?

Moje pytania to:

  1. Jeśli korzystam z CloudKit, czy nadal muszę tworzyć lokalną podstawową bazę danych?

    • Jeśli tak, czy zostanie automatycznie zsynchronizowany z iCloud, czy też będę musiał wywołać metody do przechowywania w obu miejscach?
  2. Jeśli dane są przechowywane tylko w chmurze, użytkownik będzie mógł uzyskać do nich dostęp, gdy urządzenie iOS nie jest podłączone do Internetu. Czytałem, że CloudKit będzie miał tylko ograniczone buforowanie.

  3. Jak to zadziała, jeśli konto iCloud nie jest włączone.

Jeśli ktoś może w pewnym sensie zepsuć, co każda technologia robi w procesie zapisywania i synchronizowania podstawowej bazy danych w trybie offline i online.

Obecnie rozumiem:

  • Dane podstawowe służą do lokalnego przechowywania danych

  • iCloud synchronizuje dane i przechowuje je w chmurze

  • CloudKit daje możliwość przechowywania i zarządzania danymi w chmurze?

Mam nadzieję, że podałem wystarczająco dużo informacji, aby to pytanie nie zostało zamknięte.

Yan
źródło
2
Nawet ja nie zrobiłem tak dużo badań na ten temat, ale tak bardzo rozumiałem, że nie należy go przechowywać w lokalnym. To coś w rodzaju zwykłej usługi klienta serwera. Dlatego bez internetu nie możesz uzyskać dostępu do swojej bazy danych. i zgodnie z Doc, jeśli użytkownik nie włączył konta icloud w tym czasie, możesz odczytać dane tylko z publicznego kontenera
Sachin
@Yan, czy możemy to zrobić, zasugeruj, stackoverflow.com/questions/25600556/ ...
Nikunj

Odpowiedzi:

183

To jest tak:

  • Podstawowe dane same w sobie są całkowicie lokalne i nie współpracują automatycznie z żadną usługą chmurową Apple.
  • Podstawowe dane z włączoną usługą iCloud włączają synchronizację przez iCloud. Wszelkie zmiany zapisane w danych podstawowych są propagowane do chmury, a wszelkie zmiany wprowadzone w chmurze są automatycznie pobierane. Dane są przechowywane zarówno w iCloud, jak iw lokalnym trwałym pliku magazynu, dzięki czemu są dostępne nawet wtedy, gdy urządzenie jest offline. Nie musisz pisać żadnego kodu specyficznego dla chmury, wystarczy dodać nasłuchiwanie nadchodzących zmian (co jest bardzo podobne do zmian wprowadzonych w innym kontekście obiektu zarządzanego).
  • CloudKit nie jest powiązany z danymi podstawowymi. To nie jest system synchronizacji, to system transferu. Oznacza to, że za każdym razem, gdy chcesz odczytywać / zapisywać dane w chmurze, musisz wykonać jawne wywołania CloudKit API, aby to zrobić. Nic nie dzieje się automatycznie. CloudKit nie przechowuje danych na urządzeniu, więc dane nie są dostępne, jeśli urządzenie jest w trybie offline. CloudKit dodaje również pewne funkcje niedostępne dla danych podstawowych w iCloud - takie jak publiczne udostępnione dane i możliwość pobrania tylko części zestawu danych zamiast całości.

Jeśli chciałbyś używać CloudKit z podstawowymi danymi, musiałbyś napisać własny niestandardowy kod, aby tłumaczyć między zarządzanymi obiektami a rekordami CloudKit. Nie jest to niemożliwe, ale trzeba napisać więcej kodu. To może być bardziej wiarygodne, ale to zbyt wcześnie, aby powiedzieć na pewno.

Napisałem wpis na blogu opisujący CloudKit z perspektywy kogoś, kto w przeszłości korzystał z Core Data i iCloud.

Aktualizacja , czerwiec 2016 r .: Według najnowszej dokumentacjiNSPersistentStoreCoordinator wszystko, co dotyczy danych podstawowych w usłudze iCloud, jest oznaczone jako przestarzałe. W rezultacie należy go prawdopodobnie unikać w przypadku nowego rozwoju.

Tom Harrington
źródło
1
W przeszłości miałem problemy z korupcją podczas używania danych podstawowych z iCloud, ale nie używałem ich zbyt wiele od czasu premiery iOS 7. Powinno być znacznie lepiej. W przypadku CloudKit jest za wcześnie, aby to powiedzieć, ponieważ nadal nie jest oficjalnie wydany.
Tom Harrington
3
@Tom Harrington - Czy mógłbyś wypróbować Core Data z iCloud na iOS 8 i przekazać nam swoje wrażenia? Doświadczyłem również wielu błędów w iOS 7, a wsparcie Apple potwierdziło wiele błędów. Mam nadzieję, że iOS 8 podniesie swoją niezawodność do akceptowalnego poziomu, ale chciałbym usłyszeć od Ciebie, eksperta;)
hyouuu
1
Sprawdź CKSIncrementalStore. github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood
3
„Nie musisz pisać żadnego kodu specyficznego dla chmury, wystarczy dodać nasłuchiwanie nadchodzących zmian (co jest bardzo podobne do zmian wprowadzonych w innym kontekście obiektu zarządzanego)”. - czy masz przykładowy kod / przykład w tym komentarzu? Nie ma solidnych przykładów, które mogę znaleźć :(
Ernest
1
@TomHarrington z tego rodzaju opiniami, po co w ogóle mieć przepełnienie stosu, skoro wszystko, co musimy zrobić, to sprawdzić dokumentację :(
Ernest
15

Wraz z iOS 13 firma Apple ogłosiła nowe funkcje danych podstawowych, aby lepiej współpracować z CloudKit. Głównym dodatkiem jest NSPersistentCloudKitContainer, który w zasadzie zarządza synchronizacją między danymi podstawowymi a CloudKit.

Możesz dowiedzieć się więcej w sesji WWDC Używanie danych podstawowych z CloudKit .

Firma Apple wydała również niezłą kolekcję dokumentów do tego właśnie zastosowania: tworzenie kopii lustrzanych magazynu danych podstawowych za pomocą CloudKit .

Pomme2Poule
źródło