How do I erase an Xcode 10 simulator clone through CLI? - ios

Do they share the same UDID?
How are they implemented under the hood?
The scenario is I have 4 clones running UI tests in parallel. I need a clean simulator for some tests (but want to keep random test order)

Command to erase all testing simulators (you'll need to restart Xcode after that):
xcrun simctl --set testing delete all
Overall, it should be better to just reset those sims (you won't need to restart after that):
xcrun simctl --set testing shutdown all
xcrun simctl --set testing erase all
To erase specific one you first need to get his ID with list devices and then shutdown and erase:
xcrun simctl --set testing list devices
xcrun simctl --set testing shutdown 2BC2B50E-C4BA-45B9-9C73-AF5097BA1F0B
xcrun simctl --set testing erase 2BC2B50E-C4BA-45B9-9C73-AF5097BA1F0B
Thanks Scott McCoy for his answer.

I have not been able to find any interface with cloned simulators via simctl. You can completely remove them by deleting their folder under ~/Library/Developer/XCTestDevices. They each get their own UUID, but again, they don't get listed in simctl as far as I can tell.

You can list clones like this:
xcrun simctl --set testing list
But any time I try to use device IDs with xcrun commands they fail with Invalid device: <device id>

On your status bar with Xcode open on your mac go to Windows->Devices and Simulators. There you will see a list of all the available simulators and you can add new or delete existing from there.

you can reset all the simulators by:
xcrun simctl erase all
to reset a particular simulator use:
xcrun simctl erase your_simulator_id

Related

Change Language Of All iOS Simulators

We have the issue that with every new Xcode version all of our simulators are re-created in with system language German and system region Germany. But we need to work with a special "development language". In our case that is en_BZ.
Additionally when I try to set the language now wirth Xcode 14 the simulator crashes and the only solution to bring it back is to erase its data.
How can I change system language/region permanently so I don't have to set that tediously with every new Xcode version and for every simulator device?
This is actually possible suing the tool simctl. Using the following set of commands this can be fully automated:
xcrun simctl list -j "devices" | jq -r '.devices | map(.[])[].udid' | parallel 'xcrun simctl boot {}; xcrun simctl spawn {} defaults write "Apple Global Domain" AppleLanguages -array en; xcrun simctl spawn {} defaults write "Apple Global Domain" AppleLocale -string en_BZ; xcrun simctl shutdown {}'
Explanation
The {} is a placeholder provided by parallel and it represents the respective udid obtained in the first steps above. This is what the single commands do, one by one:
xcrun simctl list -j "devices": Lists all devices that are also available in Xcode in JSON format.
jq -r '.devices | map(.[])[].udid': Filters the udid of each device from the JSON output. It uses the tool jq which is a super powerful JSON parser. You have to install that using brew install jq.
parallel [...]: This launches the following set of command instructions in parallel. This is super useful since the first one, booting all simulators takes a lot of time. Doing this one by one would take forever. Please brew install parallel first.
xcrun simctl boot {}: Boots each simulator.
xcrun simctl spawn {} defaults write "Apple Global Domain" AppleLanguages -array en: Sets English as one pf the preferred languages.
xcrun simctl spawn {} defaults write "Apple Global Domain" AppleLocale -string en_BZ: Sets English as used system language and Belize as system region.
xcrun simctl shutdown {}: Shutdown each simulator again.

How to launch an iOS simulator app from the command line

Is there a way to launch an app on the iOS simulator from the command line, like
simctl launch <app-package>
or something like that?
To install your app:
xcrun simctl install booted
To launch the app:
xcrun simctl launch booted
Hope this helps.

Unable to boot device because it cannot be located on disk

The device's data is no longer present at /Users/[user name]/Library/Developer/CoreSimulator/Devices/D651BCC7-29FD-4B91-82F6-E255E856EA2F/data.
I uninstalled xcode 9 and installed xcode 9.1, but when run project, following message was shown:
Unable to boot device because it cannot be located on disk.
The device's data is no longer present at /Users/[user name]/Library/Developer/CoreSimulator/Devices/D651BCC7-29FD-4B91-82F6-E255E856EA2F/data.
I found "Developer" folder, but cannot find "CoreSimulator" folder.
I was able to resolve the issue running xcrun simctl erase all in Terminal.
Quit Xcode.app, Simulator.app, etc
Try the following commands in Terminal
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService
rm -rf ~/Library/*/CoreSimulator
Go to Xcode menu Window-> Devices and Simulators -> Simulators tab, right-click the bad simulator and choose Delete from the menu list, then add it back from the left bottom entry again, it works!
Click on the simulators dropdown at the top of Xcode, and select Download Simulators....
From here, you can select which versions you want to download and for what devices.
Just run this command in terminal:
xcrun simctl shutdown all && xcrun simctl erase all
I had the same issue.
It worked for me by erasing the device which your Mac does not found.
xcrun simctl erase AKADKJ-
Here is also a link where a found a good explanation.
https://medium.com/xcblog/simctl-control-ios-simulators-from-command-line-78b9006a20dc

xcrun simctl boot / uninstall hang when simulator isn't running

I'm trying to use xcrun simctl to boot a device and uninstall an application, but it hangs on the uninstall step
xcrun simctl boot <deviceudid>
xcrun simctl uninstall <deviceudid> <bundleid>
and it hangs on uninstall and sits forever...however, if i have the simulator already running and execute
xcrun simctl uninstall <deviceudid> <bundleid>
it works fine...but i'm trying to do this in a script without opening the simulator manually
This happens because when you use 'xcrun simctl boot ...' you are not getting a full boot of the simulator. Some services (including those provided by the system app, like install or launch) are unavailable in this mode.
If you want to script booting the device in full, you'll probably want to refer to my answer in Xcode 6 - Launch simulator from command line

How do I remove app from iOS 8 Simulator from command line?

I have an automation running in the iOS Simulator that I have to remove before another run. How do I remove the app from the iOS Simulator from the command line?
For each simulator device directory (located at ~/Library/Developer/CoreSimulator/Devices/*), I
tried to delete ./data/Containers/Bundle/Application/ and ./data/Containers/Data/Application/.
Even when I tried to delete the app by long pressing the app in the Simulator (the app becomes jiggly) and click on the X button, the user defaults were not being cleared. I want the app state to be 100% clean.
I found a good solution to solve this problem.
With Xcode 6.1, to uninstall an app, use the following command:
xcrun simctl uninstall booted com.example.apple-samplecode.UICatalog
where com.example.apple-samplecode.UICatalog is the bundle identifier of the application you wish to uninstall.
One approach that we found for deleting user defaults is to delete all files in the ./data/Library/Preferences/* in addition to deleting application and data directories.
However, in Xcode 6, the command xcrun has new subcommand called simctl that allows me to manage iOS Simulator including resetting the simulator, and installing the application.
The solution that I came up with is to use the command
xcrun simctl erase [device ID]
Example
If xcrun simctl list(†) returns
9DDA0CFE-7CEC-40B6-A343-1EC01F282B22 (active, disconnected)
Watch: Apple Watch Series 2 - 42mm (88474523-163E-4021-B591-2AECBFA26997) (Shutdown)
Phone: iPhone 7 Plus (5785E680-15CD-42D3-82AB-597286A270C5) (Shutdown)
then run these 2 commands
xcrun simctl erase 88474523-163E-4021-B591-2AECBFA26997
xcrun simctl erase 5785E680-15CD-42D3-82AB-597286A270C5
(†) The device ID can be obtained from running
xcrun simctl list
This will reset the simulator (equivalent to iOS Simulator > Reset Contents and Settings... menu item).
With Xcode 6.0.1 (Build 6A317), there is either a bug or a change in behavior where when you uninstall an application, user defaults are not removed.
Usage: simctl [--noxpc] [--set <set path>] <subcommand> ... | help [subcommand]
Command line utility to control the iOS Simulator
For subcommands that require a <device> argument, you may specify a device UDID
or the special "booted" string which will cause simctl to pick a booted device.
If multiple devices are booted when the "booted" device is selected, simctl
will choose one of them.
Subcommands:
create Create a new device.
delete Delete a device.
erase Erase a device's contents and settings.
boot Boot a device.
shutdown Shutdown a device.
rename Rename a device.
getenv Print an environment variable from a running device.
openurl Open a URL in a device.
addphoto Add a photo to the photo library of a device.
install Install an app on a device.
uninstall Uninstall an app from a device.
launch Launch an application by identifier on a device.
spawn Spawn a process on a device.
list List available devices, device types, or runtimes.
notify_post Post a darwin notification on a device.
icloud_sync Trigger iCloud sync on a device.
help Prints the usage for a given subcommand.
Reset all Content & Settings in a single command
Quit iPhone Simulator
In Terminal, run:
xcrun simctl erase all
This will reset content and settings of all the simulators for the active version of Xcode (the one referenced by xcode-select -p).
xcrun simctl uninstall simulatorIdentifier appBundleId

Resources