{"id":48158,"date":"2025-06-19T15:38:38","date_gmt":"2025-06-19T19:38:38","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=48158"},"modified":"2026-01-20T18:03:26","modified_gmt":"2026-01-20T23:03:26","slug":"swiftdata-and-core-data-at-wwdc25","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2025\/06\/19\/swiftdata-and-core-data-at-wwdc25\/","title":{"rendered":"SwiftData and Core Data at WWDC25"},"content":{"rendered":"<p><a href=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2025\/291\/\">SwiftData: Dive into inheritance and schema migration<\/a>:<\/p>\n<blockquote cite=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2025\/291\/\"><p>Discover how to use class inheritance to model your data. Learn how to optimize queries and seamlessly migrate your app&rsquo;s data to use inheritance. Explore subclassing for building model graphs, crafting efficient fetches and queries, and implementing robust schema migrations. Understand how to use <code>Observable<\/code> and persistent history for efficient change tracking.<\/p><\/blockquote>\n\n<p>I&rsquo;m glad to see that inheritance isn&rsquo;t on the chopping block, as some feared, but otherwise this was disappointing. For the second year in a row, there don&rsquo;t seem to be any new features for Core Data (not even a mention in the session) or for integrating Core Data and SwiftData. Is Core Data frozen in time or still getting maintenance? How are you supposed to migrate when the feature sets&mdash;and even IDs&mdash;aren&rsquo;t equivalent? Aren&rsquo;t there tons of apps built on Core Data? What are they supposed to do? It seems like Apple doesn&rsquo;t care.<\/p>\n\n<p><a href=\"https:\/\/fatbobman.com\/en\/posts\/wwdc-2025-first-impressions\/\">Fatbobman<\/a>:<\/p>\n<blockquote cite=\"https:\/\/fatbobman.com\/en\/posts\/wwdc-2025-first-impressions\/\">\n<p>SwiftData added only one feature this year&mdash;model inheritance&mdash;which isn&rsquo;t widely used by most developers. Other highly requested capabilities, such as additional sync options (shared, public) and dynamic predicate adjustments, didn&rsquo;t materialize in this release. That said, this update isn&rsquo;t a failure. By fixing several critical bugs from previous versions and filling in some long-overdue functionality, SwiftData in Xcode 26 has become increasingly viable for real-world apps.<\/p>\n<\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/10\/16\/returning-to-core-data\/\">Returning to Core Data<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/09\/30\/swiftdata-expressions\/\">SwiftData Expressions<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/07\/26\/swiftdata-and-core-data-at-wwdc24\/\">SwiftData and Core Data at WWDC24<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/06\/04\/swiftdata-issues-in-macos-14-and-ios-17\/\">SwiftData Issues in macOS 14 and iOS 17<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/05\/28\/dynamic-swift-predicates-in-macos-14-and-ios-17\/\">Dynamic Swift Predicates in macOS 14 and iOS 17<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2023\/06\/12\/swiftdata\/\">SwiftData<\/a><\/li>\n<\/ul>\n\n<p id=\"swiftdata-and-core-data-at-wwdc25-update-2025-10-07\">Update (<a href=\"#swiftdata-and-core-data-at-wwdc25-update-2025-10-07\">2025-10-07<\/a>): <a href=\"https:\/\/mastodon.social\/@tonyarnold\/115324042006912977\">Tony Arnold<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@tonyarnold\/115324042006912977\"><p>Continuing on my SwiftData comments from <a href=\"https:\/\/mastodon.social\/@tonyarnold\/115320630206899599\">last<\/a> <a href=\"https:\/\/mastodon.social\/@tonyarnold\/115320736889884989\">night<\/a>, almost every &ldquo;serious&rdquo; use case ends in the user saying &ldquo;After discussing with DTS, I&rsquo;ve started converting the app to Core Data + CloudKit + Sharing&rdquo;. <\/p><p>I&rsquo;d love to learn more about how it takes so many, many years for a company the size and scope of Apple to move so very slowly with such a critical set of frameworks. <\/p><p>My assumption is that it&rsquo;s under-resourced? I don&rsquo;t know.<\/p><p>So now I&rsquo;m left with several options: <\/p><ol><li>Use SwiftData, but compromise what I wanted to build. <\/li><li>Use a third-party framework that might do what I need, but comes with the standard OSS caveats. <\/li><li>&#8230; <\/li><li>Go to the beach instead, and don&rsquo;t build apps.<\/li><\/ol><\/blockquote>\n\n<p id=\"swiftdata-and-core-data-at-wwdc25-update-2026-01-20\">Update (<a href=\"#swiftdata-and-core-data-at-wwdc25-update-2026-01-20\">2026-01-20<\/a>): <a href=\"https:\/\/mastodon.social\/@rosyna\/115912176844865070\">Rosyna Keller<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@rosyna\/115912176844865070\">\n<p>Is there anyway to disable SwiftData&rsquo;s History tracking?<\/p>\n<p>I know there are hacks to delete it once it&rsquo;s saved and that you lose a lot of &ldquo;free&rdquo; SwiftData features (like undo\/redo, multiprocess access, and CloudKit sync to name a few), but my app doesn&rsquo;t use those and most disk I\/O is taken up by just maintaining\/saving the history!<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>SwiftData: Dive into inheritance and schema migration: Discover how to use class inheritance to model your data. Learn how to optimize queries and seamlessly migrate your app&rsquo;s data to use inheritance. Explore subclassing for building model graphs, crafting efficient fetches and queries, and implementing robust schema migrations. Understand how to use Observable and persistent history [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2025-06-19T19:38:41Z","apple_news_api_id":"d2a07837-442c-4776-afa5-760d313f2349","apple_news_api_modified_at":"2026-01-20T23:03:29Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAg==","apple_news_api_share_url":"https:\/\/apple.news\/A0qB4N0QsR3avpXYNMT8jSQ","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[109,31,2741,30,2742,71,901,2404],"class_list":["post-48158","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-coredata","tag-ios","tag-ios-26","tag-mac","tag-macos-tahoe-26","tag-programming","tag-swift-programming-language","tag-swiftdata"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/48158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=48158"}],"version-history":[{"count":4,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/48158\/revisions"}],"predecessor-version":[{"id":50752,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/48158\/revisions\/50752"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=48158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=48158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=48158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}