iOS 17 ile Apple SwiftData’yı duyurduğunda ilk tepkim “artık CoreData’yı unutabilirim” oldu. Macro’lar, clean syntax, SwiftUI ile native entegrasyon. Sonra gerçek bir projede kullanmaya başladım ve hikaye biraz daha karmaşık çıktı.
2 iOS uygulamamda SwiftData denedim, 10 uygulamada hâlâ CoreData kullanıyorum. Neden? Çünkü SwiftData çok yeni ve belli durumlarda CoreData’nın yaptığı şeyleri hâlâ yapamıyor. Bu yazıda hangi projede hangisini seçeceğinizi anlatacağım.
SwiftData’nın kazandığı yerler
1. Minimum boilerplate. @Model makro’suyla class’ını tanımlıyorsun, Apple arkada persistence’ı yönetiyor. CoreData’nın xcdatamodeld dosyası, NSManagedObject subclass’ları, NSPersistentContainer setup’ı hepsi ortadan kalkıyor. Tipik bir model tanımı CoreData’da 80 satır kod gerektirirken SwiftData’da 10 satır yetiyor.
2. SwiftUI entegrasyonu native. @Query property wrapper’ıyla view’ınızda direkt filter, sort, limit yapıyorsunuz. CoreData’da bunun için @FetchRequest kullanıyorduk ama syntax daha çirkindi. SwiftData’da predicate’ler bile Swift macro’larla type-safe.
3. Migration’lar otomatik. Yeni property ekleyip runtime’da kullanmaya başlayabiliyorsun. CoreData’nın versioned model migration yapılandırması (genelde 2-3 saatlik bir iş) SwiftData’da çoğu zaman gereksiz.
4. CloudKit sync built-in. modelContainer(for: Item.self, isCloudKitEnabled: true) tek satır. CoreData’da CloudKit integration için NSPersistentCloudKitContainer ve schema mirroring ayarları gerekiyordu.
CoreData’nın hâlâ kazandığı yerler
1. Karmaşık relationship’ler. SwiftData many-to-many relationship’leri destekliyor ama cascade rules, inverse relationships, orphan deletion gibi ince ayarlar hâlâ eksik. CoreData’da 10 yıllık olgunlaşmış bir API var.
2. Performans kritik durumlar. Dentii için 10K+ entry’lik bir brushing history tuttuğumuzda SwiftData’da bazı query’ler CoreData’ya göre 2-3x daha yavaştı. Apple muhtemelen bunu düzeltecek ama bugün gerçek.
3. Olgun migration strategy. CoreData’da versioned migration, lightweight/heavyweight migration, manual mapping model gibi patterns mevcut ve test edilmiş. SwiftData’da karmaşık schema değişikliklerinde hâlâ bug’larla karşılaşıyorsunuz.
4. Third-party integration. CoreData etrafında 10 yıllık bir ecosystem var. NSFetchedResultsController ile custom collection views, background sync helper’ları, debugging tools. SwiftData hâlâ bu ecosystem’i oluşturuyor.
5. iOS 16 ve altı desteği. SwiftData iOS 17+. Eski iOS kullanıcılarına hizmet veriyorsan CoreData zorunluluk.
Seçim matrisi
Yeni başlayan bir iOS projesi için benim karar matrisim:
- iOS 17+ target, basit model, SwiftUI-only: SwiftData
- iOS 16 veya altı destek gerekli: CoreData
- 10K+ entry bekleyen veri modeli: CoreData (şimdilik)
- Karmaşık relationship’ler (3+ seviye): CoreData
- CloudKit sync kritik: SwiftData (eğer iOS 17+ targetlıyorsan)
- Offline-first, complex sync: CoreData (olgun)
- Prototype / MVP: SwiftData (hızlı)
- 5+ yıl yaşayacak enterprise app: CoreData (risk azaltma)
Hibrit kullanım mümkün mü?
Teorik olarak evet, aynı app’te bazı model’ler SwiftData bazıları CoreData olabilir. Ama pratikte kafa karıştırıyor: hangi store hangi model’e bakıyor, migration hangi araçla yönetilecek, test strategy nasıl kurulacak. Kaçının.
Aynı model’i iki mekanizmada tutmak daha da kötü. Sync logic complexity exponentially artıyor.
SwiftData’nın olgunlaşma grafiği
iOS 17 (Eylül 2023) ilk release. iOS 17.2’de temel bug fix’ler. iOS 18’de (Eylül 2024) ciddi iyileştirmeler (index support, custom migration’lar, unique constraints). iOS 18.1’de production-ready olduğunu söylemek adil.
WWDC 2026’ya kadar SwiftData CoreData özelliklerinin %90’ını yakalayacak gibi görünüyor. O noktada yeni projeler için default seçim SwiftData olabilir. Ama şu anda (2024 sonu) hâlâ her iki araca hakim olmanızı öneriyorum.
Pratik başlangıç stratejisi
Yeni bir iOS 17+ projesinde ben şöyle karar veriyorum:
- Model 10’dan az entity mi, relationship’ler düz mü? → SwiftData ile başla.
- Gerçek kullanımda performance issue çıkar mı? → Benchmark yap, gerekirse CoreData’ya geçmek için migration path hazırlan.
- Eğer henüz App Store’a yayınlanmadıysan, switch yapmak 1-2 günlük iş. Production sonrası switch çok daha maliyetli.
SwiftData doğru yöne giden bir teknoloji. Ama “her projede zorunlu” henüz değil. Kendi durumunuza göre seçin.