Files
Antonio PallaresandCursor 454440d5b9 Support Xcode 27 in Tuist-generated projects (#7208)
* ci: conditionally bump SDK deployment targets for Xcode 27 SDK

Add [sdk=*27*] conditional deployment-target overrides to RevenueCat.xcodeproj
so Carthage from-source builds compile at the Xcode-27-required floors
(iOS 15 / macOS 12 / tvOS 15 / watchOS 8) while older Xcode keeps building at
iOS 13. Lets integrators get the right floor automatically based on their Xcode.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: bump watchOS Xcode 27 SDK override to 9.0

Xcode 27 requires a watchOS deployment target of at least 9.0 (and drops the
deprecated armv7k arch at that floor), so raise the [sdk=watch*27*] conditional
override from 8.0 to 9.0.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: add Carthage installation test job on Xcode 27

Add installation-tests-carthage-xcode-27 and extract the shared steps into a
reusable run-carthage-installation-tests command. Declare conditional
[sdk=*27*] deployment targets on the Carthage consumer app to match the SDK
project so the from-source build works on Xcode 27.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: unify Carthage installation tests into a parameterized job

Replace the duplicated installation-tests-carthage and
installation-tests-carthage-xcode-27 jobs (and the shared command) with a
single parameterized job invoked twice via a `name` override, and teach the
on-demand generator to emit the parameterized invocation for the Xcode 27
variant.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: don't require Xcode 27 Carthage job for releases

Xcode 27 is still beta, so the installation-tests-carthage-xcode-27 job still
runs on release branches but no longer blocks the all-tests-succeeded gate.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: run automatic Carthage installation tests on Xcode 26

Xcode 26 still builds RevenueCat.xcodeproj at its declared deployment
targets (its SDK floors are iOS 12 / macOS 10.13 / tvOS 12 / watchOS 4 /
visionOS 1), so the from-source build needs no overrides there. Move the
automatic installation-tests-carthage job from Xcode 16 to Xcode 26, which
is a current App-Store-valid toolchain.

The Xcode-27-only floor bump (iOS 15 / macOS 12 / tvOS 15 / watchOS 9)
remains covered by the [sdk=*27*] overrides, and the
installation-tests-carthage-xcode-27 variant stays available as a
manual-only on-demand job instead of running automatically in CI.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: run Carthage installation tests on iOS 26 simulator

fastlane scan was defaulting to the pre-installed iOS 18.6 simulator, whose
networking hangs under Xcode 26.5's CoreSimulator, causing testCanFetchCustomerInfo
to deterministically time out. Pin the device to iPhone 17 to force an iOS 26.x runtime.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: only pin Carthage test simulator on Xcode 26

Scope the iPhone 17 device override to Xcode 26 (whose CI image otherwise defaults
scan to a stale iOS 18 simulator with broken networking); newer Xcodes already
auto-select a matching runtime.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: support Xcode 27 in Tuist-generated projects

Add SDK-conditional [sdk=*27*] deployment-target overrides to Tuist
manifests so the generated workspace builds on Xcode 27 (which enforces
iOS 15 / tvOS 15 / watchOS 9 / macOS 12 minimums) while leaving the base
deployment targets untouched for every other SDK. No environment flag,
mirroring the RevenueCat.xcodeproj mechanism.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: cover remaining sub-floor Tuist projects for Xcode 27

Apply the Xcode 27 SDK-conditional deployment-target overrides to the
remaining workspace projects with sub-floor minimums: APITesters,
BinarySizeTest, PurchaseTester and XCFrameworkInstallationTests.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor: drop version from Xcode deployment-target override naming

Rename addingXcode27DeploymentTargetOverrides to
addingXcodeDeploymentTargetOverrides (and related identifiers/file) so the
helper can accumulate future Xcode SDK floors without renaming.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor: derive dependency lists from a single source in Package.swift

Write the wrapped test dependency names once and derive both productTypes
and the deployment-target targetSettings from it, instead of repeating the
list in two places.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: clarify productType grouping and trim override doc comment

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: scope iOS deployment floor to macOS SDK for Mac Catalyst

Mac Catalyst builds against the macOS SDK but derive their minimum from the
iOS deployment target (ignoring MACOSX_DEPLOYMENT_TARGET), so the Xcode 27 iOS
floor must also be scoped to [sdk=macosx27*] for the Catalyst build validation.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 12:19:44 +02:00
..