top of page


How Do I Fix 'Main Actor-Isolated Property Can Not Be Referenced From a Nonisolated Context'?
Fix 'main actor-isolated property can not be referenced from a nonisolated context' in Swift 6 with four compiled fixes and a snapshot pattern.

Matthew Thomas
Oct 296 min read


What Is the RocketLaunch iOS App by 3 Days of Swift Concurrency?
RocketLaunch (Next Rocket Launch) is a free SwiftUI teaching app with feature actors, three providers, deliberate failure handling and a GCD comparison project.

Matthew Thomas
Oct 286 min read


How Do I Enable Strict Concurrency in Swift 6?
Enable complete concurrency checking in Xcode or Package.swift, switch targets to Swift 6 mode, and optionally use default MainActor isolation. Tested.

Matthew Thomas
Oct 275 min read


Is There a Deadline for Swift 6 Migration?
No deadline for Swift 6 language mode, but since 28 April 2026 App Store uploads need Xcode 26 (Swift 6.2). Here's what's required and what's optional.

Matthew Thomas
Oct 205 min read


What Is the Best Strategy for a Swift 6 Migration?
Big bang, file by file or feature slices? A behaviour-first, slice-by-slice Swift 6 migration strategy with leaf modules first and tested CFA examples.

Matthew Thomas
Oct 205 min read


How Do I Migrate from Swift 5 to Swift 6?
Xcode 26's Swift 6.2 compiler still builds Swift 5 mode. Learn what Swift 6 mode changes, which upcoming features it enables, and how to switch per target.

Matthew Thomas
Oct 205 min read


How Do I Migrate My App to Swift 6?
Migrate to Swift 6 feature by feature: record behaviour, enable complete checking, wrap callbacks, move state to owners, then switch targets. Tested code.

Matthew Thomas
Oct 205 min read


What Changed About Sendable in Swift 6?
Swift 6 turns Sendable violations into errors but allows safe hand-overs with region-based isolation and sending. See what changed, compiled in each mode.

Matthew Thomas
Oct 195 min read


What Changed for @MainActor in Swift 6?
Swift 6 enforces @MainActor isolation, requires owners for static state, drops wrapper inference, and Swift 6.2 adds default MainActor and isolated deinit.

Matthew Thomas
Oct 195 min read


When Should I Use MainActor.run in Swift?
MainActor.run hops to the main actor and back. Learn when it fits, why @MainActor ViewModels don't need it, and how to migrate DispatchQueue.main.async.

Matthew Thomas
Oct 195 min read


How Do I Make Cleanup Survive Task Cancellation in Swift 6.4?
Swift 6.4 lets you await in defer (SE-0493) and shield cleanup from cancellation with withTaskCancellationShield (SE-0504). When and how to make cleanup finish.

Matthew Thomas
Oct 165 min read


What Does @concurrent Mean in Swift 6.2?
Swift 6.2's @concurrent explained: why nonisolated async functions now run on the caller's actor, when to use @concurrent, and how to migrate safely.

Matthew Thomas
Oct 166 min read


Should I Use Task.checkCancellation or Task.isCancelled in Swift?
Task.checkCancellation vs Task.isCancelled in Swift: when to throw CancellationError, when to return quietly, where to put the checks, and which tasks inherit cancellation.

Matthew Thomas
Oct 156 min read


How Do I Use withTaskCancellationHandler in Swift?
How withTaskCancellationHandler works in Swift: when onCancel runs, why it can't touch actor state, and safe patterns for continuations and callbacks.

Matthew Thomas
Oct 157 min read


How Do I Use AsyncStream in Swift?
Turn repeating callbacks into a for await loop with AsyncStream. Learn yield, finish, onTermination, buffering and a real Swift 6 actor example.

Matthew Thomas
Oct 147 min read


How Do I Convert a Completion Handler to async/await in Swift?
Wrap a completion handler in withCheckedContinuation and resume exactly once. Learn throwing, delegate and cancellable continuations with Swift 6 code.

Matthew Thomas
Oct 146 min read


Metro Mate GCD to Swift Concurrency Migration: A Real iOS Case Study
How a real GCD metronome app was migrated to CFA and Swift Concurrency: audio off the main actor, Combine to Observation, and an honest regression.

Matthew Thomas
Oct 510 min read
bottom of page