Sitemap

Member-only story

7 Swift Concurrency Bugs That Shipped to Production

11 min readJun 12, 2026

And the Patterns That Prevent Them

Press enter or click to view image in full size

A missing @MainActor.

A task that ran after the screen was gone. An actor that politely let another caller slip in mid-update. Each of these compiled.

Each one shipped. Each one taught me to stop trusting async/await quite so much.

This is a list of bugs I discovered quite some time ago. They’ve been sitting in my drafts for a while, and I never had the chance to publish them.

This time, I’m making an effort to finally document and share them.

Swift Concurrency looks safe.

The compiler warns you.

Actors serialize access. async/await reads like sequential code.

After two years of using it daily on a production iOS app real-time price feeds, WebSocket streams, paginated lists, animated UI I’ve come to a humbler view.

The compiler catches the easy mistakes.

The hard ones still ship.

They look correct, they pass code review, they survive QA, and then a user reports something weird two months later that turns out to be a data race the type checker didn’t have enough information to see.

--

--