Troubleshooting
sim-remote prints error: <message> on stderr. When there is an action to take, a second line hint: <advice> follows, with two leading spaces. The exit code is 1.
Error messages
| Message | Cause | Action |
|---|---|---|
not logged in | The daemon holds no session | Run sim-remote login |
your session is no longer valid | The token expired, or the API key was replaced | Run sim-remote login |
authentication failed: <detail> | The server rejected the API key | Check SIM_ROUTER_API_KEY or --api-key |
client/server protocol mismatch: <detail> | The binary is too old for the server | Download the latest release of sim-remote |
no simulator is available right now | All machines of your team are busy | Run the command again with --timeout <SECS> to wait for a free machine |
you no longer hold a machine | The machine was released, for example after the idle timeout | Run sim-remote acquire, or sim-remote attach <MACHINE_ID> for a machine that you still hold |
your machine is offline | The machine lost its connection to the server | Wait a few seconds and run the command again. If it stays offline, run sim-remote release and then sim-remote acquire |
you do not hold that machine | The id given to attach is not yours | Run sim-remote list-machines to see the machines that you hold |
the server is busy right now | The server rate limits your requests | Wait a moment and run the command again |
could not reach sim-router at <URL> | No connection to the server | Check your network and the --server URL |
the request to sim-router timed out | The server did not answer in time | Run the command again |
the sim-remote daemon is not responding: <detail> | The daemon on your computer is stuck | Run sim-remote daemon stop, then run the command again |
upload exceeds the 1 GiB limit | The file is too large | Reduce the size of the bundle or the file |
simulator operation failed: <detail> | simctl on the machine failed | Read the detail. It is the message of simctl |
the running daemon is incompatible with this client | You updated sim-remote while the old daemon ran | Run sim-remote daemon stop and log in again. This releases the machine |
no sim-router URL: pass --server <URL> or set SIM_ROUTER_URL | The binary has no server URL | Use the release binary, or pass --server <URL> |
Symptoms
login stays on Waiting for an available machine.... All machines of your team are in use. Wait, or shorten the wait with --timeout <SECS>, or fail at once with --no-wait. Run sim-remote list-machines to check whether you hold a machine yourself.
A simulator that you booted earlier is gone. Your session is attached to another machine, or the machine was released and rebuilt. Run sim-remote list-machines to see the current machine and sim-remote attach <MACHINE_ID> to switch back. After a release, boot the simulator again.
The app in the simulator cannot reach your local server. The simulator has no route to your localhost. Run sim-remote reverse start <UDID> <PORT> and confirm the tunnel with sim-remote reverse status. See Connect to local servers.
Argent shows no hosted simulators. Argent needs sim-remote on PATH and a session with a machine. Run sim-remote login and list the devices again.
The machine was released while a test ran. The idle timeout expired because no sim-remote command ran for 15 minutes. Run sim-remote keepalive <TIME> next to the test, or increase SIM_REMOTE_IDLE_TIMEOUT_SECS. See Sessions and limits.
Maestro or Appium cannot start the test runner. Read the log of the xcodebuild process: xctest_runner_*.log for Maestro, or the Appium server log with appium:showXcodeLog: true. The shim writes its steps there. See Maestro and Appium.