Skip to main content
FlowDeck CLI provides comprehensive simulator management capabilities, allowing you to list, create, rename, boot, and manage iOS simulators without leaving your terminal.

Managing Simulators

List All Simulators

Filter by Platform

Show Only Available Simulators

JSON Output

Example output:

Booting & Shutting Down

Boot a Simulator

Shutdown a Simulator

Open Simulator.app

Creating Simulators

Create a New Simulator

Find Available Options

See Runtimes for install/remove workflows and the full runtime command reference.

Cloning Simulators

Duplicate an existing simulator with all its settings and data:

Clone by UDID

Use the Clone

Cloning is faster than creating a new simulator when you want an identical copy of a configured environment, including installed apps, saved state, and settings.

Renaming Simulators

Change a simulator’s display name without creating a new device. The UDID stays the same, so saved destinations, scripts, and flowdeck config entries that use the UDID keep working.
JSON output:
A successful rename emits a simulator catalog-change wakeup so the macOS app’s destination pickers refresh.
Prefer renaming by UDID when more than one simulator shares the same name. flowdeck simulator list --json is the source for the UDID.

Deleting Simulators

Delete by UDID

Delete Unavailable Simulators

Remove all simulators that are no longer available:

Prune Stale Simulators

Delete simulators that have never been booted, have not been booted in 90+ days, or are unavailable:

Screenshots

Capture a screenshot (and accessibility tree when needed) via UI automation:
See UI Automation for more screenshot options, including --optimize for AI-friendly output.
FlowDeck’s UI automation is a core CLI feature (not a simulator subcommand) that targets iOS simulators. See the UI Automation overview for examples and the full command reference for all commands and flags.

Device Orientation

Get Current Orientation

Reads the physical orientation directly from the simulator — no Accessibility or Screen Recording permissions required. Reflects changes from both programmatic rotation and manual rotation via the Simulator app’s Hardware menu. Possible values: portrait, portrait-upside-down, landscape-left, landscape-right Example JSON output:

Set Orientation

Sends a rotation event to the simulator and, by default, polls until the physical and visual orientation match the requested value (up to 30 seconds). Returns the confirmed orientation, not just the requested one, and sets confirmed: true in JSON output once verified. Pass --no-wait when you want the command to return as soon as the rotation event is delivered. This is useful for UI surfaces that rotate their local simulator frame immediately and do not need to block on CoreSimulator’s delayed visual confirmation. success stays true on this path since the event was dispatched without error, but confirmed is always false — nothing was verified.
Rotation only takes effect if the front-most app supports the target orientation. If the app does not support the requested orientation, the command reports the orientation that was actually applied.
portrait-upside-down is not supported on iPhone simulators. Use an iPad simulator for upside-down orientation checks.

Hardware and Debug Controls

Supported CoreAnimation debug options: blended, copies, misaligned, offscreen, slow-animations.

Accessibility & Localization

Dynamic Type (Content Size)

Valid categories: extra-small, small, medium, large, extra-large, extra-extra-large, extra-extra-extra-large, accessibility-medium, accessibility-large, accessibility-extra-large, accessibility-extra-extra-large, accessibility-extra-extra-extra-large. Takes effect immediately for apps that honor UIContentSizeCategory.

Increase Contrast

Language & Locale

Changing or resetting the language reboots a booted simulator automatically so the change takes effect across the system. A shut-down simulator applies the change on its next boot. Appearance also supports flowdeck simulator appearance reset (back to light).

Reduce Motion

Reduce Transparency

Show Borders

Highlights button shapes on system controls, matching Settings ▸ Accessibility ▸ Display & Text Size ▸ Button Shapes.

VoiceOver

Color Filter

Valid filters: off, grayscale, protanopia, deuteranopia, tritanopia. --intensity accepts 0.25-1.0 and is not valid for grayscale.

Liquid Glass

--opacity accepts 0.0-1.0. --look-and-feel accepts clear or tinted.

Audio

--output and --input accept systemDefault or a device UID from flowdeck simulator audio devices. --volume accepts an integer 0-100. At least one of --output, --input, or --volume is required for set.
Reduce Motion, Reduce Transparency, Show Borders, VoiceOver, Color Filter, Liquid Glass, and Audio apply immediately to a booted simulator without a reboot. The same nine settings are also reachable from the FlowDeck macOS app’s simulator panel, under the Settings menu.

Status Bar Overrides

Force fixed status bar values — handy for clean App Store screenshots and deterministic UI tests.
Flags: --time, --data-network, --wifi-mode, --wifi-bars, --cellular-mode, --cellular-bars, --operator-name, --battery-state, --battery-level. At least one is required.

Push Notifications

Deliver a simulated remote push from a JSON payload — no APNs required.
The payload must contain an aps key and be 4096 bytes or less.

Privacy Permissions

Pre-grant, revoke, or reset app permissions so UI tests don’t hit system prompts.
Services: all, calendar, contacts, contacts-limited, location, location-always, photos, photos-add, media-library, microphone, motion, reminders, siri. grant/revoke require --bundle-id; reset does not.

Pasteboard

Keychain

Watch + Phone Pairing

Pair a watch and phone simulator for WatchConnectivity (WCSession) testing.
The watch and phone must have compatible runtimes (e.g. watchOS 11 + iOS 18). --activate makes the new pair the active pair; a freshly created pair is already active, so re-activating is a no-op. WCSession delivery between simulators can be unreliable regardless of pairing — pairing only ensures a connectable pair exists.

Launch an embedded Watch companion

When an iOS app embeds a Watch app at Host.app/Watch/*.app, you can launch that companion on a paired watch simulator without re-running the iPhone app:
FlowDeck resolves or auto-creates a compatible watch+phone pair, boots the watch if needed, installs the watch app when it is not already present, and launches it. A plain flowdeck run of the iPhone target only detects the embedded Watch product; it does not launch the watch until this command (or the macOS simulator panel header toggle) is used.

App Inspection

Cache Management

Clear Simulator Cache

Erase Simulator Contents

Reset a simulator to factory state:
Erasing a simulator deletes all apps, data, and settings. This cannot be undone.

CI/CD Usage

Boot Simulator Before Tests

Create Fresh Simulator for CI

JSON Output Examples

simulator list —json

simulator runtime list —json

Troubleshooting

Simulator Won’t Boot

Try erasing and rebooting:

Simulator Not Found

Verify the simulator exists and get its UDID:

Old Runtimes

Check for available runtimes and update Xcode if needed: