Vor zwei Jahren war SwiftData für ernsthafte Apps nicht produktionsreif. Heute ist es das Default in jedem neuen Projekt, das wir starten. Was hat sich geändert — und was nicht?
Als SwiftData 2023 angekündigt wurde, haben wir es eingebaut, fluchend wieder ausgebaut und sind zurück zu Core Data gegangen. Migrationen waren broken, Predicates inkonsistent, Threading ein Wochenend-Crashkurs. Wer zuhört: Apple hat nachgearbeitet.
Was wir heute mögen
- Schemas sind tatsächlich Swift-Code. Kein .xcdatamodeld mehr, kein Click-Through-Editor. Die Datenbank ist im Repo lesbar.
- Migrations sind nicht mehr broken — solange du
VersionedSchemavon Anfang an benutzt. - Die Integration mit SwiftUI ist genau das, was Core Data nie war: ehrlich nutzbar.
- CloudKit-Sync kostet zwei Zeilen. Das ist wirklich passiert, nicht ironisch.
Was immer noch wehtut
Komplexe Predicates. Sobald du auf eine Relation joinst und nach mehreren Bedingungen filterst, fliegt dir der Compiler um die Ohren. Wir fallen in solchen Fällen auf FetchDescriptor-Builder zurück und bauen das Predicate von Hand.
// Funktioniert nicht — generischer Compiler-Crash let p = #Predicate<Receipt> { r in r.client.taxNumber == taxNo && r.amount > min && r.tags.contains("reisekosten") } // Stattdessen: kompiliert, funktioniert, getestet var desc = FetchDescriptor<Receipt>() desc.predicate = #Predicate { $0.amount > min } let all = try ctx.fetch(desc) return all.filter { $0.client.taxNumber == taxNo }
Hässlich? Ein bisschen. Funktioniert? Seit zwei Jahren in Produktion bei TaxCastle, ohne einen einzigen Crash-Report wegen dieses Pfades.
Wir sind aus der Schule, in der man jede Optimierung beweisen muss. Und für Apps unter 50.000 aktiven Belegen pro Mandant ist diese „Optimierung“ Geld, das man besser woanders ausgibt.Tilman, in einem Pull-Request-Kommentar
Empfehlung für 2026
Wenn du heute eine neue Apple-App startest und nicht mit zehntausenden Records pro Sekunde umgehen musst: SwiftData first. Erst wenn ein konkretes Performance-Profil zeigt, dass es nicht reicht, fallback auf GRDB oder Core Data. Wir haben das in den letzten zwölf Monaten in vier Projekten so durchgezogen — keine Überraschungen. Wie wir solche Projekte grundsätzlich aufsetzen, steht auf unserer Seite zur App-Entwicklung.