How do I remove app from iOS 8 Simulator from command line?
Solution 1
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.
Solution 2
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.
Solution 3
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
).
Solution 4
xcrun simctl uninstall simulatorIdentifier appBundleId
Related videos on Youtube
Frank
Updated on September 15, 2022Comments
-
Frank over 1 year
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.
-
Jeremy Huddleston Sequoia over 9 yearsIf all you want to do is delete the single app, you should use uninstall instead of erase.
-
Frank over 9 yearsIn Xcode 6.0.1, even if you use uninstall command, the user defaults remain intact (it's a bug). That's why I suggest using erase.
-
Jeremy Huddleston Sequoia over 9 yearsAh, yes. Good point, however that is not an issue with Xcode 6.0.1 but with iOS 8.0. If you use 'delete' on a simulated 7.x device, it will work fine.
-
Glen T about 9 yearsThis is a much cleaner implementation, especially with the inclusion of 'booted'
-
tfe almost 9 yearsIs there a way to fail silently if there is no booted simulator?
-
tfe almost 9 yearsI guess I could simply do
xcrun simctl uninstall booted com.example.apple-samplecode.UICatalog || true
. -
atineoSE over 7 yearsWhen running on several simulator devices simultaneously, the one on which the app in uninstalled is undefined. In that case, use the UDID of the device instead of
booted
(get the available UDIDs withxcrun simctl list
) -
Pan Mluvčí over 3 yearsexactly what we needed! I searched for method to wipe all contents while developing UITests every time it starts.
-
Ricardo Barroso almost 3 yearsIn completion to the @atineoSE suggestion if you want only the list of running simulators use the command:
xcrun simctl list | grep "Booted"
. Then you can remove the app from a specific simulator with:xcrun simctl uninstall [UDID] [BUNDLE_ID]
.