Skip to content

Maestro flow 20: iOS 26 photo picker grid tap doesn't register selection #44

@GSTJ

Description

@GSTJ

Symptom

apps/mobile/.maestro/20-account-creation-journey.yaml runs end-to-end through:

  • fresh-magic login (regex APPLE_MAGIC_EMAIL_REGEX)
  • CreateProfile screen load
  • photo cell tap (23%, 27%) → image picker alert
  • text: "Choose from Library" (visible via XCUITest native a11y)
  • photo library permission sheet (visible at [60,200][380,783] after explicit Allow Full Access tap)
  • photo grid tap at (50%, 30%) — center cell, first row of the half-sheet picker
  • name TextInput + birthdate fields (point taps)
  • submit + AskForLocation + location prompt

But the photo selection never registers — the DB post-check (apps/mobile/.maestro/checks/20-account-creation.sh) finds 0 dogs and 0 images after the run, because the CreateProfile form submit fails the dogCreateMutation schema validation (images required >= 1) and the user stays on CreateProfile.

Environment

  • iPhone 17 Pro Max simulator, iOS 26.4
  • Maestro 2.5.1
  • Pegada Release build (RN Fabric)

Root cause hypotheses

  1. iOS 26 photo picker is a half-sheet rendered in a separate RemotePlaceholder process (verified via Pegada logs: Element RemotePlaceholder, pid: 58672, child of Other, is remote hosted). Maestro point taps land at the right screen coordinates but XCUITest cannot synthesize the tap into the picker's PHX-hosted view tree.
  2. PHPickerViewController on iOS 26 may require a long-press / different gesture to "select" a photo rather than a single tap.
  3. The picker also auto-dismisses after a tap (no Choose/Use button on iOS 26+), which makes the subsequent optional: text: "Choose" warn instead of advancing.

What works in this flow (after the fixes in PR #43)

  • fresh-magic login lands on CreateProfile every time
  • Image picker alert appears and "Choose from Library" taps successfully
  • Photo library permission sheet (iOS 26 "Allow Full Access") is dismissed via extendedWaitUntil → tapOn(text=...)
  • Every step AFTER photo upload (name input, birthdate input, location button) executes their point taps without warnings
  • DB post-check script correctly identifies the failure (0 dogs)

Mitigation options

  • Have CreateProfile accept an empty images array in DEV / NODE_ENV != production so Maestro can complete the journey without the picker tap (and assert image-upload separately via API tests).
  • Use Maestro's pasteText + clipboard image trick — unsupported on iOS sims via the standard CLI.
  • Add an __DEV__-only "Skip photo for E2E" button on CreateProfile gated by an env var.

Workaround in PR #43

Flow 20 yaml + check script are landed with extensive iOS 26 documentation. The flow currently FAILS gracefully at the assertVisible: swipe-screen step (never reached). All other steps are correct and run cleanly. Anyone resuming this should:

  1. Verify the picker grid tap with xcrun simctl io booted screenshot mid-flow
  2. Try inputText after the picker tap to see if there's a focused photo we can confirm
  3. Consider the DEV-only skip button option

Reference: PR #43apps/mobile/.maestro/20-account-creation-journey.yaml

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions