Cleaning up the iPhone simulator

IphoneXcodeIos Simulator

Iphone Problem Overview


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?

Iphone Solutions


Solution 1 - Iphone

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.)

Solution 2 - Iphone

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.

Solution 3 - Iphone

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.

Solution 4 - Iphone

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)

Solution 5 - Iphone

it may be overkill but..

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

Solution 6 - Iphone

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.

Solution 7 - Iphone

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

Solution 8 - Iphone

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

Xcode -> Hardware -> Erase All Content and Settings

Solution 9 - Iphone

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.

Solution 10 - Iphone

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 {}"

Solution 11 - Iphone

As of Xcode 6:

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

Solution 12 - Iphone

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.

Solution 13 - Iphone

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

Solution 14 - Iphone

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.

Solution 15 - Iphone

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

Solution 16 - Iphone

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTravis JensenView Question on Stackoverflow
Solution 1 - Iphonej7nn7kView Answer on Stackoverflow
Solution 2 - IphonePyjamaSamView Answer on Stackoverflow
Solution 3 - IphoneJohnView Answer on Stackoverflow
Solution 4 - IphoneidStarView Answer on Stackoverflow
Solution 5 - IphoneShoeLaceView Answer on Stackoverflow
Solution 6 - IphonemahboudzView Answer on Stackoverflow
Solution 7 - Iphonejia tianView Answer on Stackoverflow
Solution 8 - IphoneHaraldView Answer on Stackoverflow
Solution 9 - IphoneJeremy Huddleston SequoiaView Answer on Stackoverflow
Solution 10 - IphoneThomas TView Answer on Stackoverflow
Solution 11 - IphoneTinyTimZamboniView Answer on Stackoverflow
Solution 12 - IphoneAlbert RenshawView Answer on Stackoverflow
Solution 13 - IphoneHuseyinView Answer on Stackoverflow
Solution 14 - IphoneThibault D.View Answer on Stackoverflow
Solution 15 - IphoneSimonView Answer on Stackoverflow
Solution 16 - IphonewfbarksdaleView Answer on Stackoverflow