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?

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] /


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


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


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/

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 /


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.


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


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

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?


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]


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


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.


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)

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] /


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]);

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


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.


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.*'


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

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

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.