Commit Graph

10 Commits

Author SHA1 Message Date
Charles Wiltgen e996de9d79 fix(xcui): send a physical tap, and refuse to guess the simulator
AXe's default tap style sends a simulator tap that SwiftUI controls
ignore while AXe still prints a success line. Measured on Xcode 27.1
with AXe 1.8.0, across iPhone 17 (iOS 27.0) and iPhone Duo (iOS 27.1):
neither a Button, a List row, a Button inside a List, a Menu, a row of
an open Menu nor a TabView tab activated under the default or the
`simulator` style, and `--tap-style physical` activated all six. The
same default left system alerts on screen while `dialog accept`
reported them handled.

`tap` and the `dialog` accept/dismiss taps now supply the physical
style unless the caller picks one, and an AXe older than 1.7.0 — which
has no `--tap-style` — is named as the cause instead of surfacing as an
unknown-flag failure.

With more than one simulator booted and no `--udid`, every device verb
now exits 2 and lists each booted device's UDID, name and runtime,
rather than driving whichever sorted first while reporting success.
`doctor` reports that list, fails its gate in that state, and leaves
`booted_udid` empty, because nothing may be targeted until the caller
chooses.
2026-09-19 15:43:23 -07:00
Charles Wiltgen d0ed6a59e5 fix(xcui): work under Xcode 27 beta (SimulatorKit.framework relocation)
Xcode 27 beta relocated SimulatorKit.framework from Contents/Developer/Library/
PrivateFrameworks to Contents/SharedFrameworks, so bare AXe (which xcui shells out to for
tap/describe-ui) fails to load its private frameworks and every simulator tap silently
breaks -- hitting exactly the OS27/Xcode-beta audience.

xcui now routes its AXe calls through runAxe(), which injects DEVELOPER_DIR pointing at a
fallback Xcode that still carries the legacy framework path when the selected one does not.
The selected Xcode is preferred; the override self-clears once AXe (or a future beta)
resolves the path. `xcui doctor` now smoke-tests AXe (describe-ui) instead of only checking
presence, exposes the resolved axe_developer_dir, and treats a slow-sim timeout as
inconclusive. Verified: axe tap (HID) succeeds under the override on a live beta sim.

Guidance for direct AXe calls (Axiom's recommended input path) now carries a
DEVELOPER_DIR-prefix caveat keyed to xcui doctor's axe_developer_dir, in commands/ui.md,
axe-ref, xcui-ref, simulator-tester, and the axe-ref/xcui-ref docs pages.
2026-07-06 10:16:04 -07:00
Charles Wiltgen 45d30cbe88 feat(xcui): deterministic sim pick + doctor --udid (axiom-2pw7)
With more than one simulator booted, pickBootedUDID returned the first in Go
map-iteration order — nondeterministic across runs, so wait/assert could target
a different sim each run. Sort booted candidates (new bootedUDIDs helper) for a
stable pick. Add --udid to doctor (every other verb already accepts it) and an
advisory note listing all booted sims when more than one is up — it does not
flip OK, since deterministic resolution still works; pass --udid to override.
2026-06-07 19:45:55 -07:00
Charles Wiltgen 177cb3928f feat(xcui): add a11y set/reset for accessibility toggles 2026-05-31 11:14:01 -07:00
Charles Wiltgen f8819aef3d feat(xcui): add a11y assert with label/value/trait/single checks 2026-05-31 11:10:02 -07:00
Charles Wiltgen fe215acf8a feat(xcui): add wait (for-element/gone/idle) polling the a11y tree 2026-05-31 11:08:21 -07:00
Charles Wiltgen cdac880d4d feat(xcui): add doctor preflight with consented brew install 2026-05-31 11:07:16 -07:00
Charles Wiltgen 208b61229c feat(xcui): add booted-sim resolution and describe-ui invocation 2026-05-31 11:06:27 -07:00
Charles Wiltgen aefd02409b feat(xcui): add a11y-tree parse types, find/walk, and parser fuzz target 2026-05-31 11:05:55 -07:00
Charles Wiltgen 6c10ef9366 feat(xcui): scaffold module, dispatch, and build 2026-05-31 11:03:56 -07:00