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

Ouverte
#4,226 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
48/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
ios, typescript
Domaine
mobile, testing

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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).

Langage dominant
TypeScript
Étoiles
5.3k
Forks
377
Merge moyen
13 h 18 min
PR mergées (30 j)
653

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de callstack/agent-device

Toutes les issues de callstack/agent-device

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.