CI: Use Xcode 14.3.1 for iOS 15 tests#6297
Merged
ajpallares merged 9 commits intomainfrom Feb 23, 2026
Merged
Conversation
Xcode 14.3.1 includes the iOS 15 simulator natively, so there's no need to install Xcodes and download the runtime, which can be flaky. Also switches to the xcode14-compatible xcbeautify version. Co-authored-by: Cursor <cursoragent@cursor.com>
Adds a `run-ios-15-tests` action parameter and `ios-15-tests-only` workflow to validate the Xcode 14.3.1 change for iOS 15 tests in isolation. This workflow should be removed once validated. Co-authored-by: Cursor <cursoragent@cursor.com>
SKTestSession.setSimulatedError is only available in the Xcode 15+ SDK (Swift 5.9+). Gate it so the test compiles on Xcode 14.3.1 (Swift 5.8). Co-authored-by: Cursor <cursoragent@cursor.com>
self.wait(for:timeout:) blocks a cooperative thread pool thread in async context, causing a deadlock on Swift 5.8. Use Atomic<Bool> + Task.sleep polling instead, keeping the XCTestExpectation path for Swift 5.9+. Co-authored-by: Cursor <cursoragent@cursor.com>
Only needed on Swift 5.8 path. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
📸 Snapshot Test242 unchanged
🛸 Powered by Emerge Tools |
# Conflicts: # .circleci/config.yml
vegaro
approved these changes
Feb 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checklist
If applicable, create follow-up issues forpurchases-androidand hybridsMotivation
iOS 15 CI tests were using Xcode 15 machines, which don't include the iOS 15 simulator. This required downloading the simulator at runtime via
xcodes, which is slow and can fail intermittently. Xcode 14.3.1 machines already bundle the iOS 15 simulator natively, avoiding this issue.Description
run-test-ios-15from Xcode 15.4.0 to Xcode 14.3.1 and remove theinstall-runtime: iOS 15.5step (no longer needed since the simulator is bundled).install-xcbeautify-for-xcode15toinstall-xcbeautify-for-xcode14to match the Xcode version.SKTestSession.setSimulatedErrorcalls with#if compiler(>=5.9)since that API only exists in the Xcode 15+ SDK.SimulatedStorePurchaseHandlerTests:self.wait(for:timeout:)blocks a cooperative thread pool thread in async context on Swift 5.8, causing a deadlock. Replaced with anAtomic<Bool>+Task.sleeppolling loop for the older compiler path.Made with Cursor
Note
Low Risk
Primarily CI configuration and test-only changes; main risk is CI coverage drift if the Xcode downgrade changes simulator/tooling behavior.
Overview
CI: Switches
run-test-ios-15to Xcode14.3.1, swaps toinstall-xcbeautify-for-xcode14, and removes the runtime simulator install step for iOS 15.Tests: Adds compiler guards around
SKTestSession.setSimulatedErrorso iOS 17 StoreKit simulation code only compiles with Swift 5.9+/Xcode 15 SDKs, and updatesSimulatedStorePurchaseHandlerTeststo avoid an async deadlock on Swift 5.8 by replacingwait(for:timeout:)with anAtomic<Bool>+Task.sleeppolling gate in the older-compiler path.Written by Cursor Bugbot for commit b855c9f. This will update automatically on new commits. Configure here.