Run the iOS Simulator in the cloud from an agent
Boot an iPhone simulator on a cloud Mac, install your build and capture screenshots with simctl, driven by a coding agent. Including the 90-second first boot.
· 8 min read
Need a Mac for this? NoMac gives your agent full macOS with Xcode, from $9.99 a month, billed by the second. Start now →
The iOS Simulator only runs on macOS. There is no official Windows or Linux build, and the web-based “iOS simulators” you find online either stream someone else's Mac or imitate an iPhone in a browser without running your code. If you need your actual app running on an actual simulator without owning a Mac, you need a Mac somewhere else.
This guide runs the simulator on a cloud Mac, driven entirely from the command line, so a coding agent can do it as easily as you can.
Headless is fine. You do not need a screen to run the simulator. xcrun simctl boots devices, installs apps, launches them and captures screenshots without any window. An agent reads the screenshot like you would.
1. Start a Mac and check the runtimes
nomac start --json nomac ssh -- xcrun simctl list runtimes nomac ssh -- xcrun simctl list devices available
NoMac sessions come with an iOS 26 simulator runtime and the current iPhone and iPad device types. If you need another runtime, you have root and can download it, but it takes a while and disappears at stop, so prefer the one that is there.
2. Boot a device, and give it time
nomac ssh -- xcrun simctl boot "iPhone 17 Pro" nomac ssh -- xcrun simctl bootstatus "iPhone 17 Pro" -b
A first boot on a fresh machine takes about 90 seconds, most of it CoreSimulator migrating data. bootstatus -b waits until the device is really ready. If an agent runs this through a managed job with a short timeout, the job is killed halfway and the agent wrongly concludes that the simulator does not work. Managed commands on NoMac default to 300 seconds, which is enough.
3. Build for the simulator
nomac sync . nomac ssh -- xcodebuild -scheme MyApp \ -destination 'platform=iOS Simulator,name=iPhone 17 Pro' \ -derivedDataPath build build
Simulator builds need no signing and no Apple Developer account. The app bundle lands under build/Build/Products/Debug-iphonesimulator/.
4. Install, launch and screenshot
nomac ssh -- xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/MyApp.app nomac ssh -- xcrun simctl launch booted com.example.MyApp nomac ssh -- mkdir -p shots nomac ssh -- xcrun simctl io booted screenshot shots/home.png nomac pull ./shots --from shots
Pull the PNG back and look at it, or let the agent look at it. A rendered simulator screenshot on an iPhone 17 Pro is 1206 by 2622 pixels, the same as the device.
5. Useful simctl commands for agents
- ·
simctl openurl booted myapp://settingsjumps straight to a deep link, which is the easiest way to reach a screen without tapping. - ·
simctl ui booted appearance darkchecks dark mode. - ·
simctl status_bar booted override --time 9:41gives clean screenshots. - ·
simctl privacy booted grant photos com.example.MyAppskips permission prompts. - ·
simctl spawn booted log stream --predicate 'process == "MyApp"'streams your app's logs.
For tapping and typing, simctl alone is not enough. Tools like XcodeBuildMCP and agent-device add UI automation on top; you can install them on the session with root. Or write the flow as an XCUITest and run it with xcodebuild test.
What this is good for, and what it is not
- ·Good: proving a screen renders, checking layouts across devices and dark mode, running unit and UI tests, generating App Store screenshots, reproducing a crash with logs.
- ·Not good: hands-on exploratory play. There is no live screen to drag around. For feel, put a build on your own phone with TestFlight.
- ·Not a device: the simulator has no camera, real push notifications or true performance characteristics. Test those on hardware.
Stop when you are done
nomac stop --json
Stopping deletes the VM, the simulator and everything on it, so pull screenshots and logs first. To set this up for Claude Code over MCP, see give Claude Code a Mac in five minutes.