web-dev-qa-db-fra.com

Xcode 6 iPhone Simulator Application Support location

Dans Xcode 6, j'ai une application pour laquelle j'utilise Core Data, mais il n'y a pas de dossier dans Application Support pour iOS 8 iPhone Simulator. Où sont stockés mes fichiers et la base de données sqlite Core Data?

136
Henry Glendening

Le répertoire du simulateur a été déplacé avec Xcode 6 beta vers ...

~/Library/Developer/CoreSimulator

La navigation du répertoire dans le dossier Documents de votre application est un peu plus ardue, par exemple,

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite
294
Scott Gardner

Je suggérerais que vous utilisiez SimPholders pour trouver vos fichiers de simulateur. Il s'agit d'un élément de la barre de menus qui suit vos applications de simulateur et vous permet d'accéder directement à leurs dossiers et à leur contenu. C'est génial.

36
ucangetit

J'ai trouvé l'application SimulatorManager très utile. Il vous emmène directement au dossier de l'application des simulateurs installés. J'ai essayé avec des simulateurs 7.1, 8.0 et 8.1.

SimulatorManager se présente sous la forme d'une icône dans la barre d'état système et offre l'option "Lancer à la connexion".

enter image description here

Note : Ceci ne fonctionne qu'avec Xcode 6 (6.1.1 dans mon cas) et supérieur.

J'espère que ça t'as aidé!

21
Amar

Pour savoir où votre fichier .sqlite est stocké dans votre AppDelegate.m, ajoutez le code suivant

- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory      inDomains:NSUserDomainMask] lastObject]);

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory     inDomains:NSUserDomainMask] lastObject];
 }

maintenant appeler cette méthode dans AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  //call here
   [self applicationDocumentsDirectory];

}
11
himan

Cela a fonctionné pour moi à Swift:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
6
Nate Uni

Ouvrez le Finder> Bibliothèque> Développeur> CoreSimulator> Périphériques

Cliquez ensuite sur l'icône Modifier l'arrangement dans le Finder, puis sélectionnez Date d'ajout.

Sélectionnez votre application> Données> Conteneur> Données> Applications>

choisissez votre application> Documents> voici votre fichier db

Dans mon cas:

/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite

Sinon, fais ceci:

NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 

- Il imprimera le chemin complet du dossier de données.

Rapide:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
3
Nagarjun

J'ai lutté avec cela pendant un certain temps. Il est devenu extrêmement pénible de se rendre simplement dans ma base de données sqlite locale. J'ai écrit ce script et en ai fait un extrait de code dans XCode. Je le place dans mon appDidFinishLaunching dans mon 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

Cela crée un lien virtuel à la racine de votre lecteur. (Vous devrez peut-être créer ce dossier vous-même la première fois et le modifier, ou vous pouvez changer l'emplacement à un autre endroit) Puis j'ai installé le xcodeway plugin https://github.com/onmyway133/XcodeWay

Je l'ai modifié un peu pour qu'il me permette simplement d'appuyer sur cmd + d et que cela ouvre un enrouleur du Finder dans le répertoire Documents persistant de mon application actuelle. De cette façon, peu importe le nombre de fois où XCode modifie votre chemin, il ne change que lors de l'exécution et met immédiatement votre lien sim à jour à chaque exécution.

J'espère que c'est utile pour les autres!

3
seabass

Utiliser le Finder -> aller au dossier et entrer un chemin de base donné pour atteindre les dossiers de l'application

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSLog(@"%@",basePath);
2
user1039695

Cet emplacement a, une fois de plus, changé. Si vous utilisez Swift, utilisez-le pour savoir où se trouve le dossier (copié à partir du fichier AppDelegate.Swift créé par Apple pour vous. Si cela ne fonctionne pas sur votre machine, recherchez dans le fichier la syntaxe correcte, cela fonctionne sur la mienne à l'aide du simulateur Xcode 6.1 et iOS 8):

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")
1
kakubei

Le simulateur place le fichier dans ~/Bibliothèque/Developer/CoreSimulator/Devices/... mais le chemin après/Devices est différent pour tout le monde.

Utilisez cette méthode pratique. Il renvoie le chemin du répertoire temporaire pour l'utilisateur actuel et ne prend aucun argument.

NSString * NSTemporaryDirectory ( void );

Ainsi, dans ma classe ViewController, je mets généralement cette ligne dans mon viewDidLoad uniquement pour une référence lorsque je dois récupérer mon fichier stocké CoreData. J'espère que cela t'aides.

  NSLog(@"FILE PATH :%@", NSTemporaryDirectory());

(Remarque: pour aller au chemin, dans le menu Finder, cliquez sur Go et tapez ~/Library pour ouvrir le répertoire caché, puis dans la fenêtre du Finder, cliquez sur le chemin indiqué sur votre console.)

1
Ohmy

Les simulateurs sont situés sous:

~/Library/Developer/CoreSimulator/

Ici, ils sont répertoriés en tant que répertoires avec des noms UUID. Utilisez Trier par 'Date de modification' pour trouver la dernière. À l'intérieur, naviguez vers:

/data/Containers/Data/Application/

Ici, vous obtiendrez une liste de toutes les applications de ce périphérique. Vous pouvez à nouveau trier ceci pour obtenir la dernière application.

REMARQUE: Xcode modifie le nom du répertoire à chaque fois que vous exécutez l'application. Ne vous fiez donc pas à la création d'alias/de raccourcis sur le bureau.

Le moyen le plus simple est d'utiliser l'application ici , qui fait tout automatiquement.

1
NSRover

J'ai créé ce script qui va compresser la dernière application créée pour n'importe quel simulateur et le zipper sur le bureau.

https://Gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c

#!/bin/bash

DESTINATION_DIR="$HOME/Desktop"
APP_PATH=$(find ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/*.app -type d -maxdepth 0 -print0 | xargs -0 ls -td | head -n1)
APP_DIRNAME=$(dirname "$APP_PATH")
APP_BASENAME=$(basename "$APP_PATH")
FILE_NAME="${APP_BASENAME%.*}"

cd "$APP_DIRNAME"
Zip -qr "$DESTINATION_DIR/$FILE_NAME.Zip" "$APP_BASENAME"
1
Andy
 1.   NSTemporaryDirectory() gives this:

    /Users/spokaneDude/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/199B1ACA-A80B-44BD-8E5E-DDF3DCF0D8D9/tmp

 2. remove "/tmp" replacing it with "/Library/Application Support/<app name>/"  --> is where the .sqlite files reside
0
SpokaneDude

Dans Swift 4 ou Swift 5, vous pouvez utiliser NSHomeDirectory().

La méthode la plus simple dans Xcode 10 (ou Xcode 11) consiste à mettre votre application en pause (comme si elle atteignait un point d'arrêt) et à exécuter cette ligne dans la console du débogueur:

po NSHomeDirectory()

po signifie objet à imprimer et imprime la plupart des choses

0
exp
  1. Avec Swift 4, vous pouvez utiliser le code ci-dessous pour obtenir le répertoire de base de votre application. Le répertoire de documents de votre application est là.

    print(NSHomeDirectory())

  2. Je pense que vous savez déjà que le répertoire de base de votre application est modifiable, donc si vous ne souhaitez pas ajouter de code supplémentaire à votre base de code, SimPholder est un outil pratique de Nice.

  3. Et plus encore, vous pouvez vous demander s'il existe un outil qui peut vous aider à gagner du temps en fermant et en rouvrant la même base de données SQLite chaque fois que le répertoire de base de votre application a été modifié. Et la réponse est oui, un outil que je connais est SQLiteFlow . À partir de ce document, il est dit que:

    Gérer les modifications de nom de fichier ou de répertoire de la base de données. Cela permet à SQLiteFlow de fonctionner correctement avec votre base de données SQLite dans un simulateur iOS.

0
Tim

Voici le sh pour le dernier simulateur et l’application utilisés. Il suffit d’exécuter sh et de copier le texte imprimé, puis de coller et exécuter la commande d’affichage dans le Finder.

#!/bin/zsh

lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`

echo $lastUsedSimulatorAndApplication
0
zapdroid