Skip to content

Commit b019b95

Browse files
authored
chore: raise minimum supported platform, Swift, and Xcode versions (#4271)
* chore: raise minimum supported platform, Swift, and Xcode versions Apple has required Xcode 26 and the 26 SDKs for App Store Connect uploads since April 28, 2026. Per the support policy in README.md, Amplify Swift tracks the Swift version shipped with the minimum Xcode allowed for App Store Connect uploads. Platform floors now match Apple's published Xcode 26 support matrix, and the Swift toolchain floor matches AWS SDK for Swift: - iOS 13 -> 15 - tvOS 13 -> 15 - macOS 12 (unchanged) - watchOS 9 (unchanged, already above Apple's floor of 8) - visionOS: declared in Package.swift for the first time, promoted to GA - swift-tools-version 5.9 -> 6.0 - Minimum Xcode 16.0 -> 26.0 Adopting the Swift 6 language mode is deliberately out of scope. Raising swift-tools-version to 6.0 would otherwise flip the default language mode to Swift 6, so `swiftLanguageModes: [.v5]` pins the existing behavior and keeps this change behavior-neutral. The strict-concurrency migration is tracked separately. CI: - Runners moved from macos-15 to macos-26 - Latest Xcode 26.3 -> 26.5; minimum 16.0.0 -> 26.0.1 - Removed the Xcode 16 legs and the duplicate hardcoded 16.4.0 pins - Simulator devices updated to those present on macos-26 (iPhone 17 Pro Max, Apple Watch Series 11); minimum-Xcode legs use the 26.2 runtime because the image ships 26.0 SDKs but installs no 26.0 runtime - visionOS added to the minimum-supported-version build matrix, which previously never exercised the platform the docs call supported - Added an advisory, non-blocking nightly build against the Xcode 27 preview image for early warning on the next Xcode release Docs: corrected the stale Xcode 13.4 requirement in CONTRIBUTING.md. Three test files were reformatted because raising swiftformat's --swiftversion to 6.0 activates the preferCountWhere rule. * fix(predictions): exclude CoreML predictions plugin from tvOS explicitly The tvOS build failed with "'SFSpeechRecognitionResult' is unavailable in tvOS". SFSpeechRecognitionResult is marked API_UNAVAILABLE(tvos), and the CoreML predictions plugin was relying on `#if canImport(Speech)` to compile itself out on tvOS. As of the Xcode 26 SDKs, the tvOS Speech framework ships a module (module.modulemap and Speech.swiftmodule), so canImport(Speech) now succeeds on tvOS while the type itself remains unavailable. The guard silently stopped excluding the platform. Verified this is an SDK change and not a consequence of raising the tvOS deployment floor: the same file fails to compile against the Xcode 26 tvOS SDK at both tvos13.0 and tvos15.0. Adding `&& !os(tvOS)` restores the pre-Xcode-26 behavior. Applied to every file in the CoreML plugin rather than only the Speech types, because the plugin's configure/reset/client-behavior files reference those types and were previously compiled out as a unit. Verified by building CoreMLPredictionsPlugin and AWSPredictionsPlugin for arm64-apple-tvos15.0-simulator, and confirming macOS still compiles CoreMLPredictionService so the plugin stays active where Speech is genuinely available. * chore: raise host app iOS deployment targets to match the new floor Integration tests failed to build with: compiling for iOS 14.0, but module 'Amplify' has a minimum deployment target of iOS 15.0 Raising the package floor to iOS 15 left four Xcode projects behind, so they still tried to link an Amplify built for a newer target than their own: APIHostApp 13.0 -> 15.0 DataStoreHostApp 13.0 -> 15.0 PredictionsHostApp 14.0 -> 15.0 canaries/example 14.4 -> 15.0 Checked the other platforms for the same gap and found none: watchOS host apps are at 9.0/9.4/10.0 against a floor of 9, tvOS is at 16.4 against 15, macOS is at 14.6/15.0 against 12, and StorageHostApp's Base.xcconfig was already 15.0/12.0.
1 parent c2814bc commit b019b95

40 files changed

Lines changed: 130 additions & 138 deletions

File tree

.github/composite_actions/get_platform_parameters/action.yml

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ runs:
4141

4242
- id: get-xcode-version
4343
run: |
44-
LATEST_XCODE_VERSION=26.3
45-
MINIMUM_XCODE_VERSION=16.0.0
44+
LATEST_XCODE_VERSION=26.5
45+
MINIMUM_XCODE_VERSION=26.0.1
4646
4747
INPUT_XCODE_VERSION=${{ inputs.xcode_version }}
4848
@@ -66,60 +66,49 @@ runs:
6666
6767
# Map resolved Xcode versions to simulator destinations.
6868
# Only explicitly supported versions are allowed — unknown versions fail.
69+
#
70+
# The minimum-Xcode legs (26.0.1) run against the 26.2 simulator runtime:
71+
# the macos-26 runner image ships SDKs for 26.0 but only installs runtimes
72+
# for 26.2 and later. The Xcode version is what we are validating here, and
73+
# the runtime only needs to be at or above our deployment target floors.
6974
case $INPUT_PLATFORM/$XCODE_VERSION in
70-
iOS/26.3)
71-
DEVICE="iPhone 16 Pro Max"
72-
OS_VERSION="26.2"
73-
;;
74-
iOS/16.4.0)
75-
DEVICE="iPhone 16 Pro Max"
76-
OS_VERSION="18.5"
75+
iOS/26.5)
76+
DEVICE="iPhone 17 Pro Max"
77+
OS_VERSION="26.5"
7778
;;
78-
iOS/16.0.0)
79-
DEVICE="iPhone 16 Pro Max"
80-
OS_VERSION="18.0"
81-
;;
82-
tvOS/26.3)
83-
DEVICE="Apple TV 4K (3rd generation)"
79+
iOS/26.0.1)
80+
DEVICE="iPhone 17 Pro Max"
8481
OS_VERSION="26.2"
8582
;;
86-
tvOS/16.4.0)
83+
tvOS/26.5)
8784
DEVICE="Apple TV 4K (3rd generation)"
88-
OS_VERSION="18.5"
85+
OS_VERSION="26.5"
8986
;;
90-
tvOS/16.0.0)
87+
tvOS/26.0.1)
9188
DEVICE="Apple TV 4K (3rd generation)"
92-
OS_VERSION="18.0"
93-
;;
94-
watchOS/26.3)
95-
DEVICE="Apple Watch Series 10 (46mm)"
9689
OS_VERSION="26.2"
9790
;;
98-
watchOS/16.4.0)
99-
DEVICE="Apple Watch Series 10 (46mm)"
100-
OS_VERSION="11.5"
101-
;;
102-
watchOS/16.0.0)
103-
DEVICE="Apple Watch SE (44mm) (2nd generation)"
104-
OS_VERSION="11.0"
91+
watchOS/26.5)
92+
DEVICE="Apple Watch Series 11 (46mm)"
93+
OS_VERSION="26.5"
10594
;;
106-
visionOS/26.3)
107-
DEVICE="Apple Vision Pro"
95+
watchOS/26.0.1)
96+
DEVICE="Apple Watch Series 11 (46mm)"
10897
OS_VERSION="26.2"
10998
;;
110-
visionOS/16.4.0)
99+
visionOS/26.5)
111100
DEVICE="Apple Vision Pro"
112-
OS_VERSION="2.5"
101+
OS_VERSION="26.5"
113102
;;
114-
visionOS/16.0.0)
103+
visionOS/26.0.1)
115104
DEVICE="Apple Vision Pro"
116-
OS_VERSION="2.0"
105+
OS_VERSION="26.2"
117106
;;
118107
macOS/*)
119108
;;
120109
*)
121110
echo "Unsupported platform/Xcode combination: $INPUT_PLATFORM/$XCODE_VERSION"
122-
echo "Supported Xcode versions: 26.3, 16.4.0, 16.0.0"
111+
echo "Supported Xcode versions: 26.5, 26.0.1"
123112
exit 1
124113
;;
125114
esac

.github/composite_actions/install_simulators_if_needed/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ runs:
1919
run: |
2020
XCODE_VERSION="${{ inputs.xcode_version }}"
2121
PLATFORM="${{ inputs.platform }}"
22-
DEFAULT_XCODE_VERSION="16.4.0"
22+
DEFAULT_XCODE_VERSION="26.5"
2323
2424
# Skip for macOS as it doesn't need simulators
2525
if [[ "$PLATFORM" == "macOS" ]]; then

.github/composite_actions/run_xcodebuild/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ inputs:
1414
destination:
1515
required: false
1616
type: string
17-
default: 'platform=iOS Simulator,name=iPhone 13,OS=latest'
17+
default: 'platform=iOS Simulator,name=iPhone 17 Pro Max,OS=latest'
1818
sdk:
1919
required: false
2020
type: string

.github/workflows/api-breaking-changes-detection.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ permissions:
1010
jobs:
1111
build-and-check-api-breakage:
1212
name: Build and Check API Breakage
13-
runs-on: macos-15
13+
runs-on: macos-26
1414

1515
steps:
1616
- name: Checkout repository

.github/workflows/api_digester_check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77

88
jobs:
99
check-swift-api-digester:
10-
runs-on: macos-15
10+
runs-on: macos-26
1111

1212
steps:
1313
- name: Checkout repository

.github/workflows/build_minimum_supported_swift_platforms.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ jobs:
2222
strategy:
2323
fail-fast: false
2424
matrix:
25-
platform: [iOS, macOS, tvOS, watchOS]
25+
platform: [iOS, macOS, tvOS, watchOS, visionOS]
2626

2727
uses: ./.github/workflows/build_scheme.yml
2828
with:
2929
scheme: Amplify-Build
30-
os-runner: 'macos-15'
30+
os-runner: 'macos-26'
3131
xcode-version: 'minimum'
3232
platform: ${{ matrix.platform }}
3333
save_build_cache: false

.github/workflows/build_scheme.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ on:
1616

1717
os-runner:
1818
type: string
19-
default: 'macos-15'
19+
default: 'macos-26'
2020

2121
save_build_cache:
2222
type: boolean

.github/workflows/canary.yml

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ jobs:
1616
strategy:
1717
matrix:
1818
include:
19-
- os: macos-15
20-
xcode-version: '26.3'
21-
device: 'iPhone 16 Pro Max'
19+
- os: macos-26
20+
xcode-version: '26.5'
21+
device: 'iPhone 17 Pro Max'
22+
version: '26.5'
23+
# Minimum supported Xcode. Uses the 26.2 runtime because the macos-26
24+
# image does not install a 26.0 simulator runtime.
25+
- os: macos-26
26+
xcode-version: '26.0.1'
27+
device: 'iPhone 17 Pro Max'
2228
version: '26.2'
23-
- os: macos-15
24-
xcode-version: '16.4.0'
25-
device: 'iPhone 16 Pro Max'
26-
version: '18.5'
2729
name: Canary Test - Xcode ${{ matrix.xcode-version }}
2830
runs-on: ${{ matrix.os }}
2931
steps:

.github/workflows/integ_test_auth.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ jobs:
6262
project_path: ./AmplifyPlugins/Auth/Tests/AuthHostedUIApp/
6363
resource_subfolder: auth
6464
timeout-minutes: 60
65-
xcode_version: '16.4.0'
65+
xcode_version: 'latest'
6666
secrets: inherit
6767

6868
auth-webauthn-integration-test-iOS:
6969
if: ${{ inputs.webauthn-ios != 'false' }}
7070
name: Auth WebAuthn Integration Tests (iOS)
7171
uses: ./.github/workflows/integ_test_auth_webauthn.yml
7272
with:
73-
xcode_version: '16.4.0'
73+
xcode_version: 'latest'
7474
secrets: inherit

.github/workflows/integ_test_auth_webauthn.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ permissions:
1414
jobs:
1515
auth-webauthn-integration-tests:
1616
name: iOS Tests | AuthWebAuthnApp
17-
runs-on: macos-15
17+
runs-on: macos-26
1818
timeout-minutes: 60
1919
environment: IntegrationTest
2020

0 commit comments

Comments
 (0)