Problem
GADS has no built-in way to check a screen for accessibility issues. XCUITest exposes a native accessibility audit (XCUIApplication.performAccessibilityAudit) that flags real issues (contrast, missing labels, hit-target size, etc.) directly on-device, with no extra tooling required.
I've already validated this works reliably on iOS via XCUITest.
Note: the same path isn't usable on Android today — the UiAutomator2-based accessibility audit returns HTTP 500 in practice — so this should ship iOS-only for now
Proposed feature
- A "Scan accessibility" action in the hub UI, shown only for iOS devices, that:
- opens a short-lived Appium/XCUITest session against the app currently on screen,
- runs
performAccessibilityAudit,
- returns the findings (type, element, description) in the hub UI — ideally with a jump-to/highlight on the live screen.
- Gate the button on
platformName == iOS so it's simply hidden on Android instead of erroring.
Implementation questions to discuss
- Run through the existing
/grid Appium session machinery, or a dedicated provider-side endpoint (like tap/swipe are proxied today)?
- Scope: whole app vs. current visible screen only — which is more useful as v1?
- Output — inline list in the UI is enough for v1, or exportable (JSON/CSV) from day one?
Happy to implement this — I already have the XCUITest audit call working from a separate spike, just want to align on where it plugs into the hub/provider split before opening a PR
Problem
GADS has no built-in way to check a screen for accessibility issues. XCUITest exposes a native accessibility audit (
XCUIApplication.performAccessibilityAudit) that flags real issues (contrast, missing labels, hit-target size, etc.) directly on-device, with no extra tooling required.I've already validated this works reliably on iOS via XCUITest.
Note: the same path isn't usable on Android today — the UiAutomator2-based accessibility audit returns HTTP 500 in practice — so this should ship iOS-only for now
Proposed feature
performAccessibilityAudit,platformName == iOSso it's simply hidden on Android instead of erroring.Implementation questions to discuss
/gridAppium session machinery, or a dedicated provider-side endpoint (liketap/swipeare proxied today)?Happy to implement this — I already have the XCUITest audit call working from a separate spike, just want to align on where it plugs into the hub/provider split before opening a PR