Skip to content

ci: drop custom simulator boot-wait loop for iOS e2e - #7375

Merged
olerass merged 3 commits into
developfrom
@ole/e2e-ios-boot-fix
Apr 22, 2026
Merged

olerass merged 3 commits into
developfrom
@ole/e2e-ios-boot-fix

Conversation

@olerass

@olerass olerass commented Apr 21, 2026 •

Copy link
Copy Markdown
Contributor

The Ensure Simulator is fully booted step in ios-e2e.yml polls xcrun simctl list | grep "Booted" with a 120-second timeout. The simulator-action that creates the simulator already supports a wait_for_boot: true input that uses Apple's simctl bootstatus internally, which is the supported mechanism for detecting simulator readiness. The custom loop was added in #6713 (Aug 2025) during the GH Actions migration with no documented rationale; presumably the action's native wait was simply overlooked at the time.

We noticed the grep-based detection is fragile while working on the iOS 26 SDK migration. An iOS 26.4 simulator booted in ~36 seconds, yet our custom loop timed out at 120s because the grep 'Booted' pattern didn't match reliably during the boot transition. Swapping to the action's native wait fixed it cleanly in that context.

This change backports the combined swap to develop's current iPhone 16 / iOS 18.5 setup. Behavior should be equivalent on green runs and more robust on slow boots.

@janicduplessis pointed out on this PR that the built-in wait has historically been flaky: simctl bootstatus sometimes returns while the simulator isn't actually ready, or hangs outright. We actually observed that hang pattern on one shard here. To combat this the change also bumps the simulator-action from v4 to v5, which addresses this exact class of flake. v5 ships boot_timeout_seconds: 360 and boot_retries: 2 as defaults (see #563), so a hung bootstatus call now bails after 6 minutes and retries up to twice before failing the step. No explicit config needed on our side.

Ref FEPLAT-81.

@linear

linear Bot commented Apr 21, 2026

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

Launch in simulator or device for 2041dd7

@github-actions

github-actions Bot commented Apr 21, 2026 •

Copy link
Copy Markdown

🧪 Flashlight Performance Report (AWS Device Farm)

🔀 Commit: 92d8d21

📎 View Artifacts

Metric Current Δ vs Baseline
Time to Interactive (TTI) 5502 ms 🔴 +148.1 ms (+2.8%)
Average FPS 56.72 ⚪ -0.3 (-0.5%)
Average RAM 399.9 MB 🔴 +15.5 MB (+4.0%)

@janicduplessis

Copy link
Copy Markdown
Contributor

The built in wait used to fail sometimes and the tests would fail because the simulator didn’t boot yet. We can try removing and monitor, might not be needed anymore on newer xcode versions.

@olerass

olerass commented Apr 22, 2026

Copy link
Copy Markdown
Contributor Author

The built in wait used to fail sometimes and the tests would fail because the simulator didn’t boot yet. We can try removing and monitor, might not be needed anymore on newer xcode versions.

Good context @janicduplessis TY. Funny enough this exactly happended on the shard 1 run on this PR. I updated the change to up the action to v5 which has logic to fix this exact issue. See updated PR desc.

@github-actions

Copy link
Copy Markdown

Launch in simulator or device for 92d8d21

@olerass
olerass merged commit d5a7bd7 into develop Apr 22, 2026
20 checks passed
@olerass
olerass deleted the @ole/e2e-ios-boot-fix branch April 22, 2026 06:53
olerass added a commit that referenced this pull request Apr 27, 2026
Apple's App Store Connect stops accepting iOS uploads built with the iOS 18.5 SDK after Apr 28, 2026. After that date, no iOS release including hotfixes can ship until Rainbow's toolchain moves. This change lifts the iOS toolchain to Xcode 26.3 / iOS 26 SDK, which is the minimum Apple now requires.

The actual diff is small: bump `.xcode-version` to `26.3`, swap GH Actions runners from `macos-15-xlarge` to `macos-26-xlarge`, and update the E2E simulator pin to `iPhone 17` + `iOS 26.4`. The pieces that make all of this work cleanly landed on develop independently in the preceding week:

* `.xcode-version` source-of-truth wiring (#7372).
* Rock cache fingerprint includes `.xcode-version` so Xcode bumps invalidate stale-toolchain artifacts (#7376).
* Simulator-action switched to its native `wait_for_boot` and bumped to v5 with retries plus timeout (#7375).
* iOS prebuild-hook `stderr` surfaces in CI logs on failure (#7373).

We chose Xcode 26.3 over 26.4 deliberately. 26.3 ships Apple Clang 17 and Swift 6.2.4, which avoids the fmt 11.0.2 consteval bug (Clang 21) and the Firebase async-let miscompile (Swift 6.3) that Xcode 26.4 introduces. Same iOS 26 SDK, no Podfile workarounds. Trade-off is "not on latest Xcode," which is the right call for a tight-window emergency fix; we can move to 26.4+ in a calmer cycle once RN 0.81+ lands and stabilizes.

Verification has been running on a parallel Bitrise lane for several days. The FEPLAT-91 temp `workflow_testflight_xcode26` workflow (stack pinned to `osx-xcode-26.3.x`) produces iOS 26 SDK TestFlight builds against this branch and feeds Phase 3 QA. Ibrahim has signed off on the FEPLAT-89 QA checklist.

Closes FEPLAT-86.
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.

3 participants