Speicherort des Xcode 6 iPhone Simulator-Anwendungssupports
137
In Xcode 6 habe ich eine App, in der ich Core Data verwende, aber es gibt keinen Ordner in der Anwendungsunterstützung für den iOS 8 iPhone Simulator. Wo werden meine Dateien und die Core Data SQLite-Datenbank gespeichert?
Versuchen Sie dies . Es gibt eine App, die direkt das Dokumentverzeichnis des letzten App-Laufs öffnet.
NSRover
Ich habe eine Antwort hinzugefügt (am Ende der anderen Antworten), die zeigt, wie programmgesteuert der Pfad ermittelt wird, in dem sich die Core Data-Dateien befinden.
Dies ist im Allgemeinen korrekt, aber es scheint, dass es mehr interne Ordneränderungen gibt. Dies ist der Weg, der für mich in Xcode Beta 3 ~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
funktioniert
1
Gibt es eine Möglichkeit zu verstehen, dass Zahlen oder Brute Force die einzige Möglichkeit sind, an Daten zu gelangen?
Vir uns
89
NSLog (@ "app dir:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - druckt den vollständigen Pfad zum
vir us
2
Zum schnellen Debuggen benötigte ich eine dauerhafte Verknüpfung zum Dokumentenverzeichnis meiner App. Nach der Anwendung didFinishLaunchingWithOptions. #if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif Jetzt habe ich einen Simlink, der funktioniert, obwohl iOS8 + XCode6 die Daten-GUID meiner App bei jedem Erstellen ändert.
Seebarsch
32
Mit dem xcrun simctl listBefehl kann die Entsprechung zwischen den Simulatornamen und den Geräte-UDIDs angezeigt werden. Oder genauer gesagt der xcrun simctl list devicesBefehl.
ThomasW
36
Ich würde vorschlagen, dass Sie SimPholders verwenden , um Ihre Simulator-Dateien zu finden. Es ist ein Menüleistenelement, mit dem Sie Ihre Simulator-Apps verfolgen und direkt zu deren Ordnern und Inhalten wechseln können. Es ist toll.
Ich hatte auch Probleme mit SimPholders2 auf Yosemite, daher habe ich ein Befehlszeilenskript gestartet, mit dem Sie ein Finder-Fenster für den gewünschten Simulator und die gewünschte App finden und öffnen können. Es geht durch die Ordner und Metadatenlisten, um alle Simulatorordner und Apps aufzulisten. Wenn Sie interessiert sind, überprüfen Sie es hier
Rodrigo Lima
SimPholders2 funktioniert in Yosemite, ist aber etwas langsam. Sobald Sie auf das Symbol in der Statusleiste geklickt haben, warten Sie einige Sekunden und es sollte angezeigt werden.
Jason
Whoa, es ist großartig und die neuesten Arbeiten mit Yosemite + Xcode 6.3!
TruMan1
21
Ich fand die SimulatorManager- Anwendung sehr nützlich. Sie gelangen direkt zum Anwendungsordner der installierten Simulatoren. Ich habe es mit 7.1, 8.0 und 8.1 Simulatoren versucht.
SimulatorManager befindet sich als Symbol in der Taskleiste und bietet eine Option zum Starten bei Anmeldung.
Hinweis : Dies funktioniert nur mit Xcode 6 (in meinem Fall 6.1.1) und höher.
Amar, wie installierst du den SimulatorManager? Ich dachte, es wäre ein Plugin für Xcode, aber es ist ein Xcode-Projekt
Malena
1
Wählen Sie in der oberen Leiste: Produkt -> Archiv -> und exportieren Sie das Archiv als Mac-Anwendung, ohne es erneut zu signieren (letzte Option). Sie erhalten eine .app-Datei, die Sie wie eine normale Anwendung in Ihren Anwendungsordner legen können. ..
Heckscheibe
11
Fügen Sie den folgenden Code hinzu, um zu erfahren, wo Ihre .sqlite-Datei in AppDelegate.m gespeichert ist
Ich habe einige Zeit damit gerungen. Es wurde ein großer Schmerz, einfach zu meiner lokalen SQLite-Datenbank zu gelangen. Ich habe dieses Skript geschrieben und es zu einem Code-Snippet in XCode gemacht. Ich platziere es in meinem appDidFinishLaunching in meinem appDelegate.
//xcode 6 moves the documents dir every time. haven't found out why yet. #if DEBUG NSLog(@"caching documents dir for xcode 6. %@",[NSBundle mainBundle]);NSString*toFile =@"XCodePaths/lastBuild.txt";NSError*err =nil;[DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err];if(err)NSLog(@"%@",[err localizedDescription]);NSString*appName =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];NSString*aliasPath =[NSString stringWithFormat:@"XCodePaths/%@", appName];remove([aliasPath UTF8String]);[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil];#endif
Dadurch wird ein Simlink im Stammverzeichnis Ihres Laufwerks erstellt. (Möglicherweise müssen Sie diesen Ordner beim ersten Mal selbst erstellen und ändern, oder Sie können den Speicherort an einen anderen Ort ändern.) Dann habe ich das xcodeway- Plugin https://github.com/onmyway133/XcodeWay installiert
Ich habe es ein wenig geändert, damit ich einfach cmd + d drücken kann, und es wird ein Finder-Winder für das persistente Dokumentenverzeichnis meiner aktuellen Anwendung geöffnet. Unabhängig davon, wie oft XCode Ihren Pfad ändert, ändert es sich auf diese Weise nur beim Ausführen und aktualisiert Ihren Simlink sofort bei jedem Ausführen.
Der Simulator legt die Datei in ~ / Library / Developer / CoreSimulator / Devices / ... ab, aber der Pfad nach / Devices ist für alle unterschiedlich.
Verwenden Sie diese praktische Methode. Es gibt den Pfad des temporären Verzeichnisses für den aktuellen Benutzer zurück und akzeptiert kein Argument.
NSString*NSTemporaryDirectory(void);
In meiner ViewController-Klasse füge ich diese Zeile normalerweise in mein viewDidLoad ein, nur als Referenz, wenn ich meine gespeicherte CoreData-Datei abrufen muss. Hoffe das hilft.
NSLog(@"FILE PATH :%@",NSTemporaryDirectory());
(Hinweis: Um zum Pfad zu gelangen, klicken Sie im Finder-Menü auf Los und geben Sie ~ / Library ein, um das versteckte Verzeichnis zu öffnen. Klicken Sie dann im Finder-Fenster auf den Pfad, der auf Ihrer Konsole angezeigt wird.)
Dieser Speicherort hat sich erneut geändert. Wenn Sie Swift verwenden, können Sie anhand dieses Speicherorts herausfinden, wo sich der Ordner befindet (dieser wird aus der von Apple für Sie erstellten Datei AppDelegate.swift kopiert. Wenn er auf Ihrem Computer nicht funktioniert, suchen Sie in Diese Datei für die richtige Syntax funktioniert bei mir mit Xcode 6.1 und iOS 8 Simulator.
let urls =NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains:.UserDomainMask)
println("Possible sqlite file: \(urls)")
Hier werden sie als Verzeichnisse mit UUID-Namen aufgelistet. Verwenden Sie die Sortierung nach 'Änderungsdatum', um das neueste zu finden. Innen navigieren zu:
/data/Containers/Data/Application/
Hier erhalten Sie eine Liste aller Anwendungen auf diesem Gerät. Sie können dies erneut sortieren, um die neueste App zu erhalten.
HINWEIS: Xcode ändert den Verzeichnisnamen jedes Mal, wenn Sie die App ausführen. Verlassen Sie sich daher nicht darauf, Alias / Verknüpfungen auf dem Desktop zu erstellen.
Der einfachste Weg ist es, die App nutzen hier , was alles automatisch tut.
In Swift 4 oder Swift 5 können Sie verwenden NSHomeDirectory().
Der einfachste Weg in Xcode 10 (oder Xcode 11) besteht darin, die App anzuhalten (z. B. wenn sie einen Haltepunkt erreicht) und diese Zeile in der Debugger-Konsole auszuführen:
po NSHomeDirectory()
po steht für Druckobjekt und druckt die meisten Dinge
Mit Swift 4 können Sie den folgenden Code verwenden, um das Home-Verzeichnis Ihrer App abzurufen. Dort befindet sich das Dokumentverzeichnis Ihrer App.
print(NSHomeDirectory())
Ich denke, Sie wissen bereits, dass das Home-Verzeichnis Ihrer App geändert werden kann. Wenn Sie also Ihrer Codebasis keinen zusätzlichen Code hinzufügen möchten, ist SimPholder ein nützliches Tool für Sie.
Darüber hinaus fragen Sie sich vielleicht, ob es ein Tool gibt, mit dem Sie Zeit sparen können, wenn Sie die SQLite-Datenbank jedes Mal schließen und erneut öffnen, nachdem das Home-Verzeichnis Ihrer App geändert wurde. Und die Antwort lautet: Ja, ein Tool, das ich kenne, ist SQLiteFlow . Aus dem Dokument geht hervor, dass:
Behandeln Sie Datenbankdateinamen oder Verzeichnisänderungen. Dadurch kann SQLiteFlow mit Ihrer SQLite-Datenbank im iOS-Simulator kompatibel arbeiten.
Hier ist der sh für den zuletzt verwendeten Simulator und die zuletzt verwendete Anwendung. Führen Sie einfach sh aus und kopieren Sie den gedruckten Text und fügen Sie den Befehl zum Anzeigen im Finder ein und führen Sie ihn aus.
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication
Antworten:
Das Simulatorverzeichnis wurde mit Xcode 6 Beta nach ...
Das Durchsuchen des Verzeichnisses in den Ordner "Dokumente" Ihrer App ist etwas schwieriger, z.
quelle
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif
Jetzt habe ich einen Simlink, der funktioniert, obwohl iOS8 + XCode6 die Daten-GUID meiner App bei jedem Erstellen ändert.xcrun simctl list
Befehl kann die Entsprechung zwischen den Simulatornamen und den Geräte-UDIDs angezeigt werden. Oder genauer gesagt derxcrun simctl list devices
Befehl.Ich würde vorschlagen, dass Sie SimPholders verwenden , um Ihre Simulator-Dateien zu finden. Es ist ein Menüleistenelement, mit dem Sie Ihre Simulator-Apps verfolgen und direkt zu deren Ordnern und Inhalten wechseln können. Es ist toll.
quelle
Ich fand die SimulatorManager- Anwendung sehr nützlich. Sie gelangen direkt zum Anwendungsordner der installierten Simulatoren. Ich habe es mit 7.1, 8.0 und 8.1 Simulatoren versucht.
SimulatorManager befindet sich als Symbol in der Taskleiste und bietet eine Option zum Starten bei Anmeldung.
Hinweis : Dies funktioniert nur mit Xcode 6 (in meinem Fall 6.1.1) und höher.
Hoffentlich hilft das!
quelle
Fügen Sie den folgenden Code hinzu, um zu erfahren, wo Ihre .sqlite-Datei in AppDelegate.m gespeichert ist
Rufen Sie diese Methode jetzt in AppDelegate.m auf
quelle
Das hat bei mir schnell geklappt:
quelle
Ich habe einige Zeit damit gerungen. Es wurde ein großer Schmerz, einfach zu meiner lokalen SQLite-Datenbank zu gelangen. Ich habe dieses Skript geschrieben und es zu einem Code-Snippet in XCode gemacht. Ich platziere es in meinem appDidFinishLaunching in meinem appDelegate.
Dadurch wird ein Simlink im Stammverzeichnis Ihres Laufwerks erstellt. (Möglicherweise müssen Sie diesen Ordner beim ersten Mal selbst erstellen und ändern, oder Sie können den Speicherort an einen anderen Ort ändern.) Dann habe ich das xcodeway- Plugin https://github.com/onmyway133/XcodeWay installiert
Ich habe es ein wenig geändert, damit ich einfach cmd + d drücken kann, und es wird ein Finder-Winder für das persistente Dokumentenverzeichnis meiner aktuellen Anwendung geöffnet. Unabhängig davon, wie oft XCode Ihren Pfad ändert, ändert es sich auf diese Weise nur beim Ausführen und aktualisiert Ihren Simlink sofort bei jedem Ausführen.
Ich hoffe das ist nützlich für andere!
quelle
Öffnen Sie den Finder> Bibliothek> Entwickler> CoreSimulator> Geräte
Dann ändern Sie das Arrangement-Symbol im Finder und wählen Sie das Datum des Hinzufügens
Wählen Sie Ihre App> Daten> Container> Daten> Anwendungen>
Wählen Sie Ihre App> Dokumente> Hier ist Ihre Datenbankdatei
In meinem Fall:
Andernfalls machen Sie Folgendes:
- Es wird der vollständige Pfad zum Datenordner gedruckt.
Schnell:
quelle
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
Verwenden Sie den Finder -> gehen Sie zum Ordner und geben Sie den angegebenen Basispfad ein, um zu den Anwendungsordnern zu gelangen
quelle
Der Simulator legt die Datei in ~ / Library / Developer / CoreSimulator / Devices / ... ab, aber der Pfad nach / Devices ist für alle unterschiedlich.
Verwenden Sie diese praktische Methode. Es gibt den Pfad des temporären Verzeichnisses für den aktuellen Benutzer zurück und akzeptiert kein Argument.
In meiner ViewController-Klasse füge ich diese Zeile normalerweise in mein viewDidLoad ein, nur als Referenz, wenn ich meine gespeicherte CoreData-Datei abrufen muss. Hoffe das hilft.
(Hinweis: Um zum Pfad zu gelangen, klicken Sie im Finder-Menü auf Los und geben Sie ~ / Library ein, um das versteckte Verzeichnis zu öffnen. Klicken Sie dann im Finder-Fenster auf den Pfad, der auf Ihrer Konsole angezeigt wird.)
quelle
Dieser Speicherort hat sich erneut geändert. Wenn Sie Swift verwenden, können Sie anhand dieses Speicherorts herausfinden, wo sich der Ordner befindet (dieser wird aus der von Apple für Sie erstellten Datei AppDelegate.swift kopiert. Wenn er auf Ihrem Computer nicht funktioniert, suchen Sie in Diese Datei für die richtige Syntax funktioniert bei mir mit Xcode 6.1 und iOS 8 Simulator.
quelle
Die Simulatoren befinden sich unter:
~/Library/Developer/CoreSimulator/
Hier werden sie als Verzeichnisse mit UUID-Namen aufgelistet. Verwenden Sie die Sortierung nach 'Änderungsdatum', um das neueste zu finden. Innen navigieren zu:
/data/Containers/Data/Application/
Hier erhalten Sie eine Liste aller Anwendungen auf diesem Gerät. Sie können dies erneut sortieren, um die neueste App zu erhalten.
HINWEIS: Xcode ändert den Verzeichnisnamen jedes Mal, wenn Sie die App ausführen. Verlassen Sie sich daher nicht darauf, Alias / Verknüpfungen auf dem Desktop zu erstellen.
Der einfachste Weg ist es, die App nutzen hier , was alles automatisch tut.
quelle
Ich habe dieses Skript erstellt, das die neueste App für jeden Simulator komprimiert und auf den Desktop komprimiert.
https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c
quelle
In Swift 4 oder Swift 5 können Sie verwenden
NSHomeDirectory()
.Der einfachste Weg in Xcode 10 (oder Xcode 11) besteht darin, die App anzuhalten (z. B. wenn sie einen Haltepunkt erreicht) und diese Zeile in der Debugger-Konsole auszuführen:
po
steht für Druckobjekt und druckt die meisten Dingequelle
quelle
Mit Swift 4 können Sie den folgenden Code verwenden, um das Home-Verzeichnis Ihrer App abzurufen. Dort befindet sich das Dokumentverzeichnis Ihrer App.
print(NSHomeDirectory())
Ich denke, Sie wissen bereits, dass das Home-Verzeichnis Ihrer App geändert werden kann. Wenn Sie also Ihrer Codebasis keinen zusätzlichen Code hinzufügen möchten, ist SimPholder ein nützliches Tool für Sie.
Darüber hinaus fragen Sie sich vielleicht, ob es ein Tool gibt, mit dem Sie Zeit sparen können, wenn Sie die SQLite-Datenbank jedes Mal schließen und erneut öffnen, nachdem das Home-Verzeichnis Ihrer App geändert wurde. Und die Antwort lautet: Ja, ein Tool, das ich kenne, ist SQLiteFlow . Aus dem Dokument geht hervor, dass:
quelle
Hier ist der sh für den zuletzt verwendeten Simulator und die zuletzt verwendete Anwendung. Führen Sie einfach sh aus und kopieren Sie den gedruckten Text und fügen Sie den Befehl zum Anzeigen im Finder ein und führen Sie ihn aus.
quelle