Create a session
For full runnable SDK source, see
newly-app/run-cloud-examples/sdk-ios-android.
Capacity queue
If every compatible simulator is already in use,runcloud ios create waits
for the next available session instead of failing immediately. If capacity opens
within the wait window, the command returns a normal active session and includes
queued: true, queueWaitMs, and queueAttempts in the JSON response.
If capacity does not open in time, the command fails with no active session.
Retrying is safe because a simulator lease is only created after capacity is
assigned.
Configure the session
If
--inactivity-timeout is omitted, run.cloud uses a 60-second inactivity
timeout. Set it to none to disable inactivity auto-close. The signed simulator
URL carries that policy to the iOS simulator; an embedded viewer shows the final
10-second countdown, ends the iOS simulator lease, and posts a session-ended
message to its parent page.
Billing is organization-level. Active sessions accrue metered usage against the
selected organization. If the organization reaches its run.cloud credit ceiling,
active simulator sessions are closed automatically.
Install an app
Try the onboarding app without building an iOS project:.app; it is
not an App Store or physical-device IPA.
Install a local simulator build while creating the session:
--install accepts .tar.gz, .zip, .app archives, and .ipa files. iOS
Simulator reliability still depends on the app being built for the simulator
runtime. Device-signed App Store IPAs are not a substitute for simulator builds.
Open URLs and deep links
Control the app
The CLI and SDK use normalized display coordinates from 0 to 1, with the origin at the top-left:Inspect accessibility
Read the current nested hierarchy without exposing the signed viewer URL:Capture a screenshot
Capture the current iOS simulator display as PNG bytes:image/png and are never cached.
The maintained
iOS app screenshot example
builds a native fixture, installs it, validates the PNG, and releases the
session:
screenshots/run-cloud-proof.png. Building from source requires
macOS with Xcode; pass --app <path> to use a prebuilt simulator artifact.
Record screen video
Start an MP4 capture, stop it, and download it through the authenticated API:cloud.ios.startRecording,
getRecording, listRecordings, stopRecording, and downloadRecording.
See Record a Simulator for lifecycle,
idempotency, retention, release, and failure behavior.
Read simulator logs
Read the most recent unified-log entries produced during the current lease, or follow new entries until you stop the command:--tail values from 1 to 1,000. --follow streams only new
entries as they arrive; use --json to emit one JSON object per entry. Snapshot
JSON includes since, capturedAt, entries, and truncated. Snapshot and
stream responses are never cached.
Upload a video
Import an MP4 or QuickTime video into Photos on an active simulator:cloud.assets until you delete it.
Video imports accept video/mp4 and video/quicktime, with a 500 MB limit.
Inject camera video
Present a prerecorded MP4 or QuickTime file to an installed app as live camera frames:uploadVideo, which imports a video into Photos. Camera input is
limited to 500 MB, and the returned user-owned asset remains available until
you delete it.
Inject microphone audio
Loop a prerecorded audio asset through the foreground app’sAVAudioEngine microphone input:
Inspect sessions
list shows active sessions by default. Pass --all to include released
sessions.