I updated Xcode 7 and write some new code.
The problem is that my app support iOS 7.1, that require run from Xcode 6.4 to run iOS 7.1 simulator. But I can not run the app from Xcode 6.4 any more, because there's some new coding syntax that is only run from Xcode 7.
How can I debug my app for iOS 7.1.
Thank you!
Build your app in Xcode 7.
Quit Xcode 7.
Open up Xcode 6.4.
Launch the Simulator.app from Xcode 6.4
Run 'sudo xcode-select -s /path/to/Xcode-6.4.app'
Run 'xcrun simctl install booted /path/to/the/built/simulator.app'
Your app should be visible in the iOS 7.1 sim.
Xcode 7 doesn't have any code syntax. That's the iOS version. And If you are using any new API, your app will crash on lower versions.
Before using the newer API calls on existing framework objects, you may want to check respondsToSelector: on the object to avoid crashes. And you need to have a fallback method for lower API versions.
But if you are using iOS 9 only frameworks, Contacts framework for instance, you need to check the device's iOS version before using the framework to avoid crashes.
I've been trying to install iOS simulators 8.3 & 8.4 on Xcode 6.3.2 an 6.4 beta respectively. In the first case is not even an option to download this simulator while in Xcode 6.4 it shows an error "Could not download and install iOS 8.3 Simulator. Authorization is required to install the packages". I've searched the web but I could not find anything so I tries reinstalling Xcode from Apple developer website as well as from the app store with no change at all. The only simulator I can use is 8.2. I cannot install any other version. Any help would be really appreciated.
This is the error on Xcode 6.4 with no additional option of iOS 8.4 Simulator
These are the simulator options for me to download which result in that error
These are my options in Xcode 6.3.2 with no option for iOS 8.3
I found a workaround on the Apple forums. If you run Xcode using sudo the simulator downloads and installs work just fine:
sudo /Applications/Xcode.app/Contents/MacOS/Xcode
Note: Once the downloads and installs are complete you should quit Xcode and start it normally.
The iOS 8.3 Simulator runtime is includes in Xcode 6.3 (which is why it isn't offered as an additional download).
The iOS 8.3 Simulator runtime should be downloadable from Xcode 6.4, as you show. Your dialog box reports that there was an authentication problem when attempting to install the package. You need to provide administrator credentials when installing the package.
The reason you are getting your "iPhone 6 runs iOS 8.2 which is lower than -project name- minimum deployment target." errors is because you are selecting an iPhone 6 with iOS 8.2 on it and not an iPhone 6 with iOS 8.3 on it.
Use 'xcrun simctl create' or Xcode's Devices window to create the iOS 8.3 devices you need.
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
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.
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
Don't include version number
cordova run ios --target="iPhone-6s"
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
I can't comment on the answer above due to my low reputation, but the list of targets is available from:
start-emulator
under
your platform/ios/cordova/lib/
Having said that, I cannot make the ipad retina emulator work...
fastest output of devices list:
$ instruments -s devices
Just use the device name without the version.
Now is:
cordova run ios --list
Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 14.3
Apple-TV-4K-4K, tvOS 14.3
Apple-TV-4K-1080p, tvOS 14.3
Apple-Watch-Series-5-40mm, watchOS 7.2
Apple-Watch-Series-5-44mm, watchOS 7.2
Apple-Watch-Series-6-40mm, watchOS 7.2
Apple-Watch-Series-6-44mm, watchOS 7.2
iPhone-8, 14.3
iPhone-8-Plus, 14.3
iPhone-11, 14.3
iPhone-11-Pro, 14.3
iPhone-11-Pro-Max, 14.3
iPhone-SE--2nd-generation-, 14.3
iPhone-12-mini, 14.3
iPhone-12, 14.3
iPhone-12-Pro, 14.3
iPhone-12-Pro-Max, 14.3
iPod-touch--7th-generation-, 14.3
iPad-Pro--9-7-inch-, 14.3
iPad-Pro--11-inch---2nd-generation-, 14.3
iPad-Pro--12-9-inch---4th-generation-, 14.3
iPad--8th-generation-, 14.3
iPad-Air--4th-generation-, 14.3
And:
cordova run ios --target="iPad-Pro--12-9-inch---4th-generation-, 14.3"
In Cordova 10.0.0
Different iphone and ipad simulator
cordova run ios --list
cordova emulate ios --target "iPhone-7"
Runs iOS simulator with web request based on already generated build for cordova application.
Execute this request from browser opens simulator on mac with iPhone 8Plus version:
http://hostname:3000/cordova/build/[xxxx-buildnumber]/emulate?target=iPhone-8-Plus
#Birja's answer is working right now but the run command he used finally is still wrong so here the right answer:
To list all the devices available in simulator cordova run ios --list
It will result in something like this:
Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 12.2
Apple-Watch-Series-2-38mm, watchOS 5.2
iPhone-5s, 12.2
iPhone-6, 12.2
iPad-Air-2, 12.2
iPad--5th-generation-, 12.2
iPad-Pro--9-7-inch-, 12.2
iPad-Pro, 12.2
iPad-Pro--12-9-inch---2nd-generation-, 12.2
iPad-Pro--10-5-inch-, 12.2
iPad--6th-generation-, 12.2
iPad-Pro--11-inch-, 12.2
iPad-Pro--12-9-inch---3rd-generation-, 12.2
cordova run ios --target "iPad-Pro, 12.2" Use any target from the above. To run in simulator.