0Pricing
Swift Academy · Pelajaran

Migrasi Ringan dan Sinkronisasi CloudKit

Memigrasikan perubahan skema dan mengaktifkan sinkronisasi CloudKit dengan NSPersistentCloudKitContainer.

Migrasi Ringan dan Sinkronisasi CloudKit adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Mengapa Migrasi?

Saat Anda mengubah model Core Data atau SwiftData (menambahkan, mengganti nama, atau menghapus atribut), Anda harus memigrasikan penyimpanan yang sudah ada.

// Without migration, app crashes on launch:
// "The model used to open the store is incompatible with the one used to create the store"

Migrasi Ringan di Core Data

Core Data dapat menyimpulkan migrasi sederhana secara otomatis (menambahkan atribut, mengganti nama, atau menghapusnya) tanpa model pemetaan.

let desc = NSPersistentStoreDescription(url: storeURL)
desc.shouldMigrateStoreAutomatically = true
desc.shouldInferMappingModelAutomatically = true
container.persistentStoreDescriptions = [desc]

Riwayat Versi dalam .xcdatamodeld

Buat versi model baru di Xcode: Editor → Tambahkan Versi Model. Tetapkan versi saat ini ke versi baru tersebut.

// In MyModel.xcdatamodeld:
// ├── MyModel.xcdatamodel  (v1 - old)
// └── MyModel 2.xcdatamodel (v2 - current)
// Set current version to v2 in File Inspector

Pembuatan Versi Skema SwiftData

Gunakan VersionedSchema dan SchemaMigrationPlan untuk mengelola versi model SwiftData.

enum AppSchemaV1: VersionedSchema {
  static var versionIdentifier = Schema.Version(1,0,0)
  static var models: [any PersistentModel.Type] { [ItemV1.self] }
  @Model final class ItemV1 { var name: String; init(name: String) { self.name = name } }
}

SchemaMigrationPlan

Tentukan tahap migrasi antarversi dalam SchemaMigrationPlan untuk memandu SwiftData saat melakukan pemutakhiran.

enum AppMigrationPlan: SchemaMigrationPlan {
  static var schemas: [any VersionedSchema.Type] { [AppSchemaV1.self, AppSchemaV2.self] }
  static var stages: [MigrationStage] { [migrateV1toV2] }
  static let migrateV1toV2 = MigrationStage.lightweight(fromVersion: AppSchemaV1.self, toVersion: AppSchemaV2.self)
}

Tahap Migrasi Khusus

Untuk migrasi kompleks (transformasi data), gunakan tahap .custom dengan closure willMigrate dan didMigrate.

static let migrateV1toV2 = MigrationStage.custom(
  fromVersion: AppSchemaV1.self,
  toVersion: AppSchemaV2.self,
  willMigrate: { context in
    // transform old data
  },
  didMigrate: nil
)

NSPersistentCloudKitContainer

Ganti NSPersistentContainer dengan NSPersistentCloudKitContainer untuk mengaktifkan sinkronisasi CloudKit.

let container = NSPersistentCloudKitContainer(name: "MyModel")
container.loadPersistentStores { _, error in
  if let error { fatalError("\(error)") }
}
container.viewContext.automaticallyMergesChangesFromParent = true

Persyaratan CloudKit

Sinkronisasi CloudKit memerlukan: akun iCloud yang sudah masuk, hak CloudKit, dan container CloudKit yang dikonfigurasikan di portal pengembang.

// Xcode: Signing & Capabilities → + → iCloud → CloudKit
// Enable "Use CloudKit" in Core Data model inspector

SwiftData dengan CloudKit

Teruskan ModelConfiguration dengan cloudKitDatabase untuk mengaktifkan sinkronisasi CloudKit di SwiftData.

let config = ModelConfiguration(
  schema: schema,
  cloudKitDatabase: .automatic
)
let container = try ModelContainer(for: schema, configurations: config)

Menangani Konflik Sinkronisasi

Core Data CloudKit menyelesaikan konflik menggunakan kebijakan penulisan terakhir yang menang. Rancang model untuk meminimalkan persaingan penulisan secara bersamaan.

// Best practice: keep models granular
// One attribute per write concern
// Avoid large blobs that frequently change

Menguji Migrasi

Uji migrasi pada salinan penyimpanan produksi sebelum merilisnya untuk menemukan masalah sebelum pengguna terdampak.

// Copy production store to a temp location
// Load it with the new container and verify objects are intact

Pemantauan Migrasi

Dengarkan notifikasi migrasi Core Data untuk menampilkan UI kemajuan selama migrasi yang panjang.

NotificationCenter.default.addObserver(
  forName: .NSPersistentStoreCoordinatorStoresWillChange,
  object: container.persistentStoreCoordinator,
  queue: .main
) { _ in showMigrationProgress() }

Pemeriksaan Cepat

Subkelas NSPersistentContainer mana yang mengaktifkan sinkronisasi CloudKit secara otomatis?

Ringkasan Pelajaran

Aktifkan migrasi ringan dengan shouldMigrateStoreAutomatically untuk perubahan sederhana. Gunakan VersionedSchema + SchemaMigrationPlan untuk SwiftData. Aktifkan sinkronisasi CloudKit dengan mengganti ke NSPersistentCloudKitContainer atau ModelConfiguration(cloudKitDatabase: .automatic).

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Migrasi Ringan dan Sinkronisasi CloudKit” gratis?

Ya — teks lengkap “Migrasi Ringan dan Sinkronisasi CloudKit” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Migrasi Ringan dan Sinkronisasi CloudKit”?

Memigrasikan perubahan skema dan mengaktifkan sinkronisasi CloudKit dengan NSPersistentCloudKitContainer. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Migrasi Ringan dan Sinkronisasi CloudKit” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Stack Core Data: Menyiapkan NSPersistentContainer
  2. SwiftData @Model dan ModelContext
  3. Relasi dan Fetch Descriptor
  4. Migrasi Ringan dan Sinkronisasi CloudKit
← Kembali ke Swift Academy