Is there a way to simulate multiple iphones using xcode/iphone sim?

I'm planning out a game that requires multiple users and I was wondering if there's a way to fire up multiple instances of the iPhone Simulator. I didn't see anything in menus or in Google search results, but I just wanted to make sure I wasn't missing anything.


It is possible but only with multiple users.

Read this: http://www.coderebel.com/2010/08/31/iphone_simulator

Assuming you have two projects (P1,P2) which you want to debug simultaneously, do as follows.

Steps to set up:

  1. Create a new user (U2) on your Mac
  2. Give it R/W access to P2, especially to its build folder.
  3. Download the launcher app from the site above and copy it to Applications.

Steps to debug:

  1. Close Xcode and the simulator if running
  2. Launch the iPhone Launcher.app with U1.
  3. Start Xcode with U1, load P1, start debugging.
  4. Launch the iPhone Launcher.app with U2.
  5. Start Xcode with U2, load P2, start debugging.

Unfortunately it's a P.I.T.A. having to change users every now and then but so far I haven't found any better solution. Hope this helps.


There is a way to do this easily without using multiple users. Keep in mind you will not be connected to the debugger though. Keep in mind the explanation below is for XCode 6+. You can skip this explanation and just scroll down to the wrapping-it-up section below.

From an answer here we can see that you can launch any simulator from command line:

open -a "iOS Simulator" --args -CurrentDeviceUDID

You can find the deviceID (as well as all your simulators) by running the xcrun simctl list command on console. It will generate a list like this. The device ID is the code in braces:

== Runtimes ==
iOS 8.3 (8.3 - 12F69) (com.apple.CoreSimulator.SimRuntime.iOS-8-3)
== Devices ==
-- iOS 8.3 --
    iPhone 4s (99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8) (Shutdown)
    iPhone 5 (K262AF11-ADD2-4FDA-ACBA-8C80DD9D4AA1) (Shutdown)
    iPhone 5s (337KDC51-0A4B-47DB-8966-83562FD92C93) (Shutdown)
    iPhone 6 Plus (9GK714E2-F713-4F98-A96E-C72ACD6571A8) (Shutdown)
-- iOS 8.2 --
    etc continued....

Therefore to run the simulator using above as example, run this command on console:

open -n /Applications/Xcode.app/Contents/Developer/Applications/iOS\ Simulator.app/ --args -CurrentDeviceUDID '99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8'

We use the -n flag instead because the -a flag specifies the application to use for opening the file, while the -n flag opens a new instance of the application(s) even if one is already running. Use the man open command to know all this stuff.

Also make sure you have the correct path for your simulator.

One more thing to note, if you run the simulator like this, chances are that you have limited simulators. And since its limited, you might want to launch it without interrupting one that's already on the screen. We can solve this from this answer here where he shows you how to create a new simulator and delete one.

So wrapping it all up, here's what you do to launch them.

A) First Create a simulator before launching it.

Usage: simctl create "name" "device type id" "runtime id"

xcrun simctl create "mynewsimulator" "iPhone 6" "com.apple.CoreSimulator.SimRuntime.iOS-8-3"

You will find the runtime id from the command xcrun simctl list command I ran above. After running the above command, the deviceID will be printed on the console screen. Take note of it as you will need as the last argument to launch the simulator shown below. Let's assume this ID was 99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8

B) launch it

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ --args -CurrentDeviceUDID '99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8'

C) delete it once you're finished with your simulator

xcrun simctl delete 99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8

All this can be placed in a single .sh file for easy running. Please note to put wait or sleep commands after each command if you decide to put all this into a sh file.

[EDIT 2017] I see that XCode 9 will now support multiple simulators. Awaiting to see how it will all work.