How to Open iOS Simulator Without Launching Xcode

How to Open iOS Simulator Without Launching Xcode

Written by

in

Quick answer: You can launch Simulator standalone by running open -a Simulator or open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app in Terminal without opening Xcode. For one-click access, open Simulator once, right-click its icon in the macOS Dock, and select Options > Keep in Dock.

Why this happens

When you install Xcode on macOS, Apple does not place a separate Simulator app in your top-level /Applications folder. Instead, Simulator.app lives deep inside the Xcode.app application bundle at /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app.

Two things commonly trip developers up when trying to launch it by itself:

  1. App bundle nesting: Finder hides the contents of .app bundles unless you explicitly inspect package contents, so browsing /Applications only shows Xcode.
  2. The app name changed: Older Xcode releases named the utility iPhone Simulator.app and later iOS Simulator.app. Starting with Xcode 7, Apple renamed it to Simulator.app because it also runs watchOS, tvOS, and visionOS runtimes. Typing “iOS Simulator” into Spotlight often fails to match the app or surfaces Xcode instead.

If you are testing a web site in Mobile Safari, running a React Native or Flutter project from VS Code, or installing an .app build handed off by another developer, you still need Xcode and at least one platform runtime installed—but you never need to open Xcode or create a dummy project just to run a simulated iPhone or iPad.

How to fix it

1. Pin Simulator to the macOS Dock (No Terminal Required)

If you prefer a graphical workflow, pinning Simulator.app to your Dock is the fastest permanent fix.

  1. Open Xcode once (or skip Xcode altogether using step 2 below).
  2. In the menu bar, select Xcode > Open Developer Tool > Simulator.
  3. Alternatively, without launching Xcode, open Finder, go to /Applications, right-click Xcode.app, choose Show Package Contents, and navigate to Contents/Developer/Applications/. Double-click Simulator.app.
  4. Once the Simulator icon appears in your macOS Dock, right-click (or Control-click) the icon and choose Options > Keep in Dock. You can also drag the icon left into your permanent Dock apps.
  5. Quit Xcode if it is running.

From now on, clicking the Dock icon launches Simulator.app directly. Xcode stays closed, saving gigabytes of memory and avoiding project indexing overhead.

2. Launch Simulator from Terminal with open

If Xcode is installed in /Applications/Xcode.app, you can open the Simulator UI immediately from Terminal using its bundle path:

open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

On macOS, Launch Services also registers helper apps inside Xcode once Xcode has been opened and verified at least once. That lets you shorten the command using the -a flag:

open -a Simulator

If you keep multiple Xcode versions installed side by side (for example, /Applications/Xcode-beta.app or versioned bundles managed by a tool) and switch between them with xcode-select, hardcoding /Applications/Xcode.app may launch the wrong Simulator build. Instead, resolve the active developer directory dynamically:

open "$(xcode-select -p)/Applications/Simulator.app"

xcode-select -p prints the active developer path (typically /Applications/Xcode.app/Contents/Developer), ensuring you always launch the Simulator.app matching your active command-line toolchain.

3. Boot a Specific Device First with xcrun simctl

By default, launching Simulator.app reopens whichever simulated device you used last. If you want to start a specific iPhone or iPad model from the command line—common in frontend testing, Appium, Flutter, or React Native scripts—pair xcrun simctl with open.

First, list all available simulator devices installed on your Mac:

xcrun simctl list devices available

The output groups devices by OS runtime and shows each device’s name, UDID, and current state (Shutdown or Booted). Copy either the exact device name or its UDID, then boot it:

xcrun simctl boot "<DEVICE_NAME_OR_UDID>"

Booting a device via simctl starts the background runtime headlessly without opening a window on your screen. To bring up the graphical window for that booted device, run:

open -a Simulator

If simctl prints Unable to boot device in current state: Booted, the device is already running in the background and open -a Simulator will display it immediately.

Once Simulator is open, you can also open a localhost development URL directly in Mobile Safari from Terminal:

xcrun simctl openurl booted "http://localhost:3000"

And if you have a simulator-targeted .app bundle built elsewhere, you can install it without Xcode:

xcrun simctl install booted /path/to/YourApp.app

4. Add a Shell Alias or Symbolic Link for Quick Access

Typing the full bundle path repeatedly is tedious. You can create a one-word simulator command in your shell configuration.

On modern macOS (where zsh is the default shell), append an alias to ~/.zshrc:

echo 'alias simulator="open -a Simulator"' >> ~/.zshrc
source ~/.zshrc

If your Mac still uses bash, add the same line to ~/.bash_profile or ~/.bashrc instead:

echo 'alias simulator="open -a Simulator"' >> ~/.bash_profile
source ~/.bash_profile

Now typing simulator in any Terminal session opens the app immediately.

If you want Simulator to appear in Launchpad, /Applications, or on your Desktop like a standard Mac app, create a symbolic link rather than copying the file:

ln -s /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app ~/Desktop/Simulator.app

Never copy or drag Simulator.app out of Xcode.app directly. Simulator.app links against private frameworks and developer tools located relative to Xcode.app/Contents/Developer. Moving or duplicating the .app bundle breaks those relative paths and causes the app to crash on launch; a symbolic link (ln -s) or Finder Alias preserves the original bundle location.

How to prevent it

  • Search Spotlight for Simulator, not iOS Simulator: Pressing Command + Space and typing Simulator usually finds the app once Xcode has finished its first-launch setup.
  • Verify your active developer path after Xcode updates: If open -a Simulator or xcrun simctl fails after installing or renaming Xcode, run sudo xcode-select -s /Applications/Xcode.app/Contents/Developer to point macOS at the valid bundle.
  • Install a Simulator runtime at least once: Opening Simulator.app without any iOS runtime installed launches the app with no devices available under File > Open Simulator. Download at least one iOS platform component in Xcode > Settings > Components (or Platforms in earlier Xcode releases), or run xcodebuild -downloadPlatform iOS from Terminal.
  • Use symlinks instead of copies: Keep Simulator.app inside Xcode.app and point shortcuts, Dock icons, or symlinks at the original bundle.

FAQ

Can I install iOS Simulator on a Mac without installing Xcode at all?

No. Standalone Command Line Tools for Xcode do not include Simulator.app or CoreSimulator device runtimes. You must keep Xcode.app installed on disk so Simulator can access its required frameworks and OS runtimes, though you do not need to run Xcode during daily use.

Why does Simulator.app open with no screen or device window?

Simulator.app runs as a menu-bar application even when all device windows are closed. Check the top-left macOS menu bar while Simulator is focused and select File > Open Simulator to pick an iOS runtime and device model. If that menu is empty, you need to download an iOS Simulator runtime via Xcode Settings or xcodebuild -downloadPlatform iOS.

Why do I get LSOpenURLsWithRole() failed or a damaged app error when opening Simulator?

This usually happens on a fresh Xcode installation before accepting the Xcode license and completing initial component installation, or if Simulator.app was copied out of Xcode.app. Run sudo xcodebuild -license accept and sudo xcodebuild -runFirstLaunch in Terminal, then launch Simulator.app from its original path inside Xcode.app.

Sources & credits

Parts of this guide are adapted from content licensed under CC BY-SA 4.0; this article is shared under the same license.