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

未关闭
#4,226 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
ios, typescript
领域
mobile, testing

调研方向

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.

由索引模型根据 Issue 内容生成。

描述

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

主要语言
TypeScript
星标
5.3k
派生
377
平均合并
13 小时 49 分钟
30 天内合并 PR
650

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

callstack/agent-device 的其他 Issue

查看 callstack/agent-device 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。