Cordova: start specific iOS emulator image

cordova run ios --list empty
cordova run simulator ios
ionic cordova run ios
cordova list emulators android
cordova-ios deployment-target
ionic run specific device ios
no target specified for emulator. deploying to undefined simulator
cordova-ios version

I'm developing a cross-platform mobile app using Cordova, focussing mainly on iOS in the development stage.

For my development process it would be ideal if I could start my Cordova app directly from the command line and have it load into a specified emulator. I can do this by running the following from the project root directory:

$cordova run --debug --emulator iOS

This works fine, and results in an iOS-simulator running my app in a simulated iPhone 4 Retina with iOS 7.0.3

Besides this simulated device, I would also like to test on (for instance) an iPad. I have these emulation images installed, and I can start my app in them manually in Xcode. Also, the command list-emulator-images (located in project_dir/platforms/ios/cordova/lib) gives the following output:

"iPhone Retina (3.5-inch)"
"iPhone Retina (4-inch)"
"iPhone Retina (4-inch 64-bit)"
"iPhone"
"iPad"
"iPad Retina"

However, the thing is: I can't seem to figure out how to start the emulator in anything other than the default (which appears to be the iPhone Retina (4-inch) emulation image). The relevant output of cordova help gives the following information:

run [--debug|--release]
    [--device|--emulator|--target=FOO]
    [PLATFORM] ............................ deploys app on specified platform devices / emulators

I've tried things like the following:

cordova run --debug --emulator=iPad iOS

And many variations thereof, but no luck. Every time it starts in the same emulator.

The documentation for the command-line tool doesn't offer any information in this regard, and an extensive Google-search also failed to turn up anything. Am I missing something trivial? Or am I trying to do something weird? I really hope someone here has experience with this, and can provide some answers.

Thanks very much in advance!

edit: forgot to mention explicitly; I'm doing all this on a Mac. As mentioned earlier, running the app in different emulators/simulators in Xcode works fine.

To find out what are the simulator images available you can use to list them

$ cordova emulate ios --list
Available iOS Virtual Devices:
    iPhone-4s, 9.3
    iPhone-5, 9.3
    iPhone-5s, 9.3
    iPhone-6, 9.3
    iPhone-6-Plus, 9.3
    iPhone-6s, 9.3
    iPhone-6s-Plus, 9.3
    iPad-2, 9.3
    iPad-Retina, 9.3
    iPad-Air, 9.3
    iPad-Air-2, 9.3
    iPad-Pro, 9.3

Then use one of the simulator names in the --target parameter:

cordova emulate ios --target="iPhone-4s, 9.3"
cordova emulate ios --target="iPad-Air-2, 9.3"
cordova emulate ios --target="iPhone-6s, 9.3"
cordova emulate ios --target="iPhone-6-Plus, 9.3"

Important Quit the simulator before launching a different target simulator (On Menu bar select Simulator->Quit)

Take into account that you may need to quit the iOS simulator via menu to switch from 3.5 to 4 inch iPhone.

dynamic list is available in platforms/ios/cordova/lib/list-emulator-images

How to Run an Ionic/Cordova App on a Specific Device/iOS Simulator, Using Cordova CLI, from your project's directory, execute the following command: $ ./platforms/ios/cordova/lib/list-emulator-images. You should see a list of all  start a specific emulator and choose your ios version by directly using ios-sim. But you can improve --target option of cordova run command. At first you must ensure what target iOS version available on your system.

As say csantanapr you can use:

cordova emulate ios --target="iPhone-4s"

but, in this case cordova (or PhoneGap or other) project will be launched on iPhone 4s simulator with iOS version 7.0.3.

If you want launch project on same simulator, but with other version iOS (7.1 or 8.0, if it versions exist in your system)?

Of corse, you can do like say cobberboy:

start a specific emulator and choose your ios version by directly using ios-sim.

But you can improve --target option of cordova run command.

At first you must ensure what target iOS version available on your system.

For it use answer of cobberboy:

$ ios-sim showdevicetypes

Then you need to open the file your_project_dir/platforms/ios/cordova/lib/run.js and find lines of code like below:

// validate target device for ios-sim
// Valid values for "--target" (case sensitive):
var validTargets = ['iPhone-4s', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

For use iPhone-4s, 7.1 (or some other) simple add it to array validTargets.

var validTargets = ['iPhone-4s', 'iPhone-4s, 7.1', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

And in

cordova emulate ios --target="iPhone-4s, 7.1"

your --target="iPhone-4s, 7.1" will be valid.

And function deployToSim of run.js:

function deployToSim(appPath, target) {
// Select target device for emulator. Default is 'iPhone-6'
if (!target) {
    target = 'iPhone-6';
    console.log('No target specified for emulator. Deploying to ' + target + ' simulator');
}
var logPath = path.join(cordovaPath, 'console.log');
var simArgs = ['launch', appPath,
    '--devicetypeid', 'com.apple.CoreSimulator.SimDeviceType.' + target,
    // We need to redirect simulator output here to use cordova/log command
    // TODO: Is there any other way to get emulator's output to use in log command?
    '--stderr', logPath, '--stdout', logPath,
    '--exit'];
return spawn('ios-sim', simArgs);
}

convert iPhone-4s, 7.1 to valid argument com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1 for ios-sim.

iOS Platform Guide, You can use cordova run ios --list to see all available targets and cordova run ios --target=target_name to run application on a specific device or emulator (for  You can use cordova run ios --list to see all available targets and cordova run ios --target=target_name to run application on a specific device or emulator (for example, cordova run ios --target="iPhone-6"). You can also use cordova run --help to see additional build and run options. Open a Project in the SDK

TL;DR

You can start a specific emulator and choose your ios version by directly using ios-sim.

export appname="./platforms/ios/build/emulator/Hello World.app"
ios-sim launch "$appname" --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0" --stderr ./platforms/ios/cordova/console.log --stdout ./platforms/ios/cordova/console.log
Details

When I ran this:

cordova emulate ios --target="iPad"

and looked at the processes running, I saw this (on a single line):

ios-sim launch ./platforms/ios/build/emulator/HelloWorld.app 
        --stderr ./platforms/ios/cordova/console.log 
        --stdout ./platforms/ios/cordova/console.log 
        --family ipad 
        --exit

Investigating further into ios-sim, it looks like there are some more specific options, particularly:

--devicetypeid <device type>    The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.
  e.g "com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0"

So I did as it suggested and ran ios-sim with a "showdevicetypes" argument and got this:

$ ios-sim showdevicetypes
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-2, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPad, 8.0

Run your Cordova project on a specific iOS device in the simulator , What emulator images do you have installed? In Cordova CLI a simulator device that you can run your iOS build on is called a target. To find  $ ionic cordova run ios --target=iPhone-5s. Run your app on a specific iOS. Similarly, you can use Ionic CLI’s command to launch an Ionic app on a particular device with a specific iOS version. To do this, firstly, execute the following ios-sim tool’s command in any directory: $ ios-sim showdevicetypes

Don't include version number

cordova run ios --target="iPhone-6s"

How to run your Ionic app on a specific iOS simulator using the CLI, I'm developing a cross-platform mobile app using Cordova, focussing mainly on iOS in the development stage. For my development process it would be ideal if I  In this post, Cordova CLI and ios-sim command line utility will be used in order to check what device types and iOS versions are available to launch your app on them. Note that the ios-sim

As of Xcode 8.3.2...

Old thread, I know, but it seems, perhaps, that the answer has changed slightly. The hints from earlier posts in this thread helped, but so did reading the documentation included in the code, <cordova-project>/platforms/ios/cordova/lib/run.js

Execute ./platforms/ios/cordova/lib/list-emulator-images to list the available emulator images. Do not include the version number on the end when making the cordova call to run in the desired emulator.

cordova run ios --emulator --target="iPad-Air"

See more

Cordova: start specific iOS emulator image, Have you ever wondered how to launch a specific iOS simulator Just run: $ ionic cordova emulate --list. You should see a list of all the  SDKs for mobile platforms often come bundled with emulators that execute a device image, so that you can launch the app from the home screen and see how it interacts with many platform features. Run a command such as the following to rebuild the app and view it within a specific platform's emulator: $

Selecting an iOS emulator image to test on - tutorials, Cordova: start specific iOS emulator image. Question. I'm developing a cross-​platform mobile app using Cordova, focussing mainly on iOS in the development​  in using the ionic emulate command line (i'm assuming it's the same as cordova phoengap) how do I pick the device - either ipad or iphone tall screen. It always defaults to the 3.5" screen.

`cordova run ios -target iPhone-XR` leads to `Building for "iPhone X , I've been racking my brain on how to select a specific iOS emulator .com/​questions/22310526/cordova-start-specific-ios-emulator-image. $ cordova emulate ios --target="iPhone-5s" Reference. iphone - Cordova: start specific iOS emulator image - Stack Overflow

start a specific emulator and choose your ios version by directly using ios-sim. But you can improve --target option of cordova run command. At first you must  Visual Studio Tools for Apache Cordova supports a variety of Cordova Simulate profiles for Android and iOS devices. To see the available options, select an Android or iOS target platform, then click the drop-down arrow on the execution target to view the complete list of Simulate in Browser options.

Comments
  • Thanks, this helped. What was your source for this? Just wondering how I could have figured this out myself... The answer to this question also helped a lot: stackoverflow.com/questions/13877840/… Apparently 'cordova emulate' is a wrapper voor ios-sim, which you can also talk to directly. This is what I ended up doing, so I can build & launch my code directly from my IDE of choice.
  • I just ran this command and can confirm the 4.7 and 5.5 inch emulators are not listed, even with Xcode 6 installed :-(
  • Hi, I tried this command "./platforms/ios/cordova/lib/list-emulator-images" but I didn't see all options,, NO iPhone 6,NO iPhone 6-Plus, NO iPad-Air what would be the problem? Thanks
  • I don't really know why but for me Cordova CLI would throw "Error: Cannot read property 'name' of undefined" when specifying the target with quotes, I could only get it to work by running it like this cordova run ios --target=iPhone-6. Hope this saves someone else some trouble!
  • I'm having the same problematic result as Gifford N. I'm using cordova 7.0.0
  • This works perfectly and allowed me to use ionic run ios --target='iPhone-6, 9.0' when using Ionic Framework.
  • Good find 👍. I simply commented out the block that validates validTargets and I was able to specify the full platform, ex: "--target="iPhone-6, 8.4"". Would be really nice if Cordova delegated target validation to ios-sim.
  • This doesn't work for me. I typed garbage in run.js and it was ignored. Does npm cache this or something? How can I refresh npm's cache?
  • You can also run "ionic platform update ios" and you will be able to run the recently installed emulators
  • How does this work for changing the default simulator? You're bypassing the cordova bit here and just launching directly, right?
  • thank god for your comment! It didn't work after the latest update and couldn't find any info. Just got the error message: "Error: Cannot read property 'name' of undefined" which was fixed after NOT including the ios version.
  • @MarcoRinck check the comment on answer, there is quick fix by typing: cordova run ios --target=iPhone-6