ci(ios): launch the app in a simulator, not just link it - #290
Conversation
|
Warning Review limit reached
Next review available in: 19 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Comment |
2d43fb2 to
d76e168
Compare
d76e168 to
cdf7141
Compare
Every iOS verification so far was compile/link-only, and a binary that links and then traps on launch is indistinguishable from a working one in a build log. ios.yml now boots a simulator, installs the built .app, launches it, and requires the process to still be alive eight seconds later. The liveness check asks the simulator via launchctl list rather than trusting simctl launch's exit code, which has already returned 0 by the time a launch-crash happens. What this does NOT prove is emulation: the app bundles no cartridge, so no ROM has run -- that is a licensing question rather than a CI one. docs/mobile-readiness.md now records the narrowed claim instead of listing the whole runtime question as open. Written blind: this environment has no macOS toolchain, so the runner is the first place any of it executes. If a step is wrong, CI is where that surfaces. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The liveness check piped `launchctl list` straight into `grep -q`. That exits at its first match and closes the pipe, `launchctl` then takes SIGPIPE, and `set -o pipefail` makes that the pipeline's status -- so the step reported "it started and died" for an app that was running. The first run failed exactly that way, with the process visibly alive one line above the error. Capture the listing before searching it, and print it on a genuine failure so the next one is diagnosable from the log. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
7b46d8e to
a60acb9
Compare
Antigravity review (Gemini via Ultra)This PR updates the iOS CI workflow to boot an available iPhone simulator, install and launch the application bundle, and verify via Blocking issuesNone found. Suggestions
Nitpicks
Automated first-pass review by |
Second
v1.30.0item, after #289 (Android CI).The gap
Every iOS verification so far is compile/link-only. A binary that links and then traps on launch — a symbol reached lazily, a Metal device that will not create — looks identical to a working one in a build log.
docs/mobile-readiness.mdhas recorded that no iOS build has ever executed.What this adds
ios.ymlnow picks an available iPhone simulator, boots it, builds for that concrete destination, installs the.app, launches it, and requires the process to still be alive eight seconds later.The liveness check asks the simulator via
launchctl listrather than trustingsimctl launch's exit code — which has already returned 0 by the time a launch-crash happens, and so cannot catch the exact failure this exists to catch.What it does not prove
Emulation. The app bundles no cartridge, so no ROM has run; that is a licensing question rather than a CI one.
docs/mobile-readiness.mdnow states the narrowed claim — "it launches" — instead of listing the whole runtime question as open. I would rather record the smaller true thing than the larger convenient one.Written blind
This environment has no macOS/Xcode toolchain, so the runner is the first place any of this executes. The YAML parses and the shell is
set -euo pipefailthroughout, but I cannot runsimctllocally. If a step is wrong, this PR's own CI is where it surfaces — which is the point of putting it in a PR rather than asserting it works.🤖 Generated with Claude Code