top of page


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


Should I Use Swift Concurrency or Combine?
Swift concurrency vs Combine compared on network calls, timers and debounced search, with AsyncStream code, a decision table and a gradual migration path.

Matthew Thomas
Oct 275 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


What Is Swift 6 Strict Concurrency Checking?
Strict concurrency checking is Swift's compile-time data-race checker. See Minimal, Targeted, Complete and Swift 6 mode compared on the same code.

Matthew Thomas
Oct 205 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


How Do I Make a Class Sendable in Swift?
Make a class Sendable with final and let, a Mutex, an actor or @MainActor, and use @unchecked Sendable only as a last resort. Tested with Swift 6.2.

Matthew Thomas
Oct 195 min read


What Is a Sendable Closure in Swift?
A @Sendable closure may run in another concurrency domain, so it can only capture Sendable values. Learn the errors, fixes and sending vs @Sendable.

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


Should I Use @Observable or ObservableObject in SwiftUI?
Should you use @Observable or ObservableObject in SwiftUI? Per-property tracking, a runnable demo, a migration mapping and the traps to avoid.

Matthew Thomas
Oct 166 min read
bottom of page