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?

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


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


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


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/

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 /


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.


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


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

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.


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]


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


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.


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)

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


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

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


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.


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


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

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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.