Wo speichert der iPhone Simulator seine Daten?

234

Ich habe eine SQLite-Datenbank, in der ich App-Daten speichere, und ich könnte einen Blick darauf werfen, um ein Problem zu beheben, das ich habe - aber wo speichert der iPhone Simulator normalerweise seine Daten?

Codebeef
quelle

Antworten:

290

Die akzeptierte Antwort ist für SDK 3.2 korrekt. - SDK 4 ersetzt den Ordner / User in diesem Pfad durch eine Nummer für jede der älteren iPhone OS / iOS-Versionen, die simuliert werden können. Der Pfad lautet also:

~ / Bibliothek / Anwendungsunterstützung / iPhone Simulator / [Betriebssystemversion] / Anwendungen / [AppGUID] /

Wenn Sie das vorherige SDK nebenan installiert haben, speichert der 3.1.x-Simulator die Daten weiterhin in:

~ / Bibliothek / Anwendungsunterstützung / iPhone Simulator / Benutzer / Anwendungen / [appGUID] /

Für Xcode6 und iOS8

~ / Bibliothek / Entwickler / CoreSimulator / Geräte / [Geräte-ID] / Daten / Container / Daten / Anwendung / [AppID] /

dsmudger
quelle
6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert
174
Beachten Sie die Antwort von pisca46, anstatt im Finder zu suchen, für den GUID Ihnen gehört: Geben Sie einfach po NSHomeDirectory()den Debugger ein. Ausschneiden und Einfügen in Gehe zu> Gehe zu Ordner (Cmd-Shift-G).
Mackworth
Ich bin ein bisschen besorgt, dass beim Starten des Simulators 8.2 angezeigt wird, aber wenn ich in diesen Ordner schaue, sehe ich nur die Versionsnummer 7.1. Das macht mir Sorgen, dass ich am falschen Ort suche.
Bugloaf
1
@bugloaf Siehe diese Frage oder Antwort unten
Raviprakash
4
Es ist schwer zu betonen, wie viel einfacher, bequemer, weniger fehleranfällig und weniger frustrierend diese Antwort ist (wie in Mackworths Kommentar oben empfohlen). Sie können einfach eine Zeile hinzufügen NSLogdies in Ihrem AppDelegate‚s didFinishLaunchingWithOptions:, oder Sie können po NSHomeDirectory()aus dem Debugger. Kopieren Sie in beiden Fällen die Zeichenfolge und öffnen Sie sie im Finder mit Cmd+Shift+G. Dies funktioniert besser, weil Sie mit einem Standardbefehl fragen, anstatt etwas wissen zu müssen, das sich ändert.
Benjohn
93

Es gibt eine andere (schnellere?) Möglichkeit, herauszufinden, wo sich Ihre App-Daten ohne Terminal befinden:

  1. Starten Sie die App im Simulator
  2. Aktivitätsmonitor öffnen
  3. Suchen Sie den Namen Ihrer App auf der Registerkarte CPU
  4. Doppelklicken Sie darauf und öffnen Sie die "Dateien und Ports öffnen"

Geben Sie hier die Bildbeschreibung ein

Sergey verloren
quelle
1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];gibt Ihnen die Gerätekennung
oabarca
@oabarca Die Kennung, die Sie erhalten, hat nichts mit der Geräte-ID oder dem App-Ordner des Simulators zu tun. Ich benutze Xcode 11.2.1 und iOS 13.2.2
DawnSong
78

Fand es:

~/Library/Application Support/iPhone Simulator/User/
Codebeef
quelle
16
So suchen Sie: Drücken Sie im Finder CMD + UMSCHALT + G
Rohan-Patel
Bitte sehen Sie die aktualisierte Antwort unten von dsmudger, es ist die richtige Antwort im Moment.
Tom Susel
74

iOS 8 ~ / Bibliothek / Entwickler / CoreSimulator / Geräte / [Geräte-ID] / Daten / Anwendungen / [AppGUID] / Dokumente /

Wagh
quelle
1
Wie kann ich eine Geräte-ID erhalten?
msmq
2
@msmq versuchenxcrun instruments -s
Shazron
11
@msmq Schalten Sie Ihren aktuellen Simulator ein, Hardware -> Gerät -> Geräte verwalten ... -> Wählen Sie Ihren Simulator in der Liste "SIMULATOREN" aus. Dann ist rechts "Identifier". Dies ist die Geräte-ID.
RichX
Wie finde ich die [appGUID] hier?
Yang Sie
66

Auf Lion Users/[username]/Libraryist das versteckt.

Um einfach im Finder anzuzeigen, klicken Sie oben auf dem Bildschirm auf das Menü "Los" und halten Sie die Alt-Taste gedrückt, um "Bibliothek" anzuzeigen.

Klicken Sie auf "Bibliothek" und Sie können Ihren zuvor ausgeblendeten Bibliotheksordner sehen.

Zuvor empfohlen:

Verwenden

chflags nohidden /users/[username]/library

in einem Terminal, um den Ordner anzuzeigen.

Rafael Moreira
quelle
1
Danach finden Sie es unter: ~ / Bibliothek / Anwendungsunterstützung / iPhone Simulator / [Betriebssystemversion] / Anwendungen / [AppGUID] /
Rafael Moreira
Das ist ein interessanter Vorschlag für normale Benutzer, aber es scheint mir, dass iOS / OS X-Entwickler regelmäßig auf die Bibliothek zugreifen müssen und sie daher nie wieder verstecken möchten. (
Andererseits
57

Der einfachste Weg überhaupt.

  1. Fangen Sie irgendwo einen Haltepunkt.

  2. Geben Sie po NSHomeDirectory()in Konsolenfenster

Ergebnis:

(lldb) po NSHomeDirectory () / Benutzer / Benutzername / Bibliothek / Entwickler / CoreSimulator / Geräte / 4734F8C7-B90F-4566-8E89-5060505E387F / Daten / Container / Daten / Anwendung / 395818BB-6D0F-499F-AAFE-068A783D9

Lal Krishna
quelle
1
Wenn ich das nur früher wüsste. Dies sollte die richtige Antwort gewesen sein
Ivan Cantarino
Ich denke, alle anderen Antworten sind auch richtig. Aber das scheint mir einfach zu sein: -]
Lal Krishna
37

Wenn der Simulator ausgeführt wird, können Sie den Pfad zum Container einer beliebigen App abrufen:

xcrun simctl get_app_container booted <app bundle identifier>

Beispielausgabe:

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

"gebootet" kann durch die meisten ersetzt werden simctl Befehle überall dort eingesetzt werden, wo eine Geräte-UDID erwartet wird.

Sie können die Liste der Geräte mit anzeigen xcrun simctl listund Hilfe zu bestimmten Befehlen mit erhaltenxcrun simctl help .

Aktualisieren : Auf vielfachen Wunsch in Xcode 8.3 können Sie jetzt die Art des gewünschten Containers angeben, indem Sie "App", "Daten", "Gruppen" oder eine App-Gruppen-ID anhängen.

So erhalten Sie den Datencontainer:

$ xcrun simctl get_app_container booted com.example.app data
russbishop
quelle
ausgezeichnet. Sie müssen keinen Befehl ausführen, um device_id und appId abzurufen. Ein Schritt, um alles zu bekommen
iamhite
Dieser sollte akzeptiert werden, weil er der "stabilste" Weg ist, solche Dinge zu tun.
Olha
35

Mit Xcode 5 können Sie den folgenden Code verwenden:

#import <Foundation/NSFileManager.h>

und:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

Das Ergebnis könnte folgendermaßen aussehen:

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

Wo hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhist eine Hex-Zeichenfolge, die Ihre iOS-App identifiziert?

Pisca46
quelle
16
Dies funktioniert auch im Debugger: po NSHomeDirectory()
Mackworth
30

Anscheinend hat Xcode 6.0 diesen Speicherort erneut verschoben, zumindest für iOS 8-Simulatoren.

~ / Bibliothek / Entwickler / CoreSimulator / Geräte / [Geräte-ID] / Daten / Container / Daten / Anwendung / [AppID]

ein Wolf
quelle
4
In ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / gibt es auch eine .plist-Datei mit dem Namen "device.plist". Wenn Sie hineinschauen, können Sie den Gerätenamen wie iphone-6 oder iphone-5s herausfinden. deviceID ist sehr verwirrend, daher denke ich, dass Sie in die .plist-Datei schauen sollten.
EFE
1
Wie bekomme ich die AppID?
Anzeigename
1
Ich habe betrogen, um die App-ID zu finden, indem ich 'ls -l' verwendet und herausgefunden habe, welche App-Dateien zuletzt erstellt wurden. Könnte auch für andere funktionieren.
Maya Webster
1
Oder im Finder nach "Erstellungsdatum" sortieren, um die App ganz oben auf der Liste zu platzieren.
Ammar Mujeeb
30

Eine der einfachsten Möglichkeiten, um herauszufinden, wo sich die App im Simulator befindet. Benutzer "NSTemporaryDirectory ()"

Schritte-

  1. Wenden Sie den Haltepunkt an einer beliebigen Stelle in der App an und führen Sie die App aus.
  2. Wenn die App am Haltepunkt stoppt, geben Sie den folgenden Befehl in die Xcode-Konsole ein.

    po NSTemporaryDirectory ()

Siehe das folgende Bild für einen richtigen EinblickGeben Sie hier die Bildbeschreibung ein

Jetzt haben Sie den genauen Pfad zum temporären Ordner. Sie können zurückgehen und alle App-bezogenen Ordner anzeigen.

Hoffe das hilft auch. Viel Spaß beim Codieren :)

Shubhendu
quelle
1
Cooler Tipp, aber warum nicht po NSHomeDirectory()?
Code Roadie
9

Wo Xcode ab 2019 Simulatoren speichert Catalina, Xcode 11.0

Laufzeit

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

Zum Beispiel: iOS 13.0, watchOS 6.0nehmen diese den meisten Platz, bei weitem. Jeder kann bis zu ~ 5 GB groß sein

Geräte

$ open ~/Library/Developer/CoreSimulator/Devices

Zum Beispiel: iPhone Xr, iPhone 11 Pro Max. Diese sind typischerweise jeweils <15 MB.

Erläuterung

Simulatoren werden zwischen Laufzeiten und Geräten aufgeteilt. Wenn Sie ausführen $ xcrun simctl list, sehen Sie eine Übersicht. Wenn Sie jedoch den physischen Standort dieser Simulatoren ermitteln möchten, schauen Sie in die von mir gezeigten Verzeichnisse.

Es ist absolut sicher, nicht unterstützte Laufzeiten zu löschen. Sie können diese später neu installieren, wenn Sie möchten.

Joshuakcockrell
quelle
8

Mach das einfach:

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

Und Sie werden so etwas bekommen:

/ Benutzer / admin / Bibliothek / Entwickler / CoreSimulator / Geräte / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / Daten / Container / Daten / Anwendung / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Dokumente

Wenn Sie dorthin gehen, wird der Dokumentordner Ihrer App unabhängig von der Version von XCode angezeigt. (Verwenden Sie den Befehl "Gehe zu Ordner ..." im Finder und geben Sie einen Pfad "~ / library" an.)

Schnelle Version für String-Pfad:

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

und Ordner-URL:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)
LembergSun
quelle
Wollte fast die gleiche Antwort posten. Diese Methode hat den Vorteil, dass in jeder Version des iOS-Simulators immer der richtige Pfad angegeben wird. Übrigens können Sie auch den Wert der URL-Variablen in den Debugger kopieren, wenn Sie ihn nicht protokollieren möchten;)
Moose
7

In iOS 5:

/ Benutzer / [Benutzername] / Bibliothek / Anwendungsunterstützung / iPhone Simulator / 5.0 / Anwendungen / [AppGUID] /

Karthi
quelle
6

Für Xcode 4.6 wird es im folgenden Pfad gespeichert ...

/ Benutzer / [aktueller Benutzer] / Bibliothek / Anwendungsunterstützung / iPhone Simulator / 6.1 / Anwendungen /

Um es programmgesteuert zu kennen, verwenden Sie den folgenden Code

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
Durai Amuthan.H
quelle
2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect
4

Für iOS 8

Um den Ordner " Dokumente" zu suchen, können Sie eine Datei in den Ordner "Dokumente" schreiben:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

sagen, in didFinishLaunchingWithOptions.

Dann können Sie ein Terminal öffnen und den Ordner suchen:

$ find ~/Library -name Words.txt
Oh ho
quelle
2

Wenn bei lion dieses Problem immer noch auftritt, gibt es einen großartigen Artikel mit 19 verschiedenen Tipps zum Anzeigen Ihres ~ / Library-Verzeichnisses. Den Artikel von Dan Frakes finden Sie hier http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

Denken Sie daran, dass das Verzeichnis zum Simulator unten angegeben ist

~ / Bibliothek / Anwendungsunterstützung / iPhone Simulator / Benutzer /

Edwin
quelle
2

Für macOS Catalina habe ich meine Datenbank gefunden in:

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

Um das zu bekommen applicationId, habe ich die Ordner nur nach dem Änderungsdatum sortiert, obwohl ich sicher bin, dass es einen besseren Weg gibt, dies zu tun.

Stevenspiel
quelle
1

Für reaktionsnative Benutzer, die Xcode nicht oft verwenden, können Sie einfach verwenden find. Öffnen Sie ein Terminal und suchen Sie nach dem Datenbanknamen.

$ find ~/Library/Developer -name 'myname.db'

Wenn Sie den genauen Namen nicht kennen, können Sie Platzhalter verwenden:

$ find ~/Library/Developer -name 'myname.*'

Schäferhund
quelle
0

Sie können versuchen, den folgenden Code zu verwenden

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);
Raees Madathil Valapuram
quelle
0

Gehen Sie wie folgt vor, um die Diktaturen zu öffnen, in denen sich Ihre App befindet und die Sie in xCode auf den Simulatoren erstellen:

  1. Öffne einen Finder-Windor (Smiley-Symbol)
  2. Klicken Sie dann auf GO -> Gehe zu Ordner
  3. Typ: ~ / Bibliothek / Anwendungsunterstützung / iPhone Simulator
  4. Die Verzeichnisse sind die iOS-Version der verschiedenen Simulatoren
  5. Die Unterverzeichnisse sind die Apps, die auf dem Simulator installiert werden
  6. Im Ordner "Dokumente" hat der Benutzer Inhalte generiert, die auf iCloud gesichert werden
Mike Zriel
quelle
0

Ich bin nicht mit diesem Programm verbunden, aber wenn Sie etwas davon im Finder SimPholders öffnen möchten, ist dies unglaublich einfach.

Jason
quelle