iOS 27: HealthKit's authorization sheet reads as one node, so label and ref presses can't reach it

Abierto
#4,226 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
ios, typescript
Área
mobile, testing

Línea de trabajo

Start at the iOS simulator snapshot and press handling paths that use XCTest, then trace how remote content boundaries and element frames are handled. Reproduce with the HealthKit authorization sheet on an iOS 27 simulator; use the reported XCTest element and host view frames to check snapshot discovery and tap coordinates. Done when controls are reachable by labels or refs and presses activate the intended controls.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

On an iOS 27.0 simulator, HealthKit's authorization sheet (the one HKHealthStore.requestAuthorization or SwiftUI's .healthDataAccessRequest presents) reads as a single [application] node. press 'label=…', find, and refs can't reach any of its controls, so the only way to answer it is coordinate taps from a screenshot. An earlier session on 0.21.x saw press @ref and press 'label=…' report success on the sheet's switches and Allow button while nothing changed.

XCTest itself can read and tap this sheet, so this looks like the snapshot stopping at the remote view's boundary rather than a missing accessibility tree.

Environment

  • agent-device 0.21.31 (through T3 Code's device tools)
  • Xcode 27, iOS 27.0 simulator (iPhone 18 Pro)

Repro

  1. Run any app that asks for HealthKit types the user hasn't decided yet, for example HKHealthStore().requestAuthorization(toShare: [], read: [HKQuantityType(.stepCount)]) at launch.
  2. With the Health Access sheet on screen:
$ agent-device snapshot -i
Snapshot: 1 nodes (truncated)
Simulator AX snapshot unavailable (remote-content-boundary); used XCTest for this app generation.
No snapshot backend could read this screen (snapshot returned no semantic controls or content). …
@e1 [application] "A Better Me"

$ agent-device press 'label="Select All 1 Topic"' --settle
Error (COMMAND_FAILED): Selector did not match: label="Select All 1 Topic"

Right after a fresh install, the same snapshot -i printed circuit-disabled and "XCTest-backed snapshot tiers are running with a short recovery probe after recent slow accessibility work on this screen" instead.

What XCTest sees on the same sheet

A UI test in the app's target finds and taps every control:

  • app.cells["UIA.Health.AuthSheet.AllCategoryButton"] exists, with a "Select All N Topics" static text inside it.
  • app.buttons["Allow"], and a cell containing "Don’t Allow" (Allow/Continue sit in the same cell).
  • XCUIElement.frame is in screen points: (22, 403, 358, 52) for the Select All cell. XCUIElement.snapshot().frame for the same cell is (22, 341, 358, 52): frames inside the sheet are relative to its remote host view, which app.snapshot() shows at (0, 62, 402, 812) with a child of the same size at the origin. Tapping a snapshot frame as-is lands 62 pt too high, which may explain presses that "succeed" with no effect.
  • element.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)).tap() works. Plain element.tap() on these elements did not, in our earlier attempts.

Suggested fix

Descend into the remote content through XCTest, and translate its frames by the host view's origin before tapping (or tap through XCUICoordinate on the element).

Lenguaje dominante
TypeScript
Estrellas
5.3k
Forks
377
Merge medio
13 h 18 min
PR fusionados (30 d)
653

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de callstack/agent-device

Todos los issues de callstack/agent-device

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.