Bereinigen des iPhone-Simulators


107

Gibt es eine einfache Möglichkeit, das Verzeichnis zu bereinigen, in dem xcode beim Erstellen für den iPhone-Simulator eine App bereitstellt? Ich habe eine SQLite-Datenbank, die beim Start bei Bedarf in den Ordner "Dokumente" kopiert wird. Das Problem ist, dass ich möglicherweise mein Schema ändere, die neue Datenbank jedoch nicht kopiert wird, da bereits eine vorhanden ist.

Idealerweise würde es jedes Mal, wenn ich baue, den vorherigen Inhalt zerstören. Ist das möglich oder muss ich es manuell machen?


Unterstützt der Simulator AppleScript?
Rog

Ja tut es. Ich habe ein AppleScript geschrieben, um alle iOS-Simulatoren für jedes Gerät und jede Betriebssystemversion zu durchlaufen und deren Inhalt und Einstellungen zurückzusetzen: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Antworten:


91

Der Simulator installiert Apps in:

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

Überprüfen Sie auch:

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

Die GUID-Dateien und -Verzeichnisse stimmen mit den installierten Apps des Simulators überein.

Löschen Sie alle diese Dateien / Verzeichnisse manuell, um alle Anwendungen aus dem Simulator zu entfernen.

Ich weiß, dass es eine Möglichkeit gibt, dem Erstellungsprozess in XCode Skripte hinzuzufügen.

Es sieht auch so aus, als ob XCode die GUID ändert, die es für jeden Build verwendet (das Verzeichnis, in dem sich meine App befindet, ändert sich zwischen den Builds in XCode), sodass der Versuch, immer dasselbe Verzeichnis zu löschen, nicht funktioniert. Wenn Sie jeweils nur an einer App arbeiten, ist das Löschen des gesamten Verzeichnisses eine Option.


2
Lesen Sie unbedingt die Antwort von @ idStar weiter unten. Es enthält aktualisierte Informationen zu Lion / Xcode4 und ein nettes kleines Skript zur Automatisierung.
PyjamaSam

Ich habe das Hinzufügen / Entfernen von Kalenderabonnements getestet. Auf einem realen Gerät können Sie ein Kalenderabonnement unter Einstellungen> Konten entfernen. Dieses Menü ist jedoch in iOS Simulator nicht vorhanden und ich wollte nicht den gesamten Simulator zurücksetzen. Daher habe ich meinen Geräteordner lokal mit git versioniert und git reset HEAD --hard && git clean -fein Kalenderabonnement entfernt, nachdem ich es hinzugefügt habe.
Thibault D.

132

Von Apples Dev Resources:

Um den Benutzerinhalt und die Einstellungen des Simulators auf den Werkszustand zu setzen und die von Ihnen installierten Anwendungen zu entfernen, wählen Sie iPhone Simulator> Inhalt und Einstellungen zurücksetzen .

Das ähnelt:

iOS zurücksetzen


3
Dieser scheint die SQLite
Asped

1
Dies löscht zum Beispiel nicht den Cache des Browsers
Mau

1
Jetzt befindet sich diese Einstellung inHardware > Reset Content and Settings
Haseeb Eqx

22

Ich klicke dazu einfach auf das Symbol für meine App im Simulator und halte es gedrückt. Wenn es zu wackeln beginnt, klicke auf das Schwarzweiß (x). Es wird eine Meldung angezeigt, in der Sie gefragt werden, ob Sie wirklich löschen möchten, und Sie klicken einfach auf Ja. Wenn Sie Ihre App das nächste Mal erstellen und bereitstellen, wird die neue SQLite-Datenbank problemlos verwendet, und Sie müssen nicht im Dateisystem herumspielen.


Dies scheint nicht zu funktionieren - es löscht nicht WIRKLICH Daten aus dem Simulator?
Adam

1
Mein Fehler - das funktioniert einwandfrei (bestätigt durch Lesen des Verzeichnisses in der akzeptierten Antwort. Ich hatte gerade Apples benutzerunfreundliches Design von NSUserDefaults vergessen (nicht gesetzte Werte werden auf keine vernünftige Weise gemeldet)
Adam

@quadelirus, ich denke, Ihre Antwort ist in dieser Situation am besten geeignet.
Datum

Genau das habe ich getan, aber ich bin mir nicht sicher, wie ich die App schließen soll, die bereits im Simulator geöffnet ist. Bis ich die App nicht schließe, konnte ich den Simulator nicht steuern.
Willst du Kaffee


12

Nach iOS 5 unter Mac OS X Lion können Sie Folgendes versuchen:

  1. Erstellen Sie ein Skript mit dem Namen RemoveSimulatorApps.command:
    rm -rf "$ HOME / Bibliothek / Anwendungsunterstützung / iPhone Simulator / 5.0 / Anwendungen / *"
    
  2. Speichern Sie dieses Skript in einem Verzeichnis in Ihrem PATH.
  3. Machen Sie die Datei ausführbar, wie zum Beispiel:
    chmod + x RemoveSimulatorApps.command

Annahmen

  • Möglicherweise möchten Sie dies über eine Tastaturfavoritentaste aufrufen, z. B. auf einer Logitech- oder Microsoft-Tastatur mit programmierbaren Tasten (daher als Befehlsdatei speichern, anstatt beispielsweise .sh).
  • Sie können alles im iOS-Simulator wegblasen (ideal, wenn Sie nur aktiv an einer App arbeiten).
  • Alle Hinweise von anderen beziehen sich darauf, eine gute aktualisierbare App usw. zu sein. (Ich persönlich fand dies dennoch nützlich. B / C Ich habe Entwicklungsmodus-Schalter, die eine Datenbank in einem bestimmten Zustand neu laden, in dem ich versucht habe, eine konsistente Robustheit / Fehlerbehandlung durchzuführen.)

1
Dieser funktioniert perfekt, denken Sie daran, Ihre richtige IOS-Version in den Pfad
einzufügen

1
Wäre es sinnvoll, ~ anstelle des absoluten Pfades hinzuzufügen?
Nikita Leonov

8

es kann übertrieben sein, aber ..

Sie können auch das Menü und "Inhalt und Einstellungen zurücksetzen ..." verwenden.


7

Was Sie wirklich versuchen, ist, Ihre Datenbank zu löschen, wenn Sie das Schema geändert haben. Eine Möglichkeit, dies zu tun, und die Sie auf lange Sicht glücklicher macht, wenn Sie mit dem Versand von Version 2.0, 3.0 usw. Ihrer App beginnen, besteht darin, die Version Ihrer SQLite-Tabelle zu überprüfen. Wenn sich diese geändert hat, verwerfen Sie die alte Datei und verwenden Sie die in Ihrem Bundle.

Wenn Sie einen Weg finden, den Simulator zu bereinigen, hilft dies nicht dem realen Problem, wie Sie das iPhone eines Kunden bereinigen können, wenn Sie eine neue Version mit einem neuen Schema ausliefern.

Nachdem Sie festgestellt haben, dass Sie auf ein altes Schema gestoßen sind, möchten Sie für zusätzliche Punkte möglicherweise die neue Datenbank kopieren, ohne die alte zu zerstören, und interessante Daten aus der alten Datenbank in die neue laden. Dann blasen Sie die alte Datenbank weg. Auf diese Weise können Sie die Ergänzungen Ihres Benutzers zur Datenbank beibehalten.


Im Allgemeinen stimme ich Ihnen zu, wenn Sie über Release-Upgrades sprechen. Während der Entwicklung einer bestimmten Version ist dies jedoch weitaus aufwändiger als erforderlich. Das Datenbankschema kann sich pro Build ändern, und das Schreiben von Konvertierungscode für jeden Build ist einfach falsch.
Travis Jensen

7

für 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

6

Wenn Sie Xcode 9 verwenden -> Menüleiste -> Hardware -> Alle Inhalte und Einstellungen löschen

Xcode -> Hardware -> Alle Inhalte und Einstellungen löschen


5

Ab Xcode 6 können Sie dies über die Befehlszeile tun mit: xcrun simctl erase

Außerdem verfügt die iOS Simulator-App (sowohl die Xcode 6-Version als auch ältere Versionen) über einen Menüpunkt namens "Inhalt und Einstellungen zurücksetzen", mit dem das aktuell gebootete Gerät gelöscht werden kann.


aber kann es bei jedem Build automatisch ausgeführt werden? zum Beispiel für Tests?
Daniel Gomez Rico

Angenommen, Sie führen Ihre Tests mit einem Skript durch, könnten Sie diesem Skript gegebenenfalls einfach 'xcrun simctl erase <UDID>' hinzufügen ...
Jeremy Huddleston Sequoia

Ja, genau das habe ich gesagt.
Jeremy Huddleston Sequoia

5

Dies funktioniert mit 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 {}

Für .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 {}"


1

Xcode-Cache löschen;

Befehl + Option + Umschalt + K.

Befehl + Umschalt + K.

(Verwenden Sie beide, weil sie unterschiedliche Funktionen haben)

Abgeleiteten Dateninhalt löschen;

Menüleiste -> Fenster -> Organizer -> Projekte -> Wählen Sie Ihr Projekt aus

Im rechten Bereich wird der Name des Ordners angezeigt. Auf der rechten Seite können Sie auch alle abgeleiteten Dateninhalte löschen.

Simulator-Cache löschen;

Menüleiste -> iOS Simulator -> Inhalt und Einstellungen zurücksetzen


1

Wie ich in einem Kommentar unter der validierten Antwort erklärt habe :

Ich habe das Hinzufügen und Entfernen von Kalenderabonnements getestet. Auf einem realen Gerät können Sie ein Kalenderabonnement unter Einstellungen , Konten entfernen , aber dieses Menü ist in iOS Simulator nicht vorhanden und ich wollte nicht den gesamten Simulator zurücksetzen.

Daher habe ich meinen Geräteordner lokal mit git versioniert und die folgenden Befehle ausgeführt, um ein Kalenderabonnement zu entfernen, nachdem ich es hinzugefügt habe:

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

Die Schritte sind also:

  1. Installieren Sie Ihre Anwendung auf dem iOS-Simulator und tun Sie, was Sie tun müssen
  2. Identifizieren Sie Ihr Gerät in ~/Library/Developer/CoreSimulator/Devices/und führen cdSie git initeine Aktion durch, um dann ein Git-Repository zu erstellen
  3. Sobald Sie den Status speichern möchten, führen Sie aus git commit -a "Message"
  4. Nehmen Sie die Änderungen vor (z. B. Hinzufügen eines Kalenderabonnements) und führen Sie Ihre Tests durch
  5. Fahren Sie den Simulator herunter
  6. Machen git reset --hard HEAD
  7. Starten Sie den Simulator, alle Änderungen, die danach vorgenommen wurden, git commitsind weg.

1

Gehen Sie in XCode zur Menüoption Fenster, wählen Sie Geräte aus und löschen Sie einfach die Geräte, die Sie nicht mehr benötigen.


0

Für Xcode <= 5

Ich habe folgendes zu meinem hinzugefügt ~/.bash_profile

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

Es macht einfach alle Apps auf der Sim kaputt.


1
Dies gilt nicht mehr für Xcode 6 und höher.
Jeremy Huddleston Sequoia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.