iOS: private-AX snapshot drops focused for a keyboard-focused text input (bridge reads only hasFocus)
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 74/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- ios, objective-c
- Domínio
- mobile-dev, testing
Direção de pesquisa
Comece em RunnerAXSnapshotBridge.m, em dictionaryForSnapshot: por volta da linha 730, e compare o mapeamento de focused com o comportamento de focusBool descrito na issue. Confirme que a alteração faz com que snapshots private-AX informem como focado um campo de texto com foco do teclado e, em seguida, verifique se o foco informado corresponde ao produtor do XCTest.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
What happens
On an iOS simulator, focused flips to false for a focused text input whenever the snapshot comes from the runner's private-AX backend. The field is being edited: the keyboard is visible and the selection grabbers are in the tree. But is focused / toBeFocused keeps failing until the backend switches back.
Cause
RunnerAXSnapshotBridge.m dictionaryForSnapshot: sets focused only from hasFocus:
result[@"focused"] = [self boolNumberForKey:@"hasFocus" snapshot:snapshot defaultValue:NO];
#2925 changed the XCTest producers (focusBool) to hasKeyboardFocus || hasFocus. The private-AX producer was left on hasFocus. A text input under the software keyboard holds hasKeyboardFocus, not hasFocus. #3163 fixed the same gap in the host-side snapshot-source/tree.ts decoder, but the runner's Objective-C bridge still has it on main (line 730).
The bug only shows when the XCTest channel is penalized. One queries_backend_timeout sends every snapshot to private-ax for snapshotXCTestChannelPenaltyDuration (120 s). A focus assertion that lands inside that window fails every poll. Outside it, the tree backend answers correctly. On a busy React Native screen this makes the failure intermittent.
Evidence (0.21.28, iOS 27.0 simulator, Xcode 27.1)
I instrumented both producers to log the raw KVC values for the composer textbox on every snapshot, then ran one chat thread-reply test 20 times:
| backend | hasFocus |
hasKeyboardFocus |
snapshot focused |
|---|---|---|---|
| xctest (tree) | 0 | 1 | true |
| private-ax | 0 | 1 | absent |
- 4 of 20 runs failed
toBeFocused. Each failure started right afterSNAPSHOT_XCTEST_CHANNEL_PENALIZED reason=queries_backend_timeout, and every snapshot in the failing window wasPRIVATE_AX_SNAPSHOT_USED. - With the private-AX snapshot,
[snapshot valueForKey:@"hasKeyboardFocus"]returns 1 on the focused field. - After changing that one line to
hasKeyboardFocus || hasFocus, the same test passed 20/20, with the private-AX backend serving 200+ snapshots in every run.
Fix
result[@"focused"] = @([[self boolNumberForKey:@"hasKeyboardFocus" snapshot:snapshot defaultValue:NO] boolValue]
|| [[self boolNumberForKey:@"hasFocus" snapshot:snapshot defaultValue:NO] boolValue]);
This matches focusBool, so both producers report the same focused for the same element. We carry it as a bun patch on 0.21.28 until a release ships it.
Related: #4110 (we drive the same patched runner remotely).
- Linguagem predominante
- TypeScript
- Estrelas
- 5.2k
- Forks
- 359
- Merge médio
- 13h 37min
- PRs com merge (30d)
- 665
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de callstack/agent-device
-
iOS alert wait: the last poll can get ~30 ms and turns "no alert" into a failed readTalvez já em andamento @pcbeingused333 assumiu há 1 dia. Abertabug ready-for-agent
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
callstack/agent-device#4018 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
callstack/agent-device#1869 ·
Mantenedores costumam responder em até 1 dia
-
enhancement
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 43/100
callstack/agent-device#4110 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug ready-for-agent
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 57/100
callstack/agent-device#4109 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug ready-for-agent
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
callstack/agent-device#4107 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de callstack/agent-device
Issues semelhantes
-
docker infra P1 security size:S
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
josephfung/curia#2408 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
ehmpathy/rhachet-roles-ehmpathy#1231 ·
Mantenedores costumam responder em até 1 dia
-
enhancement good first issue help wanted
Dificuldade 2/5 Meio dia Facilidade para iniciantes 70/100
danielw-sudo/agentuto#32 ·
Mantenedores costumam responder em até 1 dia
-
type:docs
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
nightgauge/nightgauge#2836 ·
Mantenedores costumam responder em até 1 dia