Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

iOS simulator: snapshot drops controls nested deeper than 64 accessibility levels

Aperta
#4,088 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@KrzysztofMoch ci sta già lavorando.

Dal 29/10/2026.

  • #4089 di @KrzysztofMoch — aperta

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
ios, typescript
Ambito
mobile, testing-qa

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
TypeScript
Stelle
5.2k
Fork
359
Merge medio
12h 43m
PR unite (30g)
666

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di callstack/agent-device

Tutte le issue di callstack/agent-device

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.