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
- 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.
- PHPickerViewController on iOS 26 may require a long-press / different gesture to "select" a photo rather than a single tap.
- 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:
- Verify the picker grid tap with
xcrun simctl io booted screenshot mid-flow
- Try
inputText after the picker tap to see if there's a focused photo we can confirm
- Consider the DEV-only skip button option
Reference: PR #43 — apps/mobile/.maestro/20-account-creation-journey.yaml
Symptom
apps/mobile/.maestro/20-account-creation-journey.yamlruns end-to-end through:text: "Choose from Library"(visible via XCUITest native a11y)Allow Full Accesstap)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 thedogCreateMutationschema validation (imagesrequired >= 1) and the user stays on CreateProfile.Environment
Root cause hypotheses
RemotePlaceholderprocess (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.optional: text: "Choose"warn instead of advancing.What works in this flow (after the fixes in PR #43)
Mitigation options
imagesarray in DEV / NODE_ENV != production so Maestro can complete the journey without the picker tap (and assert image-upload separately via API tests).pasteText+ clipboard image trick — unsupported on iOS sims via the standard CLI.__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-screenstep (never reached). All other steps are correct and run cleanly. Anyone resuming this should:xcrun simctl io booted screenshotmid-flowinputTextafter the picker tap to see if there's a focused photo we can confirmReference: PR #43 —
apps/mobile/.maestro/20-account-creation-journey.yaml