fix(ios): answer Safari's "Open in" prompt and inner-panel SpringBoard alerts

TH
13h ago
+127-46

Summary

The reported "Open this page in “App”?" prompt comes from Safari, not SpringBoard. Safari draws it as an SFDialogView, not an alert, so alert answered ALERT_NOT_FOUND on every iPhone. The runner now finds that dialog by its identifier and checks the answer against it.

A second bug turned up on the Duo: SpringBoard alerts on the inner panel were dropped, because springboard.frame names only the outer panel. Each SpringBoard alert is now placed, tapped and checked in its own window. If that window is unreadable, the tap is refused. One unit-tested rule decides placement.

Validation

  • pnpm check:affected --run --head 3369c71c01: passed.
  • Runner unit tests (iPhone 17 Pro sim): 35 alert/modal tests pass, including the new placement test.
  • Safari prompt, alert get → accept/dismiss → alert get (ALERT_NOT_FOUND), plus a screenshot:
    • iPhone 17 Pro: before the fix, ALERT_NOT_FOUND; at the head, both actions pass.
    • Duo, folded and unfolded: both actions pass. Unfolded, the tap goes through the 951×669 inner window.
  • SpringBoard "Remove App" alert on the Duo, folded and unfolded: base fails, c84f8d5b35 passes. It passes on the iPad at 07cb4a8b9e. Not rerun on the Duo at the head, because Duo SpringBoard taps go to its 223×317 status-bar window.

Follow-up: a panel-aware SpringBoard window resolver (ADR 0025) for taps, viewport and capture.

🤖 Generated with Claude Code