iOS simulator: snapshot drops controls nested deeper than 64 accessibility levels
Maintainer antworten meist innerhalb von 1 Tag
Ein zugehöriger Pull Request wurde bereits gemerged.
- #4089 von @KrzysztofMoch — gemerged
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 48/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- ios, typescript
- Bereich
- mobile, testing-qa
Rechercherichtung
Read packages/platform-apple/src/snapshot-source/limits.ts and apple/snapshot-bridge/SnapshotBridgeCapture.m, then trace how traversal depth and the 32-request budget interact with continuations. Reproduce using the nested UIView setup described in the issue and inspect the snapshot recovery request log. Done when snapshots include nodes through depth 128, preserve behavior through depth 65, and deep chains that fit the budget complete in the bridge while budget exhaustion still fails closed.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
On an iOS simulator, a regular snapshot stops at 65 accessibility levels (depth 0–64) and marks the tree truncated. Controls nested deeper are not in the snapshot, so press by label or ref fails with Selector did not match. React Native screens reach that depth in real apps; this came in through a downstream user of tester-army/e2e.
Repro
A UIKit app with a Deep target button under N nested plain UIViews (AX depth of the button = N + 5). Xcode 26.6, iOS 26.5 simulator, iPhone 17 Pro, main at 3b9e8d1:
| UIView depth (AX depth) | snapshot -i has Deep target |
press by label | press by coordinates |
|---|---|---|---|
| 20–59 (25–64) | yes | works | works |
| 60–120 (65–125) | no | Selector did not match: label="Deep target" |
works |
The request log shows ios_snapshot_source_recovery {"producer":"simulator-ax-bridge","requestedLevels":65,…,"truncated":true}.
Cause
The simulator AX bridge already reads past the AX server's per-request limit (a request over about 62 levels fails with kAXErrorIllegalArgument) through continuations, and its protocol bound is 128 (MAXIMUM_DEPTH, kMaximumDepth). The daemon asks for less: DEFAULT_SNAPSHOT_SOURCE_LIMITS.maxTraversalDepth is 64 (packages/platform-apple/src/snapshot-source/limits.ts).
Raising the bound alone is not enough. Deeper paths need more continuations, and the 32-request budget in apple/snapshot-bridge/SnapshotBridgeCapture.m runs out on screens with several deep chains. A screen with 12 chains 100 views deep then falls back to the runner capture (5.4 s instead of 0.4 s).
Required behavior
- A regular simulator snapshot returns nodes up to 128 accessibility levels deep.
- For trees up to 65 levels deep, request, rejection, and continuation counts are unchanged.
- Budget exhaustion still fails the capture closed (#2414).
- Screens with several deep chains that fit the budget complete in the bridge, without the runner fallback.
Related
The same report also had taps failing with point.x != INFINITY && point.y != INFINITY on elements 56+ UIViews deep. That reproduces on v0.21.28 and is fixed on main by #3870 (v0.21.31): coordinate presses worked at every depth up to 120.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 5.2k
- Forks
- 359
- Ø Merge
- 13 Std. 23 Min.
- Gemergte PRs (30 T.)
- 655
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus callstack/agent-device
-
iOS alert wait: the last poll can get ~30 ms and turns "no alert" into a failed readEvtl. vergeben @pcbeingused333 hat das vor 3 Tagen übernommen. Offenbug ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
callstack/agent-device#4018 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
callstack/agent-device#1869 ·
Maintainer antworten meist innerhalb von 1 Tag
-
needs-triage
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 5/100
callstack/agent-device#4205 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
callstack/agent-device#4204 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
callstack/agent-device#4203 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in callstack/agent-device
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
riverqueue/river#1576 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[bug] A prompt queued during a run is assessed without its textEvtl. vergeben @jwiegley hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
DevMortimer/pi-warden#211 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
mattermost/compass-design#191 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Add unit tests for the organization admin role checkEvtl. vergeben @SaffuSafwan hat das heute übernommen. Offenarea/core good first issue help wanted
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
elmohq/elmo#1095 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
HorusGoul/trizum#559 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag