Où l'iPhone Simulator stocke-t-il ses données?

234

J'ai une base de données SQLite que j'utilise pour stocker des données d'application, et je pourrais faire en y jetant un œil pour déboguer un problème que j'ai - mais où le iPhone Simulator stocke-t-il généralement ses données?

Codebeef
la source

Réponses:

291

La réponse acceptée est correcte pour le SDK 3.2 - le SDK 4 remplace le dossier / User dans ce chemin par un numéro pour chacune des versions iPhone OS / iOS héritées qu'il peut simuler, donc le chemin devient:

~ / Bibliothèque / Support d'application / iPhone Simulator / [OS version] / Applications / [appGUID] /

si le SDK précédent est installé à côté, son simulateur 3.1.x continuera d'enregistrer ses données dans:

~ / Bibliothèque / Support d'application / iPhone Simulator / Utilisateur / Applications / [appGUID] /

Pour Xcode6 et iOS8

~ / Bibliothèque / Développeur / CoreSimulator / Périphériques / [DeviceID] / données / Conteneurs / Données / Application / [AppID] /

dsmudger
la source
6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert
174
Plutôt que de chercher dans le Finder pour quel GUID est le vôtre, notez la réponse de pisca46 ci-dessous: Tapez simplement po NSHomeDirectory()le débogueur. Coupez et collez dans Aller> Aller au dossier (Cmd-Shift-G).
mackworth
Je suis un peu inquiet que lorsque je lance le simulateur, il dit 8.2, mais quand je regarde dans ce dossier, le seul numéro de version que je vois est 7.1. Cela m'inquiète de ne pas regarder au mauvais endroit.
bugloaf
1
@bugloaf Voir cette question ou réponse ci
Raviprakash
4
Il est difficile de souligner à quel point cette réponse est plus simple, plus pratique, moins sujette aux erreurs et moins frustrante (comme recommandé dans le commentaire de mackworth ci-dessus). Vous pouvez simplement ajouter une ligne à NSLogcela dans vos AppDelegate« s didFinishLaunchingWithOptions:, ou vous pouvez po NSHomeDirectory()le débogueur. Dans les deux cas, copiez la chaîne et ouvrez-la dans le Finder avec Cmd+Shift+G. Cela fonctionne mieux parce que vous demandez avec une commande standard au lieu d'avoir besoin de savoir quelque chose qui change.
Benjohn
93

Il existe un autre moyen (plus rapide?) De trouver où se trouvent les données de votre application sans Terminal:

  1. Lancez l'application dans le simulateur
  2. Ouvrir le moniteur d'activité
  3. Trouvez le nom de votre application dans l'onglet CPU
  4. Double-cliquez dessus et ouvrez "Ouvrir les fichiers et les ports"

entrez la description de l'image ici

Sergey Lost
la source
1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];vous donne l'identifiant de l'appareil
oabarca
@oabarca l'identifiant que vous obtenez n'a rien à voir avec le deviceID ou appFolder du simulateur; J'utilise Xcode 11.2.1 et iOS 13.2.2
DawnSong
78

Je l'ai trouvé:

~/Library/Application Support/iPhone Simulator/User/
Codebeef
la source
16
Comment rechercher: dans le Finder, appuyez sur CMD + MAJ + G
rohan-patel
Veuillez voir la réponse mise à jour ci-dessous par dsmudger, c'est la bonne réponse pour le moment.
Tom Susel
74

iOS 8 ~ / Library / Developer / CoreSimulator / Devices / [Device ID] / data / Applications / [appGUID] / Documents /

Wagh
la source
1
Est-il possible d'obtenir l'ID de l'appareil?
msmq
2
@msmq tryxcrun instruments -s
Shazron
11
@msmq Allumez votre simulateur actuel, Matériel -> Périphérique -> Gérer les périphériques ... -> Sélectionnez votre simulateur dans la liste "SIMULATEURS". Ensuite, à droite, "Identifiant". Il s'agit de l'ID de l'appareil.
RichX
Comment trouver le [appGUID] ici?
Yang You
66

Sur Lion, le Users/[username]/Libraryest caché.

Pour afficher simplement dans le Finder, cliquez sur le menu «Aller» en haut de l'écran et maintenez enfoncée la touche «alt» pour afficher «Bibliothèque».

Cliquez sur «Bibliothèque» et vous pouvez voir votre dossier de bibliothèque précédemment masqué.

Précédemment conseillé:

Utilisation

chflags nohidden /users/[username]/library

dans un terminal pour afficher le dossier.

Rafael Moreira
la source
1
puis après cela, vous pouvez le trouver à: ~ / Bibliothèque / Support d'application / iPhone Simulator / [OS version] / Applications / [appGUID] /
Rafael Moreira
C'est une suggestion intéressante pour les utilisateurs normaux, mais il me semble que les développeurs iOS / OS X doivent accéder à la bibliothèque assez régulièrement et ne voudraient donc plus jamais la cacher. (Là encore, je suppose que beaucoup de développeurs utilisent Terminal au lieu de Finder?)
ArtOfWarfare
58

Manière la plus simple jamais.

  1. Attrapez un point d'arrêt quelque part.

  2. Entrez po NSHomeDirectory()dans la fenêtre de la console

Résultat:

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

Lal Krishna
la source
1
Si seulement je le savais plus tôt. Cela aurait dû être la bonne réponse
Ivan Cantarino
je pense que toutes les autres réponses sont également correctes. Mais cela me semble facile: -]
Lal Krishna
37

Si le simulateur est en cours d'exécution, vous pouvez obtenir le chemin d'accès au conteneur de n'importe quelle application:

xcrun simctl get_app_container booted <app bundle identifier>

Exemple de sortie:

$ 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" peut être substitué à la plupart des simctlcommandes partout où un UDID de périphérique est attendu.

Vous pouvez voir la liste des appareils avec xcrun simctl listet obtenir de l'aide sur des commandes spécifiques avec xcrun simctl help.

Mise à jour : à la demande générale de Xcode 8.3, vous pouvez désormais spécifier le type de conteneur souhaité en ajoutant "app", "data", "groups" ou un identifiant de groupe d'application.

Pour obtenir le conteneur de données:

$ xcrun simctl get_app_container booted com.example.app data
Russbishop
la source
excellent. Pas besoin d'exécuter la commande pour obtenir device_id et appId. Une étape pour tout obtenir
iamhite
Celui-ci doit être accepté, car c'est la façon la plus "stable" de faire de telles choses.
Olha
35

Avec Xcode 5, vous pouvez utiliser le code ci-dessous:

#import <Foundation/NSFileManager.h>

et:

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

Le résultat peut ressembler à ceci:

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

Où se hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhtrouve une chaîne hexadécimale identifiant votre application iOS.

Pisca46
la source
16
Cela fonctionne également dans le débogueur: po NSHomeDirectory()
mackworth
30

On dirait que Xcode 6.0 a de nouveau déplacé cet emplacement, au moins pour les simulateurs iOS 8.

~ / Bibliothèque / Développeur / CoreSimulator / Périphériques / [DeviceID] / données / Conteneurs / Données / Application / [AppID]

un loup
la source
4
dans ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / il y a aussi un fichier .plist nommé "device.plist" si vous regardez à l'intérieur, vous pouvez trouver le nom du périphérique comme iphone-6 ou iphone-5s. deviceID est très déroutant, donc je pense que vous devriez regarder à l'intérieur du fichier .plist.
EFE
1
Comment obtenir l'AppID?
Nom d'affichage
1
J'ai triché pour trouver l'ID de l'application, en utilisant 'ls -l' et en déterminant quels fichiers de l'application avaient été créés le plus récemment. Pourrait aussi fonctionner pour les autres.
Maya Webster
1
Ou dans le Finder, triez par "date de création" pour placer l'application en tête de liste.
Ammar Mujeeb
30

L'un des moyens les plus faciles de trouver où se trouve l'application dans le simulateur. Utilisateur "NSTemporaryDirectory ()"

Pas-

  1. Appliquez un point d'arrêt n'importe où dans l'application et exécutez l'application.
  2. Lorsque l'application s'arrête au point d'arrêt, tapez la commande suivante dans la console Xcode.

    po NSTemporaryDirectory ()

Voir l'image ci-dessous pour un aperçu appropriéentrez la description de l'image ici

Vous avez maintenant le chemin exact jusqu'au dossier temporaire. Vous pouvez revenir en arrière et voir tous les dossiers liés à l'application.

J'espère que cela vous aidera également. Happy Coding :)

Shubhendu
la source
1
Astuce sympa, mais pourquoi pas po NSHomeDirectory()?
Code Roadie
9

Où Xcode stocke les simulateurs dans Catalina 2019+, Xcode 11.0

Runtimes

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

Par exemple: iOS 13.0,watchOS 6.0 ci prennent de loin le plus d'espace. Chacun peut avoir jusqu'à ~ 5 Go

Dispositifs

$ open ~/Library/Developer/CoreSimulator/Devices

Par exemple: iPhone Xr,iPhone 11 Pro Max . Ce sont généralement <15 Mo chacun.

Explication

Les simulateurs sont répartis entre les temps d'exécution et les appareils. Si vous courez$ xcrun simctl list vous pouvez voir un aperçu, mais si vous voulez trouver l'emplacement physique de ces simulateurs, regardez dans les répertoires que j'ai montrés.

Il est totalement sûr de supprimer les runtimes que vous ne supportez pas. Vous pouvez les réinstaller plus tard si vous le souhaitez.

joshuakcockrell
la source
8

Faites simplement ceci:

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

Et vous obtiendrez quelque chose comme ça:

/ Users / admin / Library / Developer / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Containers / Data / Application / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Documents

Allez-y et vous verrez le dossier de documents de votre application quelle que soit la version de XCode. (Utilisez la commande "Aller au dossier ..." dans le Finder et spécifiez un chemin "~ / bibliothèque").

Version Swift pour le chemin de chaîne:

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

et l'URL du dossier:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)
LembergSun
la source
Était sur le point de publier presque la même réponse. Cette méthode a l'avantage de toujours donner le chemin correct, sur n'importe quelle version du simulateur iOS. Soit dit en passant, vous pouvez également copier la valeur de la variable url dans le débogueur, si vous ne voulez pas l'enregistrer;)
Moose
7

Sous iOS 5:

/ Users / [User Name] / Library / Application Support / iPhone Simulator / 5.0 / Applications / [AppGUID] /

Karthi
la source
6

Pour Xcode 4.6, il est stocké dans le chemin suivant ...

/ Users / [currentuser] / Library / Application Support / iPhone Simulator / 6.1 / Applications /

Pour le connaître par programme, utilisez le code suivant

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

Pour iOS 8

Pour localiser le dossier Documents , vous pouvez écrire un fichier dans le dossier Documents:

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, dans didFinishLaunchingWithOptions.

Ensuite, vous pouvez ouvrir un terminal et trouver le dossier:

$ find ~/Library -name Words.txt
ohho
la source
2

si quelqu'un rencontre toujours ce problème dans lion, il existe un excellent article avec 19 conseils différents pour afficher votre répertoire ~ / Library. retrouvez l'article de Dan Frakes ici http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

N'oubliez pas que le répertoire du simulateur est donné ci-dessous

~ / Bibliothèque / Support d'application / iPhone Simulator / Utilisateur /

Edwin
la source
2

Pour macOS Catalina, j'ai trouvé ma base de données dans:

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

Pour obtenir le applicationId, je viens de trier les dossiers par date de modification, bien que je sois sûr qu'il existe une meilleure façon de le faire.

stevenspiel
la source
1

Pour les utilisateurs natifs qui n'utilisent pas souvent Xcode, vous pouvez simplement utiliser find. Ouvrez un terminal et recherchez avec le nom de la base de données.

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

Si vous ne connaissez pas le nom exact, vous pouvez utiliser des caractères génériques:

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

chien de berger
la source
0

Vous pouvez essayer d'utiliser le code ci-dessous

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
la source
0

Pour ouvrir les dictées où se trouve votre application que vous créez dans xCode sur les simulateurs, procédez comme suit:

  1. ouvrir un windor Finder (icône de visage souriant)
  2. puis cliquez sur GO -> Go to Folder
  3. type: ~ / Bibliothèque / Support d'application / Simulateur iPhone
  4. Les répertoires sont la version iOS des différents simulateurs
  5. Les sous-répertoires sont les applications installées sur le simulateur
  6. Le dossier Documents est l'endroit où le contenu généré par l'utilisateur qui est sauvegardé sur iCloud
Mike Zriel
la source
0

Je n'ai aucune affiliation avec ce programme, mais si vous cherchez à ouvrir tout cela dans le Finder, les SimPholders le rendent incroyablement facile.

Jason
la source