Dove memorizza i suoi dati iPhone Simulator?


234

Ho un DB SQLite che sto usando per archiviare i dati delle app e potrei fare uno sguardo al suo interno per eseguire il debug di un problema che sto riscontrando, ma dove l'iPhone Simulator memorizza i suoi dati, in genere?

Risposte:


291

La risposta accettata è corretta per SDK 3.2 - SDK 4 sostituisce la cartella / Utente in quel percorso con un numero per ciascuna delle versioni legacy di iPhone OS / iOS che può simulare, quindi il percorso diventa:

~ / Libreria / Supporto applicazioni / Simulatore iPhone / [Versione SO] / Applicazioni / [appGUID] /

se hai l'SDK precedente installato a fianco, il suo simulatore 3.1.x continuerà a salvare i suoi dati in:

~ / Libreria / Supporto applicazioni / Simulatore iPhone / Utente / Applicazioni / [appGUID] /

Per Xcode6 e iOS8

~ / Library / Developer / CoreSimulator / dispositivi / [DeviceID] / dati / Contenitori / dati / Applicazioni / [AppID] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert,

174
Invece di cercare nel finder di cui il GUID è tuo, nota la risposta di pisca46 di seguito: digita semplicemente po NSHomeDirectory()il debugger. Taglia e incolla in Vai> Vai a cartella (Cmd-Shift-G).
Mackworth,

Sono un po 'preoccupato che quando lancio il simulatore dice 8.2, ma quando guardo in questa cartella, l'unico numero di versione che vedo è 7.1. Questo mi fa preoccupare che sto guardando nel posto sbagliato.
bugloaf,


4
È difficile sottolineare quanto sia più semplice, più conveniente, meno soggetta a errori e meno frustrante questa risposta (come raccomandato nel commento di Mackworth sopra). Si può semplicemente aggiungere una riga al NSLogpresente nel vostro AppDelegate's didFinishLaunchingWithOptions:, oppure è possibile po NSHomeDirectory()dal debugger. In entrambi i casi, copia la stringa e aprila nel finder con Cmd+Shift+G. Funziona meglio perché stai chiedendo con un comando standard invece di dover sapere qualcosa che cambia.
Benjohn,

93

Esiste un altro modo (più veloce?) Per trovare dove si trovano i dati della tua app senza Terminale:

  1. Avvia l'app nel simulatore
  2. Apri Activity Monitor
  3. Trova il nome della tua app nella scheda CPU
  4. Fare doppio clic su di esso e aprire "Apri file e porte"

inserisci qui la descrizione dell'immagine


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];ti dà l'identificatore del dispositivo
oabarca,

@oabarca l'identificatore che ottieni non ha nulla a che fare con il deviceID o l'appFolder del simulatore; Sto usando Xcode 11.2.1 e iOS 13.2.2
DawnSong

78

Trovato:

~/Library/Application Support/iPhone Simulator/User/

16
Come cercare: In Finder premi CMD + MAIUSC + G
rohan-patel,

Si prega di vedere la risposta aggiornata di seguito da dsmudger, è la risposta corretta al momento.
Tom Susel,

74

iOS 8 ~ / Libreria / Developer / CoreSimulator / Dispositivi / [ID dispositivo] / dati / Applicazioni / [appGUID] / Documenti /


1
Qualche modo per ottenere l'ID dispositivo?
msmq

2
@msmq tryxcrun instruments -s
Shazron

11
@msmq Attiva il simulatore corrente, Hardware -> Dispositivo -> Gestisci dispositivi ... -> Seleziona il tuo simulatore nell'elenco "SIMULATORI". Quindi a destra è "Identificatore". Questo è ID dispositivo.
RichX,

Come trovare [appGUID] qui?
Yang,

66

Su Lion Users/[username]/Libraryè nascosto.

Per visualizzare semplicemente in Finder, fai clic sul menu "Vai" nella parte superiore dello schermo e tieni premuto il tasto "alt" per visualizzare "Libreria".

Fai clic su "Libreria" e puoi vedere la cartella della libreria precedentemente nascosta.

Precedentemente consigliato:

Uso

chflags nohidden /users/[username]/library

in un terminale per visualizzare la cartella.


1
poi puoi trovarlo su: ~ / Libreria / Supporto applicazioni / Simulatore iPhone / [Versione sistema operativo] / Applicazioni / [appGUID] /
Rafael Moreira,

Questo è un suggerimento interessante per gli utenti normali, ma mi sembra che gli sviluppatori di iOS / OS X debbano accedere alla libreria su una base abbastanza regolare e quindi non la vorranno mai più nascosta. (Poi di nuovo, immagino che molti sviluppatori utilizzino Terminal invece di Finder?)
ArtOfWarfare l'

58

Il modo più semplice di sempre.

  1. Cattura un punto di interruzione da qualche parte.

  2. Entra po NSHomeDirectory()nella finestra della console

Risultato:

(lldb) po NSHomeDirectory () / Users / usernam / Library / Developer / CoreSimulator / Devices / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Containers / Data / Application / 395818BB-6D0F-499F-AAFE-068A783D9753


1
Se lo sapessi solo prima. Questa avrebbe dovuto essere la risposta corretta
Ivan Cantarino,

penso che anche tutte le altre risposte siano corrette. Ma questo sembra essere facile per me: -]
Lal Krishna

37

Se il simulatore è in esecuzione, puoi ottenere il percorso al contenitore di qualsiasi app:

xcrun simctl get_app_container booted <app bundle identifier>

Esempio di output:

$ 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

"booted" può essere sostituito alla maggior parte dei simctlcomandi ovunque sia previsto un UDID del dispositivo.

Puoi visualizzare l'elenco dei dispositivi con xcrun simctl liste ottenere assistenza su comandi specifici con xcrun simctl help.

Aggiornamento : su richiesta popolare in Xcode 8.3 è ora possibile specificare il tipo di contenitore desiderato aggiungendo "app", "dati", "gruppi" o un identificatore del gruppo di app.

Per ottenere il contenitore di dati:

$ xcrun simctl get_app_container booted com.example.app data

eccellente. Non è necessario eseguire il comando per ottenere device_id e appId. Un passo per ottenere tutto
iamhite

Questo dovrebbe essere accettato, perché è il modo più "stabile" per fare queste cose.
Olha,

35

Con Xcode 5 è possibile utilizzare il codice seguente:

#import <Foundation/NSFileManager.h>

e:

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

Il risultato potrebbe apparire come:

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

Dov'è hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhuna stringa esadecimale che identifica la tua app iOS.


16
Questo funziona anche nel debugger: po NSHomeDirectory()
mackworth,

30

Sembra che Xcode 6.0 abbia spostato di nuovo questa posizione, almeno per i simulatori di iOS 8.

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / dati / Contenitori / dati / Applicazioni / [AppID]


4
in ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / c'è anche un file .plist chiamato "device.plist" se guardi dentro puoi scoprire il nome del dispositivo come iphone-6 o iphone-5s. deviceID è molto confuso, quindi penso che dovresti guardare all'interno del file .plist.
EFE,

1
Come ottenere l'AppID?
Visualizza nome

1
Ho imbrogliato per trovare l'id dell'app, usando 'ls -l' e capendo quali file dell'app erano stati creati più di recente. Potrebbe funzionare anche per gli altri.
Maya Webster,

1
O in finder ordina per "data di creazione" per ottenere l'app in cima all'elenco.
Ammar Mujeeb,

30

Uno dei modi più semplici per trovare la posizione dell'app all'interno del simulatore. Utente "NSTemporaryDirectory ()"

Steps-

  1. Applica il punto di interruzione in qualsiasi punto dell'app ed esegui l'app.
  2. Quando l'app si ferma al punto di interruzione, digitare il comando seguente nella console Xcode.

    po NSTemporaryDirectory ()

Vedi l'immagine sotto per una visione correttainserisci qui la descrizione dell'immagine

Ora hai il percorso esatto fino alla cartella temporanea. Puoi tornare indietro e vedere tutte le cartelle relative all'app.

Spero che questo aiuti anche. Happy Coding :)


1
Suggerimento interessante, ma perché no po NSHomeDirectory()?
Codice Roadie,

9

Dove Xcode memorizza i simulatori in Catalina 2019+, Xcode 11.0

Tempi di esecuzione

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

Ad esempio: iOS 13.0, watchOS 6.0Queste prendono la maggior parte dello spazio, di gran lunga. Ognuno può contenere fino a ~ 5 GB

dispositivi

$ open ~/Library/Developer/CoreSimulator/Devices

Ad esempio: iPhone Xr, iPhone 11 Pro Max. Di solito sono <15 mb ciascuno.

Spiegazione

I simulatori sono suddivisi tra runtime e dispositivi. Se corri $ xcrun simctl listpuoi vedere una panoramica, ma se vuoi trovare la posizione fisica di questi simulatori, guarda in queste directory che ho mostrato.

È assolutamente sicuro eliminare i runtime che non supportate. Puoi reinstallarli in seguito, se lo desideri.


8

Basta fare questo:

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

E otterrai qualcosa del genere:

/ Users / admin / Library / Developer / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / dati / Contenitori / dati / applicazioni / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Documenti

Vai lì e vedrai la cartella documenti della tua app indipendentemente dalla versione di XCode. (Usa il comando "Vai alla cartella ..." nel Finder e specifica un percorso "~ / library").

Versione rapida per percorso stringa:

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

e URL della cartella:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)

Stava per pubblicare quasi la stessa risposta. Questo metodo ha il vantaggio di fornire sempre il percorso corretto, su qualsiasi versione del simulatore iOS. A proposito, puoi anche copiare il valore della variabile url nel debugger, se non vuoi registrarlo;)
Moose

7

In iOS 5:

/ Utenti / [Nome utente] / Libreria / Supporto applicazioni / Simulatore iPhone / 5.0 / Applicazioni / [AppGUID] /


6

Per Xcode 4.6 viene memorizzato nel seguente percorso ...

/ Utenti / [currentuser] / Libreria / Supporto applicazioni / Simulatore iPhone / 6.1 / Applicazioni /

Per conoscerlo a livello di codice, utilizzare il seguente codice

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);

2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect,

4

Per iOS 8

Per individuare la cartella Documenti , è possibile scrivere un file nella cartella Documenti:

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

dire, in didFinishLaunchingWithOptions.

Quindi puoi aprire un Terminale e trovare la cartella:

$ find ~/Library -name Words.txt


2

Per macOS Catalina, ho trovato il mio db in:

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

Per ottenere il applicationId, ho appena ordinato le cartelle per data di modifica, anche se sono sicuro che c'è un modo migliore per farlo.


1

Per gli utenti nativi che non usano Xcode spesso, puoi semplicemente usare find . Aprire un terminale e cercare con il nome del database.

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

Se non conosci il nome esatto puoi utilizzare i caratteri jolly:

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


0

Puoi provare a usare il codice qui sotto

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

Per aprire i dittori in cui si trova la tua app che hai creato in xCode sui simulatori, procedi come segue:

  1. aprire un windor Finder (icona faccina sorridente)
  2. quindi fai clic su GO -> Vai alla cartella
  3. digitare: ~ / Library / Application Support / iPhone Simulator
  4. Le directory sono la versione iOS dei diversi simulatori
  5. Le sottodirectory sono le app installate sul simulatore
  6. La cartella Documenti è dove l'utente ha generato il contenuto che ottiene il backup su iCloud

0

Non ho alcuna affiliazione con questo programma, ma se stai cercando di aprire qualcosa di tutto questo nel Finder, SimPholders lo rende incredibilmente facile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.