Menggunakan Data Inti, iCloud dan CloudKit untuk sinkronisasi dan pencadangan dan cara kerjanya bersama

111

Saya sedang dalam tahap awal membuat aplikasi tempat saya ingin menyimpan, menyinkronkan, dan mencadangkan data. Aplikasi tidak akan menyimpan file apa pun hanya data dalam database. Ini akan menjadi iOS 8 dan lebih tinggi jadi saya bisa menggunakan CloudKit. Saya melakukan beberapa penelitian dan masih belum jelas tentang bagaimana Core Data, iCloud dan CloudKit bekerja sama.

Sejauh yang dipahami, CloudKit hanyalah cara untuk mendapatkan dan mengambil data ke / dari cloud. Apakah CloudKit hanyalah cara berbeda untuk menyinkronkan data dengan iCloud?

Pertanyaan saya adalah:

  1. Jika saya menggunakan CloudKit, apakah saya masih perlu membuat database data inti lokal?

    • Jika ya, apakah itu akan secara otomatis disinkronkan dengan iCloud atau saya harus memanggil metode untuk menyimpan ke kedua tempat?
  2. Jika data hanya disimpan di cloud maka pengguna dapat mengaksesnya saat perangkat iOS tidak terhubung ke internet. Saya membaca bahwa CloudKit hanya akan memiliki caching terbatas.

  3. Bagaimana itu akan berhasil jika akun iCloud tidak diaktifkan.

Jika seseorang dapat memecah apa yang dilakukan masing-masing teknologi dalam proses menyimpan dan menyinkronkan database data inti secara offline dan online.

Pemahaman saya saat ini adalah:

  • Data Inti digunakan untuk menyimpan data secara lokal

  • iCloud menyinkronkan data dan menyimpan di cloud

  • CloudKit memberikan kemampuan untuk menyimpan dan mengelola data di cloud ??

Saya harap saya memberikan info yang cukup agar pertanyaan ini tidak ditutup.

Yan
sumber
2
Bahkan saya tidak melakukan banyak penelitian tentang itu, tetapi sejauh yang saya mengerti itu tidak disimpan di lokal. Ini seperti layanan klien server biasa. Itulah mengapa tanpa internet Anda tidak dapat mengakses DB Anda. dan sesuai Doc jika pengguna tidak mengaktifkan akun iCloud pada saat itu, Anda hanya dapat membaca data dari penampung publik
Sachin
@Ya, bisakah kita melakukan seperti ini, tolong sarankan, stackoverflow.com/questions/25600556/…
Nikunj

Jawaban:

183

Seperti ini:

  • Data Inti itu sendiri, sepenuhnya lokal dan tidak otomatis berfungsi dengan layanan cloud Apple mana pun.
  • Data Inti dengan iCloud diaktifkan mengaktifkan sinkronisasi melalui iCloud. Setiap perubahan yang Anda simpan di Data Inti disebarkan ke cloud, dan setiap perubahan yang dibuat di cloud secara otomatis diunduh. Data disimpan di iCloud dan di file penyimpanan persisten lokal, sehingga tersedia bahkan saat perangkat offline. Anda tidak perlu menulis kode khusus cloud, Anda hanya perlu menambahkan mendengarkan perubahan masuk (yang sangat mirip dengan perubahan yang dibuat pada konteks objek terkelola yang berbeda).
  • CloudKit tidak terkait dengan Data Inti. Ini bukan sistem sinkronisasi, ini sistem transfer. Artinya, kapan pun Anda ingin membaca / menulis data cloud, Anda perlu membuat panggilan CloudKit API eksplisit untuk melakukannya. Tidak ada yang terjadi secara otomatis. CloudKit tidak menyimpan data di perangkat, jadi data tidak tersedia jika perangkat offline. CloudKit juga menambahkan beberapa fitur yang tidak tersedia untuk Data Inti dengan iCloud - seperti data publik yang dibagikan dan kemampuan untuk mengunduh hanya sebagian dari kumpulan data, bukan semuanya.

Jika Anda ingin menggunakan CloudKit dengan Data Inti, Anda harus menulis kode khusus Anda sendiri untuk menerjemahkan antara objek yang dikelola dan catatan CloudKit. Bukan tidak mungkin, tetapi lebih banyak kode untuk ditulis. Ini mungkin lebih dapat diandalkan tetapi terlalu dini untuk mengatakan dengan pasti.

Saya menulis posting blog yang menjelaskan CloudKit dari perspektif seseorang yang menggunakan Core Data dan iCloud di masa lalu.

Pembaruan , Juni 2016: Pada dokumentasi terbaru untukNSPersistentStoreCoordinator , semua yang terkait dengan Data Inti dengan iCloud ditandai sebagai tidak berlaku lagi. Akibatnya mungkin harus dihindari untuk pengembangan baru.

Tom Harrington
sumber
1
Di masa lalu saya mengalami masalah dengan korupsi saat menggunakan Data Inti dengan iCloud, tetapi saya belum banyak menggunakannya sejak iOS 7 keluar. Ini seharusnya jauh lebih baik. Dengan CloudKit, terlalu dini untuk mengatakannya, karena masih belum dirilis secara resmi.
Tom Harrington
3
@Tom Harrington - Bisakah Anda mencoba Data Inti dengan iCloud untuk iOS 8 dan memberi tahu kami kesan Anda? Saya juga mengalami banyak kerusakan di iOS 7, dan dukungan Apple mengonfirmasi banyak bug. Saya berharap iOS 8 membawa keandalannya ke tingkat yang dapat diterima, tetapi ingin mendengar dari Anda, ahlinya;)
hyouuu
1
Lihat CKSIncrementalStore. github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood
3
"Anda tidak perlu menulis kode khusus cloud, Anda hanya perlu menambahkan mendengarkan perubahan yang masuk (yang sangat mirip dengan perubahan yang dibuat pada konteks objek terkelola yang berbeda)." - apakah Anda punya contoh kode / contoh di komentar ini? Tidak ada contoh pasti yang dapat saya temukan :(
Ernest
1
@TomHarrington dengan umpan balik semacam itu mengapa bahkan harus stackoverflow jika yang perlu kita lakukan hanyalah memeriksa dokumentasi :(
Ernest,
14

Dengan iOS 13, Apple mengumumkan fitur baru dalam Core Data untuk bekerja lebih baik dengan CloudKit. Penambahan utama adalah NSPersistentCloudKitContainer yang pada dasarnya mengelola sinkronisasi antara Core Data dan CloudKit untuk Anda.

Anda dapat mempelajari lebih lanjut di sesi WWDC Menggunakan Data Inti dengan CloudKit .

Apple juga merilis koleksi dokumen yang bagus untuk penggunaan ini: Mencerminkan penyimpanan Data Inti dengan CloudKit .

Pomme2Poule
sumber