AXedocs
Install

CLI

The shape of AXe invocations, which commands require a simulator UDID, and how AXe handles stdout, stderr, and cancellation.

Synopsis#

shell
axe <command> [options]

Every command exposes Swift Argument Parser help:

shell
axe --help
axe tap --help
axe batch --help

Command groups#

GroupCommands
Discoverylist-simulators, describe-ui
Interactiontap, slider, swipe, drag, touch, gesture, button
Keyboardtype, key, key-sequence, key-combo
Mediascreenshot, record-video, stream-video
Batchbatch
Setupinit

The --udid convention#

Every command that interacts with a simulator requires --udid <UDID>. list-simulators and init do not.

batch rejects per-step --udid; pass it once at the batch level.

stdout vs stderr#

StreamWhat goes there
stdoutPrimary results: describe-ui JSON, saved screenshot/video path, streamed video bytes, batch completion summary.
stderrProgress, diagnostics, and errors.

This means payloads can be piped safely:

shell
SHOT=$(axe screenshot --udid <UDID>)
axe stream-video --udid <UDID> --format ffmpeg | ffmpeg -f image2pipe -framerate 10 -i - out.mp4

Cancellation#

record-video and stream-video run until interrupted. Press Ctrl+C or send SIGTERM; AXe stops capture, finalizes writers, and prints the final path when applicable.

Verification model#

Most HID commands are fire-and-forget: AXe can confirm the event was dispatched, not that the app processed it. slider is the exception: it drags, reads back AXValue, and fails if the observed value is outside tolerance.

Use describe-ui or screenshot as separate verification steps for other commands.