Section 13/181 menit
13. CloudKit Sync
13. CloudKit Sync
SwiftData mendukung sinkronisasi otomatis dengan CloudKit Private Database dengan konfigurasi minimal.
swift
// Aktifkan CloudKit sync
let cloudConfig = ModelConfiguration(
schema: Schema([Book.self, Author.self]),
cloudKitDatabase: .automatic // gunakan default container dari entitlements
)
// Atau dengan container ID eksplisit
let cloudConfig2 = ModelConfiguration(
schema: Schema([Book.self]),
cloudKitDatabase: .private("iCloud.com.yourcompany.yourapp")
)
let container = try ModelContainer(
for: Schema([Book.self, Author.self]),
configurations: cloudConfig
)
Syarat Model untuk CloudKit
CloudKit memiliki batasan yang membuat beberapa konfigurasi SwiftData tidak kompatibel:
swift
// ❌ CloudKit tidak mendukung unique constraints
@Model final class User {
@Attribute(.unique) var email: String // error saat runtime dengan CloudKit
}
// ❌ CloudKit tidak mendukung relasi dengan deleteRule .deny
@Relationship(deleteRule: .deny) var items: [Item]
// ✓ Semua properti harus opsional atau punya default untuk CloudKit
@Model final class CloudBook {
var title: String = "" // default value
var author: String = ""
var isRead: Bool = false
var addedAt: Date = Date()
var coverImageData: Data? // optional untuk gambar besar
init(title: String, author: String) {
self.title = title
self.author = author
}
}