Dev iconDevAug 24, 2026 ~1 min source read

Swift 6 turned working code into a compile error and iOS devs are furious

Everything was working perfectly fine in your application for multiple years. Then one day a simple configuration change of a flag resulted in over 20,000 warnings for you to handle.

Swift 6 turned working code into a compile error and iOS devs are furious

Share this story

Send the public story page.

Useful takeaways from this story.

Everything was working perfectly fine in your application for multiple years.

The main highlight of Swift 6 was default data-race safety, achieved by strict concurrency checks during compilation (and strict concurrency checking is now on by default).

According to Apple's WWDC 2024 sessions, they caused almost 30% of crashes in production iOS apps.

Building the complete brief

The page is ready to read now. The fuller skim-friendly version will appear here automatically.

The useful part

Everything was working perfectly fine in your application for multiple years. Then one day a simple configuration change of a flag resulted in over 20,000 warnings for you to handle. Welcome to Swift 6, where your working code yesterday is a compiler error today.

How it works

  • The main highlight of Swift 6 was default data-race safety, achieved by strict concurrency checks during compilation (and strict concurrency checking is now on by default).
  • The compiler now mathematically proves your code has no data races before it even runs.
  • This is important because data races were a serious issue.
  • ## The change nobody asked to be default WWDC 2024 introduced Swift 6, which was then reinforced and solidified in 2025 and 2026.
  • According to Apple's WWDC 2024 sessions, they caused almost 30% of crashes in production iOS apps.

What to take from it

Sendable closures and actor isolation don't play nice with code written before they existed. For example, on the Swift.org forums in April 2025, a developer mentioned that they added @MainActor to all classes to fix the errors and 50 more appeared. Three and a half days were spent verifying that code which had already been sent for production was correct.

Details worth keeping

This means that an entire category of Heisenbugs disappears. Theoretically, this is a significant advantage. Writing for Level Up Coding in December 2025, iOS developer Alok Upadhyay flipped the Strict Concurrency Checking flag on his team's largest legacy module and got 20,000 warnings, describing his screen as "a sea of red and orange warnings." Another common issue is referred to as "whack-a-mole".

Keep reading in the app

Open the app view to save this story, compare related coverage, and continue from the same source.

Open in app