Section 18/181 menit
18. Ringkasan & Decision Guide
18. Ringkasan & Decision Guide
Kapan Gunakan Fitur Apa
| Situasi | Fitur |
|---|---|
| Model punya ID dari server, data bisa duplikat saat sync | @Attribute(.unique) |
| Property berisi Data besar (foto, PDF) | @Attribute(.externalStorage) |
| User perlu cari data via Spotlight | @Attribute(.spotlight) |
| Filter sering dilakukan pada property tertentu | @Attribute(.index) |
| Property dalam-memory, tidak perlu disimpan | @Attribute(.ephemeral) |
| Rename property dari versi sebelumnya | @Attribute(originalName:) |
| Hapus parent harus hapus semua children | @Relationship(deleteRule: .cascade) |
| Hapus parent tidak boleh jika masih ada children | @Relationship(deleteRule: .deny) |
| Import data besar dari server | @ModelActor + batch insert |
| Data berubah di extension/background process | History tracking |
| Query kompleks lintas relasi | #Predicate traversal + relationshipKeyPathsForPrefetching |
| Data model berubah antar versi | VersionedSchema + SchemaMigrationPlan |
| Sync data ke iCloud | ModelConfiguration(cloudKitDatabase: .automatic) |
| Unit testing persistence logic | In-memory ModelContainer |
Checklist Sebelum Shipping
swift
□ Semua perubahan schema menggunakan VersionedSchema (bukan langsung rename)
□ Model yang di-sync via CloudKit: semua property optional atau ada default
□ Operasi batch (>50 records) menggunakan @ModelActor, bukan main context
□ Property yang sering di-filter sudah punya @Attribute(.index)
□ Data besar (>100KB) menggunakan @Attribute(.externalStorage)
□ Test coverage: in-memory container untuk semua repository tests
□ Tidak ada model instance yang di-pass antar thread (gunakan PersistentIdentifier)
□ FetchDescriptor dengan limit pada semua query yang tidak butuh semua data
□ Relationship yang sering di-akses di-prefetch (relationshipKeyPathsForPrefetching)
□ CloudKit: test di device fisik dengan iCloud account aktif sebelum release
SwiftData di level lanjutan adalah tentang kontrol yang tepat di tempat yang tepat: biarkan framework bekerja otomatis (upsert, sync, lazy loading) di tempat yang bisa dipercaya, dan ambil kontrol manual (custom migration, batch actor, conflict resolution) hanya di tempat yang memang butuh perhatian ekstra.