Skip to content

Keep RNTester content clear of the iOS tab bar - #58933

Closed
cipolleschi wants to merge 5 commits into
mainfrom
skip-android-release-only-flows-on-ios
Closed

cipolleschi wants to merge 5 commits into
mainfrom
skip-android-release-only-flows-on-ios

Conversation

@cipolleschi

@cipolleschi cipolleschi commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary:

The iOS RNTester E2E job fails on every PR. flatlist-append-maintainvisible.yml fails with Element not found: Id matching regex: scroll-offset-display. It started with #58900 (8d8b8f3).

#58900 caps the bottom content inset at 65pt when the tab bar is along the bottom (insets.bottom = MIN(insets.bottom, LegacyBottomInset)), but the tab bar is 83pt tall on current iPhones. The bottom 18pt of every RNTester screen sits under the tab bar. A tap there switches tabs instead of reaching the content.

That's what breaks the flow. The maintainVisibleContentPosition example pins its controls to the bottom of the screen. Its last row ("Clear (empty list)" / "Reset", y=866–882 on an iPhone 17 Pro Max) straddles the tab bar's top edge (y=873). Maestro taps "Reset" at its center, (326, 874), and that lands on the Playground tab. The next lookup of scroll-offset-display then fails because RNTester is on a different screen.

This PR changes the MIN to MAX, matching the top inset's MAX(insets.top, LegacyTopInset). The bottom inset is now never smaller than the system inset, so content stays clear of the tab bar. On devices whose inset is under 65pt, it still keeps the legacy 65pt bounds that #58900 wanted.

Trade-off: on devices where the tab bar is taller than 65pt (83pt on current iPhones), examples are now 18pt shorter than #58900 intended. That's the space the tab bar covers.

Changelog:

[INTERNAL] - Keep RNTester content clear of the iOS tab bar

Test Plan:

On an iPhone 17 Pro Max simulator (iOS 26.5):

  • With the build from main, ran maestro test packages/rn-tester/.maestro/flatlist-append-maintainvisible.yml --debug-output <dir> (Maestro 2.6.1, same as CI). It failed after Tap on "Reset". The debug output shows the tap on Reset (bounds [222,866][430,882]) and the failure screenshot shows the Playground tab.
  • Built RNTester Debug using the full system bottom inset and read the layout with idb ui describe-all. The Clear/Reset row moved from y=866–882 to y=848–864, which is above the tab bar at y=873. On this device the system inset is 83pt, so MAX(83, 65) gives the same layout. I didn't rebuild with the final MAX version.
  • yarn format-check-cpp: no violations in repository files.
  • Not yet done: a full Maestro run of the flow against the fixed build. This PR's iOS RNTester E2E job covers it.
BEFORE AFTER
BEFORE-e2eFailing.mov
AFTER-e2eSucceeding.mov

The iOS Maestro runner ignored flow tags, so the maintainVisibleContentPosition
flows tagged android-release-only also ran on iOS. Since #58900 changed the
RNTester tab bar insets, flatlist-append-maintainvisible fails deterministically
on iOS and blocks the iOS RNTester E2E job on every PR.

Add exclude-tags support to the iOS runner (reusing the Android tag filter)
and skip android-release-only flows in the iOS RNTester workflow until the
inset regression is fixed.
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 7, 2026
@facebook-github-tools facebook-github-tools Bot added p: Facebook Partner: Facebook Partner labels Oct 7, 2026
Drop the android-release-only skip: the failing flow needs to run so its
debug output can show where Maestro taps. Write each attempt's debug
output to its own folder under /tmp/MaestroLogs, which the maestro-ios
action already uploads on failure.
@cipolleschi cipolleschi changed the title Skip android-release-only Maestro flows on iOS RNTester Save Maestro debug output for iOS E2E flows Oct 7, 2026
#58900 capped the bottom content inset at 65pt for bottom tab bars, but
the tab bar is 83pt tall on current iPhones. The bottom 18pt of every
RNTester screen sat under the tab bar, so taps there switched tabs.
flatlist-append-maintainvisible taps "Reset" at y=874 and landed on the
Playground tab.

Use the full bottom safe-area inset instead.
@cipolleschi cipolleschi changed the title Save Maestro debug output for iOS E2E flows Keep RNTester content clear of the iOS tab bar Oct 7, 2026
@meta-codesync

meta-codesync Bot commented Oct 7, 2026

Copy link
Copy Markdown

@cipolleschi has imported this pull request. If you are a Meta employee, you can view this in D123941583.

@cortinico cortinico left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review automatically exported from Phabricator review in Meta.

@meta-codesync meta-codesync Bot closed this in c65fc63 Oct 7, 2026
@meta-codesync meta-codesync Bot added the Merged This PR has been merged. label Oct 7, 2026
@meta-codesync

meta-codesync Bot commented Oct 7, 2026

Copy link
Copy Markdown

@cipolleschi merged this pull request in c65fc63.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Merged This PR has been merged. p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants