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

SwiftXcode (min)iOS / iPadOSmacOSwatchOStvOSvisionOSReleased
6.0161815 (Sequoia)11182Sept 2024
5.1015.317.414.410.417.41.1Mar 2024
5.9151714 (Sonoma)10171Sept 2023
5.814.316.413.39.416.4Mar 2023
5.7141613 (Ventura)916Sept 2022
5.613.315.412.38.515.4Mar 2022
5.5131512 (Monterey)815Sept 2021
5.3121411 (Big Sur)714Sept 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=complete was rolled into the default. Data race safety enforced at compile time.
  • Typed throwsfunc f() throws(MyError). Errors are now part of the type system.
  • Existential any — required for any P types where P has 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.
  • AccessLevel on importsinternal import Foo to keep transitive deps internal.

Swift 5.9 (Sept 2023)

  • Macros@attached, @freestanding. Use this for @Observable, #Preview, @Model.
  • if/switch as expressionslet x = if cond { 1 } else { 2 }.
  • Noncopyable types~Copyable constraint.
  • Generic parameter packs — variadic generics minus iteration.

Swift 5.8 (Mar 2023)

  • Function back-deployment@backDeployed lets new stdlib APIs work on older OSes.
  • unsafeForcedSync for Result — minor ergonomics.

Swift 5.7 (Sept 2022)

  • Existential improvementsany P syntax 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.
  • Actorsactor MyType { ... }.
  • Task and TaskGroup.
  • @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 catchcatch 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 navigation NavigationStack.
  • iOS 15+ (Swift 5.5): async/await available, but AsyncSequence ergonomics are weaker. No Observable macro.
  • iOS 14+ (Swift 5.3): pre-concurrency. Use Combine or 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

AudienceSuggested min iOSWhy
New consumer app, 2025iOS 17Get SwiftData, Macros, Observation; market still growing
New consumer app, broader reachiOS 16Still ~98%+ of active devices
Enterprise / regulatediOS 15Covers slow MDM rollouts
Specific accessibility needolderConfirm the device class is actively in use

Don’t target older than necessary — every supported version adds testing surface and #available checks.