108
votes

Is there a straightforward way to clean up the directory where xcode deploys an app when building for the iPhone simulator? I have a sqlite database that gets copied into the Documents folder on startup if necessary. The problem is that I might change my schema, but the new database won't get copied, because one already exists.

Ideally, every time I build, it would nuke the previous contents. Is this possible, or do I have to manually do it?

16
Does the simulator support AppleScript?Rog
Yes it does. I've written an AppleScript to iterate through all of the iOS simulators for each device and OS version and reset their Contents & Settings: github.com/michaelpatzer/ResetAllSimulatorsmpatzer

16 Answers

131
votes

From Apples Dev Resources:

To set the user content and settings of the simulator to their factory state and remove the applications you have installed, choose Device > Erase All Content and Settings.

(On older versions: iPhone Simulator > Reset Content and Settings.)

91
votes

The simulator installs apps into:

"$HOME/Library/Application Support/iPhone Simulator/User/Applications"

Also check:

"$HOME/Library/Developer/CoreSimulator/Devices"

The GUID files and directories match up to the simulator's installed apps.

Manually delete all those files/directories to remove all applications from the simulator.

I know there is some way to add scripts to the build process in XCode.

Also it looks as if XCode changes the GUID it uses each build (the directory where my app sits changes between builds in XCode), so trying to delete the same directory all the time won't work. If you are only working on one app at a time then clearing out the entire directory would be an option.

22
votes

The way I do this is to simply click and hold on the icon for my app in the simulator--then when it starts to wiggle click the black and white (x). A message will pop up asking whether you really want to delete and you just click yes. The next time you build and deploy your app it will use the new sqlite db without a hitch and you don't have to go muck around in the filesystem.

12
votes

After iOS 5 on Mac OS X Lion, you can try:

  1. Create a script called RemoveSimulatorApps.command that contains:
    rm -rf "$HOME/Library/Application Support/iPhone Simulator/5.0/Applications/*"
    
  2. Save this script to a directory in your PATH.
  3. Make the file executable, such as:
    chmod +x RemoveSimulatorApps.command

Assumptions

  • You may want to invoke this from a keyboard favorites buttons, such as on a Logitech or Microsoft keyboard with programmable keys (hence, saving it as a .command file instead of say, .sh)
  • You are okay with blowing away everything in the iOS simulator (ideal if you're just actively working on one app)
  • All the notes from others apply about being a good upgradable app etc. (I personally found this useful nonetheless b/c I have development mode switches that reload a database in a specific state I was trying to do some consistent robustness/error handling on)
8
votes

it may be overkill but..

you can also use the menu and 'Reset Content and Settings...'

7
votes

What you are really trying to do is to clear out your database, if you've changed the schema. One way to do this, and it would make you happier in the long run when you start shipping version 2.0, 3.0, etc. of your app, is to check the version of your sqlite table, and if it has changed, then discard the old file and use the one in your bundle.

Finding a way to clean up the Simulator won't help the real world problem of how to clean up a customer's iPhone when you ship a new version with a new schema.

For extra points, after determining that you have encountered an old schema, you may want to copy the new database over without destroying the old one, and load any interesting data out of the old database, into the new one. Then blow away the old database. That way you can preserve your user's additions to the database.

7
votes

for Xcode >= 6

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -n1 xcrun simctl erase
7
votes

If you are using Xcode 9 -> Menubar -> Hardware -> Erase All Content and Settings

Xcode -> Hardware -> Erase All Content and Settings

5
votes

As of Xcode 6, you can do this from the command line with: xcrun simctl erase

Also, the iOS Simulator app (both the Xcode 6 version and older versions) has a menu item called "Reset Content and Settings" that can be used to erase the currently booted device.

5
votes

This works with Xcode 6:

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}

For .bash_profile

alias cleansim="xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}"
3
votes

As of Xcode 6:

xcrun simctl erase <sim udid> <- resets the simulator.

1
votes

Clear Xcode Cache;

Command+Option+Shift+K

Command+Shift+K

(Use both of them because they have different functionality)

Clear Derived Data content ;

Menu Bar -> Window -> Organizer -> Projects -> Select Your Project

Right Pane shows the name of folder and also delete button at the right side allows you to delete all derived data contents.

Clear Simulator Cache;

Menu Bar -> iOS Simulator -> Reset Contents And Settings

1
votes

As I was explaining in a comment under the validated answer:

I was testing adding and removing calendar subscriptions. On a real device, you can remove a calendar subscription in Settings, Accounts but this menu does not exist in iOS Simulator and I did not want to reset the whole simulator.

So I ended up locally versioning my Device folder with git and perform the following commands to remove a calendar subscription after I added it:

$ git reset HEAD --hard
$ git clean -f

So the steps are:

  1. Install your application on the iOS Simulator and do what you have to do
  2. Identify your device in ~/Library/Developer/CoreSimulator/Devices/ and do a cd to it, then git init to create a git repository
  3. Once you want to save the state, perform git commit -a "Message"
  4. Do whatever changes the settings (ex: adding a calendar subscription) and perform your tests
  5. Shutdown the simulator
  6. Do git reset --hard HEAD
  7. Start the simulator, all changes done after git commit are gone.
1
votes

In XCode, go to the Window menu option, select Devices and then you can just delete the ones you no longer need.

1
votes

The following run in terminal will wipe all of your simulators clean as if you had just installed them.

$xcrun simctl erase all

I close simulators/xcode before running it.

0
votes

For Xcode <= 5

I added the following to my ~/.bash_profile

alias cleansim='rm -r ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/*'

It just nukes all of the apps on the sim.