Troubleshooting
The errors you are most likely to meet, and what they mean.
"No booted simulator"
Open the Simulator app, or xcrun simctl boot <udid> (xcrun simctl list devices available lists them). TestedOK uses the first booted simulator unless --sim says otherwise.
"run testedok login first"
There is no saved token. testedok login in the browser, or TESTEDOK_API_URL and TESTEDOK_TOKEN in CI.
"Confirm your email first"
API tokens are minted only for confirmed addresses. Open the confirmation mail, then testedok login again.
The first run is slow
The first run on a simulator builds and starts the XCUITest driver (about a minute); later runs reuse it. On Android the first run installs the on-device driver APK.
"kAXErrorServerNotFound" or "Error getting main window"
The simulator's accessibility server was not there for a moment, usually right after a launch or a deep link. TestedOK retries a few times; if it persists, the app may have been relaunched by the system (a sms: or tel: link does that) and the driver lost it.
The flow does something reasonable but wrong
Almost always wording. See goals that pass: name the control as the app labels it, put values in data, say "scroll down" when the button starts below the fold, and keep one flow to one thing.
It keeps escalating at the same step
The screen is ambiguous to the accessibility tree: a control without a label, a selected state the app does not expose (.accessibilityAddTraits(.isSelected) in SwiftUI). testedok audit lists nameless controls. Fixing the label fixes the test and the screen reader at once.
"needs {{ secrets.x }}: set it with …"
The flow refers to a secret that is set nowhere the CLI looks: TESTEDOK_SECRET_X, your Keychain, or the project. The message names all three. Also check that the environment lists the name under secrets.
"no free 'admin' account in the pool"
Every account of that role is in use or broken. Add one (testedok account add), free one on the Fixtures page, or wait: leases lapse after 45 minutes.
"no mail arrived in 90s"
The app never sent to the inbox address, or it sent to a different one than the flow typed. Check that the address typed is the {{ inbox.new }} one (the run log prints it) and that the app accepts it; some reject unfamiliar domains.
The Android run is slow
The on-device driver could not be installed or started, and the run fell back to uiautomator dump. The log says so. Make sure the device allows installing from adb (adb install -t) and that nothing else holds port 22088.
Something else
hello@testedok.dev, with the run link if there is one.