Swift Version Matrix
Which Swift, which Xcode, which OSes ship together — and what each Swift release introduced. Use this to answer “what’s the minimum Xcode I need?” or “when did async/await ship?”
Compatibility table
| Swift | Xcode (min) | iOS / iPadOS | macOS | watchOS | tvOS | visionOS | Released |
|---|---|---|---|---|---|---|---|
| 6.0 | 16 | 18 | 15 (Sequoia) | 11 | 18 | 2 | Sept 2024 |
| 5.10 | 15.3 | 17.4 | 14.4 | 10.4 | 17.4 | 1.1 | Mar 2024 |
| 5.9 | 15 | 17 | 14 (Sonoma) | 10 | 17 | 1 | Sept 2023 |
| 5.8 | 14.3 | 16.4 | 13.3 | 9.4 | 16.4 | — | Mar 2023 |
| 5.7 | 14 | 16 | 13 (Ventura) | 9 | 16 | — | Sept 2022 |
| 5.6 | 13.3 | 15.4 | 12.3 | 8.5 | 15.4 | — | Mar 2022 |
| 5.5 | 13 | 15 | 12 (Monterey) | 8 | 15 | — | Sept 2021 |
| 5.3 | 12 | 14 | 11 (Big Sur) | 7 | 14 | — | Sept 2020 |
Older versions exist; you almost never write new code against them. Apps in the App Store today commonly target iOS 16 or 17 minimum, which means Swift 5.7 or 5.9 features are universally available.
What each Swift release added
Swift 6 (Sept 2024)
- Strict concurrency by default — opt-in via
-strict-concurrency=completewas rolled into the default. Data race safety enforced at compile time. - Typed throws —
func f() throws(MyError). Errors are now part of the type system. - Existential
any— required forany Ptypes wherePhas associated types or generics. - Sendable inference improvements — many more types automatically become
Sendable. - Pack iteration — variadic generics finally have iteration sugar.
Swift 5.10 (Mar 2024)
- Data isolation transitions — closing the last holes in actor isolation.
AccessLevelon imports —internal import Footo keep transitive deps internal.
Swift 5.9 (Sept 2023)
- Macros —
@attached,@freestanding. Use this for@Observable,#Preview,@Model. if/switchas expressions —let x = if cond { 1 } else { 2 }.- Noncopyable types —
~Copyableconstraint. - Generic parameter packs — variadic generics minus iteration.
Swift 5.8 (Mar 2023)
- Function back-deployment —
@backDeployedlets new stdlib APIs work on older OSes. unsafeForcedSyncforResult— minor ergonomics.
Swift 5.7 (Sept 2022)
- Existential improvements —
any Psyntax introduced. - Type inference for generic args — many call sites stop needing explicit generic params.
- Regex literals —
/(\d+)-(\d+)/.
Swift 5.5 (Sept 2021) — the big one
async/await— structured concurrency arrives.- Actors —
actor MyType { ... }. TaskandTaskGroup.@MainActor.async let.- AsyncSequence.
Everything before 5.5 is “pre-concurrency Swift” — it works, but Combine and callback-based APIs dominated.
Swift 5.3 (Sept 2020)
- SwiftPM resources — bundle assets in a package.
- Multi-pattern catch —
catch ErrorA, ErrorB. @main— single attribute for app entry point.
Mapping versions to “what can I use?”
When deciding minimum iOS version for an app:
- iOS 17+ (Swift 5.9): use Macros, Observation, SwiftData. Strongly recommended for new apps in 2024+.
- iOS 16+ (Swift 5.7): regex literals, existential
any. No SwiftData; use SwiftUI navigationNavigationStack. - iOS 15+ (Swift 5.5): async/await available, but
AsyncSequenceergonomics are weaker. NoObservablemacro. - iOS 14+ (Swift 5.3): pre-concurrency. Use
Combineor callbacks. Last refuge for legacy apps.
App Store submission Xcode requirement
Apple periodically raises the minimum Xcode required for App Store submissions. As of late 2024, submissions require Xcode 15.4 or later. Check Apple’s submission requirements before shipping; this changes ~annually.
When to target what
| Audience | Suggested min iOS | Why |
|---|---|---|
| New consumer app, 2025 | iOS 17 | Get SwiftData, Macros, Observation; market still growing |
| New consumer app, broader reach | iOS 16 | Still ~98%+ of active devices |
| Enterprise / regulated | iOS 15 | Covers slow MDM rollouts |
| Specific accessibility need | older | Confirm the device class is actively in use |
Don’t target older than necessary — every supported version adds testing surface and #available checks.