Skip to content

Raise deployment targets for Xcode 27 (2.0.0) - #450

Merged
iziz merged 2 commits into
masterfrom
fix/xcode-27-deployment-targets
Sep 11, 2026
Merged

iziz merged 2 commits into
masterfrom
fix/xcode-27-deployment-targets

Conversation

@iziz

@iziz iziz commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Fixes #449

Problem

Xcode 27 rejects the project's deployment targets:

The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 12.0, but the range of supported deployment target versions is 15.0 to 27.0.x.

iOS is not the only one affected — the declared tvOS 12, watchOS 4, and macOS 10.13 floors are all below what Xcode 27 accepts, so raising iOS alone would fail on the next platform.

Changes

Every platform floor moves to the lowest version Xcode 27 accepts:

Platform Before After
iOS 12.0 15.0
macCatalyst 13 15
tvOS 12.0 15.0
watchOS 4.0 9.0
macOS 10.13 12.0

Applied across Package.swift, all 13 podspecs, libPhoneNumber.xcodeproj, and both demo projects (which were at iOS 13.5).

Two notes on the mechanics:

  • Package.swift keeps swift-tools-version:5.5, where .watchOS(.v9) does not exist yet (it needs 5.7). The string form .watchOS("9.0") is used instead so the minimum Swift toolchain is not raised as a side effect.
  • The deprecated VALID_ARCHS = "arm64 armv7 armv7s i386 x86_64" setting is removed. The armv7/armv7s/i386 slices do not exist at these floors, and Xcode uses its own ARCHS default.

Release type

docs/RELEASE_RUNBOOK.md classifies breaking packaging changes as a major release, so this is 2.0.0, not a minor bump: apps still supporting iOS 12–14 cannot take this version. scripts/updateProjectVersions.swift 2.0.0 bumped every podspec, Xcode project, and README pin, and the README gains a Requirements section documenting the new floors.

Validation

Toolchain: Xcode 26.5 — Xcode 27 was not available locally, so the fix is verified against the accepted range from the issue rather than by a build on 27 itself.

  • swift build / swift build -c release — succeeded
  • swift test — 231 tests, 0 failures
  • swift test under LC_ALL=ko_KR.UTF-8 — 231 tests, 0 failures
  • swift scripts/checkUpstreamTestParity.swift — passed (173 upstream / 181 local)
  • swift scripts/checkUpstreamAPIParity.swift — passed (66 upstream / 93 local)
  • swift scripts/checkVersionConsistency.swift — passed for 2.0.0
  • swift scripts/testXcodeSchemes.swift — all 3 schemes passed (libPhoneNumber, libPhoneNumberGeocoding, libPhoneNumberShortNumber)
  • xcodebuild build -scheme libPhoneNumber -sdk iphonesimulator — succeeded, no warnings
  • git diff --check — clean
  • swift scripts/publishPodspecs.swift --lint — results added as a comment when the run finishes

🤖 Generated with Claude Code

iziz and others added 2 commits September 12, 2026 02:07
Xcode 27 accepts iOS/tvOS 15-27, watchOS 9-27, and macOS 12-27. The
project declared iOS 12, tvOS 12, watchOS 4, and macOS 10.13, so builds
failed with "the range of supported deployment target versions is
15.0 to 27.0.x".

Raise every platform floor to the lowest version Xcode 27 accepts across
Package.swift, all 13 podspecs, libPhoneNumber.xcodeproj, and both demo
projects. macCatalyst moves to 15 to stay aligned with iOS.

watchOS uses the string form .watchOS("9.0") because .v9 requires
swift-tools-version 5.7 and the manifest targets 5.5.

Also drop the deprecated VALID_ARCHS setting, which still listed the
32-bit armv7/armv7s/i386 slices that no longer exist at these floors.

Fixes #449

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Raising the platform floors is a breaking packaging change, which
docs/RELEASE_RUNBOOK.md classifies as a major release: apps still
supporting iOS 12-14 cannot take this version.

Run scripts/updateProjectVersions.swift 2.0.0 to bump every podspec,
Xcode project, and README dependency pin, and document the new minimum
deployment targets in a README Requirements section.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@iziz

iziz commented Sep 11, 2026

Copy link
Copy Markdown
Owner Author

swift scripts/publishPodspecs.swift --lint finished: all 13 podspecs passed lint at 2.0.0.

[ok] libPhoneNumber-iOS 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftCore 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftUI 2.0.0 passed lint
[ok] libPhoneNumberCarrier 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftCarrier 2.0.0 passed lint
[ok] libPhoneNumberGeocoding 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftGeocoding 2.0.0 passed lint
[ok] libPhoneNumberShortNumber 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftShortNumber 2.0.0 passed lint
[ok] libPhoneNumber-iOS-Swift 2.0.0 passed lint
[ok] libPhoneNumberTimeZones 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftTimeZones 2.0.0 passed lint
[ok] libPhoneNumber-iOS-SwiftUIEnrichment 2.0.0 passed lint
All podspecs passed lint.

Linted in dependency order against the raised deployment targets, so the new floors build cleanly for every shipped pod.

@iziz
iziz merged commit 93a33b9 into master Sep 11, 2026
4 checks passed
@iziz
iziz deleted the fix/xcode-27-deployment-targets branch September 11, 2026 19:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update iOS deployment target to 15.0 to support Xcode 27

1 participant