Chemin du répertoire du document de Xcode Device Simulator

89

Sous iOS 7, le répertoire des documents des simulateurs iOS se trouve dans:

/Users/Sabo/Library/Application Support/iPhone Simulator/

Cependant, dans iOS 8 Beta Simulator , je ne trouve pas le répertoire correspondant pour iOS 8 dans le répertoire ci-dessus.

Où est le chemin du répertoire des documents pour le simulateur iOS 8?

entrez la description de l'image ici

Poing de feu
la source
Essayez ceci . Il existe une application qui ouvre directement le répertoire Documents de la dernière exécution de l'application.
NSRover
essayez ce lien stackoverflow.com/questions/24133022/…
Tunvir Rahman Tusher
Si vous ne trouvez pas votre dossier de bibliothèque, il est probablement masqué. Taper cette commande dans le terminal l'affichera: chflags nohidden ~ / Library
simon_smiley
Si vous aimez le plugin Xcode, essayez github.com/onmyway133/XcodeWay , un plugin Xcode qui peut naviguer vers votre dossier de simulateur, et bien d'autres endroits
onmyway133

Réponses:

155

sur mon ordinateur, le chemin est:

~/Library/Developer/CoreSimulator/Devices/1A8DF360-B0A6-4815-95F3-68A6AB0BCC78/data/Container/Data/Application/

REMARQUE: ces identifiants longs (c.-à-d. UDID) sont probablement différents sur votre ordinateur.

holex
la source
1
Si votre application utilise CoreData, il peut y avoir un moyen plus simple de rechercher l'emplacement du dossier: stackoverflow.com/a/25937606/1103584
DiscDev
12
Non, c'est incorrect. Il n'y a aucune distinction entre les projets ObjC et les projets Swift. Ce sont des UDID (Unique Device IDentifiers) et vous pouvez voir le vôtre en exécutant 'xcrun simctl list'
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, correct ou non, c'est ainsi que le projet Swift et un ObjC ont été copiés sur mon ordinateur. Je n'ai pas besoin de mentionner que les deux ont été compilés sur simulateur uniquement (c'était la question d'origine). si le Xcode fait la différence entre les UDID pour différentes langues et que vous pensez qu'il n'est pas correct, vous devrez peut-être le signaler à Apple.
holex
7
Holex, je dis que votre déclaration est incorrecte, pas que la conception est incorrecte (notez que je suis en fait le type chez Apple qui a conçu CoreSimulator, donc je serais probablement la première personne à corriger quelque chose qui, à mon avis, est faux). Les UDID correspondent à des appareils séparés. La seule raison pour laquelle vos projets swift et objc utiliseraient des UDID différents est parce que vous avez déployé vos projets sur différents simulateurs (par exemple: pour l'un, vous avez déployé sur iPhone 5s et l'autre que vous avez déployé sur iPhone 6).
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, vous êtes les bienvenus pour corriger ma réponse à tout moment, si vous vous sentez suffisamment en confiance.
holex
75

NSLogsous le code quelque part dans "AppDelegate", exécutez votre projet et suivez le chemin. Il vous sera facile d'accéder aux documents plutôt que de rechercher au hasard dans "~ / Library / Developer / CoreSimulator / Devices /"

Objectif c

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

Swift
Si vous utilisez Swift 1.2, utilisez le code ci-dessous qui ne sortira qu'en développement lors de l'utilisation du simulateur à cause du #if #endifbloc:

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

Copiez votre chemin depuis "/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ..." allez dans " Finder " puis " Go to Folder " ou command+ shift+ get collez votre chemin, laissez le mac vous emmener à votre répertoire des documents :)

Ankur
la source
simple et efficace!
loretoparisi
43

Écrivez simplement le code ci-dessous dans AppDelegate -> didFinishLaunchingWithOptions
Objective C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 


Swift 2.X

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

Swift 3.X

#if arch(i386) || arch(x86_64)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Swift 4.2

#if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Output
/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A / data / Containers / Data / Application / 25174F64-7130-4B91-BC41-AC74257CCC6E / Documents

Copiez votre chemin depuis "/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ..." allez dans "Finder" puis "Go to Folder" ou commandez + shift + g et collez votre chemin , laissez le mac vous emmener dans votre répertoire de documents

Mitul Marsoniya
la source
Comment allez-vous savoir dans quel dossier votre application est contenue? Il y a trop de répertoires, dois-je rechercher chacun d'entre eux?
KarenAnne
votre ans est entendu> stackoverflow.com/questions/24133022/…
Mitul Marsoniya
il s'agit d'un chemin d'accès codé en dur vers votre propre simulateur. Cela ne fonctionnera pour personne d'autre. En fait, ce chemin changera également pour vous une fois que vous exécuterez à nouveau le simulateur.
NSRover
#if TARGET_IPHONE_SIMULATOR // où êtes-vous? NSLog (@ "Répertoire de documents:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya
16

Je recommande une belle application utilitaire appelée SimPholders qui facilite la recherche des fichiers et des dossiers lors du développement de votre application iOS. Il a une nouvelle version pour fonctionner avec les nouveaux simulateurs appelés SimPholders2. Il peut être trouvé sur simpholders.com

JDibble
la source
Ce serait une application cool maintenant que iOS8 Simulator est enterré dans l'obscurité du dossier, mais cette application n'a pas été mise à jour pour prendre en charge iOS8.
wibobm
@wibobm. SimPholders2 prend certainement en charge iOS 8.0 et iOS 8.1
JDibble
OMG. J'ai dû être totalement aveugle. Je vous remercie!
wibobm
16

Malgré le fait qu'il existe de nombreuses réponses, aucune d'entre elles ne permet de comprendre comment la structure des dossiers des simulateurs iOS 8.3 a changé et ne fournit pas un moyen rapide de trouver les données de l'application (dossier Documents).

Depuis iOS 8, le (s) dossier (s) de stockage de données d'une application sont séparés des fichiers exécutables de l'application tandis que iOS 7 et les versions antérieures ont la même structure de dossiers, la seule différence étant le fait que tous les simulateurs (types et versions différents) sont maintenant dans un, grand dossier.

Ainsi, le chemin vers un simulateur iOS 8,7,6 est le suivant:

~/Library/Developer/CoreSimulator/Devices

Chaque simulateur est désormais contenu dans un dossier nommé avec un identifiant unique qui change à chaque réinitialisation d'un simulateur.

Vous pouvez trouver le Identifierpour chacun de vos appareils et simulateurs en allant à Xcode > Window > Devices(les 3 ou 4 premiers caractères de l'identifiant sont plus que suffisants à retenir).

Pour trouver celui sur lequel vous avez installé votre (vos) application (s), jetez un œil à votre Run scheme > devices(écran 2).

écran 1

écran 2

Maintenant, après avoir identifié votre simulateur, selon sa version, la structure des dossiers est très différente:

Sur iOS 8, l'exécutable et le dossier de données d'une application se trouvent dans des dossiers différents:

Exécutable : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Dossier de données : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

Dossier Documents : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

Sur iOS 7 et au-dessous, la structure des dossiers est la même qu'avant, rappelez-vous seulement que maintenant chaque simulateur est dans le même dossier (voir ci-dessus).

Razvan
la source
13

Si votre application utilise CoreData, une astuce astucieuse consiste à rechercher le nom du fichier sqlite à l'aide du terminal.

find ~ -name my_app_db_name.sqlite

Les résultats répertorieront les chemins d'accès complets aux fichiers de tous les simulateurs ayant exécuté votre application.

Je souhaite vraiment qu'Apple ajoute simplement un bouton au menu de fichiers du simulateur iOS comme "Reveal Documents folder in Finder".

DiscDev
la source
1
Je dois aimer le terminal.
kakubei
2
Cela semble être une manière assez longue de trouver cela. Rechercher dans tout votre répertoire personnel?
shortstuffsushi
11

Il est exact que nous devons examiner le chemin ~ / Library / Developer / CoreSimulator / Devices /.

Mais le problème que je vois est que le chemin change chaque fois que j'exécute l'application. Le chemin contient un autre ensemble d'identifiants longs après la chaîne Application et qui change constamment chaque fois que j'exécute l'application. Cela signifie essentiellement que mon application n'aura pas de données en cache lors de sa prochaine exécution.

Deepak GM
la source
Je vois cela aussi.
Nathan Jones
5
Les chemins ne changent pas chaque fois que vous exécutez l'application. Il existe un chemin par périphérique que vous avez dans votre bibliothèque. Exécutez 'xcrun simctl list' pour voir la liste des périphériques et leurs UDID afin de voir quel sous-répertoire vous devriez considérer.
Jeremy Huddleston Sequoia
8

Avec iOS 9.2 et Xcode 7.2, le script suivant ouvrira le dossier Documents de la dernière application installée sur le dernier simulateur utilisé;

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

Pour créer un script facilement exécutable, placez-le dans une application Automator avec "Run Shell Script":

Exécuter le script Shell dans l'application Automator

Bouke
la source
7

Avec l'adoption de CoreSimulator dans Xcode 6.0, les répertoires de données sont par appareil plutôt que par version. Le répertoire de données est ~ / Library / Developer / CoreSimulator / Devices // data où peut être déterminé à partir de 'xcrun simctl list'

Notez que vous pouvez supprimer en toute sécurité ~ / Library / Application Support / iPhone Simulator et ~ / Library / Logs / iOS Simulator si vous ne prévoyez pas de revenir à Xcode 5.x ou version antérieure.

Jeremy Huddleston Séquoia
la source
Merci d'avoir donné ce qui peut probablement être considéré comme la réponse faisant autorité. Existe-t-il un moyen simple (sauf la connexion à partir de l'application) de trouver l'emplacement d'une application spécifique dans un simulateur?
fzwo
Désolé, non, mais j'ai vu quelques demandes à ce sujet ici et sur les forums. Veuillez déposer un radar sur bugreport.apple.com
Jeremy Huddleston Sequoia
6

mise à jour: Xcode 11.5 • Swift 5.2

if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
    print(documentsPath)   // "var/folder/.../documents\n" copy the full path
}

Accédez à votre Finder, appuyez sur commande-shift-g (ou Aller> Aller au dossier ... sous la barre de menu) et collez-y le chemin complet "var / dossier /.../ documents" et appuyez sur go.

Leo Dabus
la source
4

Essayer ~/Library/Developer/CoreSimulator/Devices/

Droppy
la source
4

J'ai rencontré le même problème lorsque j'ai stocké le chemin complet à l'aide de CoreData. Lors de la récupération du chemin d'accès complet, il renvoie null car l'UUID du dossier de document est différent à chaque redémarrage de l'application. Voici ma résolution:

  1. Assurez-vous de ne stocker que le chemin relatif du document / fichier dans CoreData. Par exemple, enregistrez "Files / image.jpg" au lieu de "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg".
  2. Utilisez ce qui suit pour récupérer l'emplacement du document d'application:

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

  3. Concaténez à la fois # 2 et # 1 pour obtenir le chemin complet du document / fichier que vous souhaitez récupérer.
Vous pouvez vous référer à Apple Developer Note: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

netliner
la source
3

Où se trouve le répertoire de documents pour le simulateur iOS 8

Vous avez peut-être remarqué que le simulateur iPhone a changé avec Xcode 6, et avec lui - bien sûr - le chemin vers le répertoire de documents de vos applications simulées. Parfois, nous pouvons avoir besoin de l'examiner.

Trouver ce chemin n'est pas aussi facile qu'auparavant, à savoir Bibliothèque / Support d'application / iPhone Simulator / 7.1 / Applications / suivi d'un nombre cryptique représentant votre application.

À partir de Xcode 6 et iOS 8, vous le trouverez ici: Bibliothèque / Développeur / CoreSimulator / Devices / cryptic number / data / Containers / Data / Application / cryptic number

http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/

jbchitaliya
la source
3

dans Appdelegate, mettez ce code pour voir Document and Cache Dir:

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    NSArray* cachePathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = [cachePathArray lastObject];
    NSLog(@"Cache Directory: %@", cachePath);
#endif

sur le journal:

Répertoire des documents: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

Répertoire du cache: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches

ikanimo
la source
3

Si vous aimez aller dans les dossiers de l'application pour voir ce qui se passe et que vous ne voulez pas avoir à passer par des UUDID labyrinthiques, j'ai fait ceci: https://github.com/kallewoof/plget

et en l'utilisant, j'ai fait ceci: https://gist.github.com/kallewoof/de4899aabde564f62687

Fondamentalement, lorsque je veux accéder au dossier d'une application, je fais:

$ cd ~/iosapps
$ ./app.sh
$ ls -l
total 152
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/BD660795-9131-4A5A-9A5D-074459F6A4BF
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/A74C9F8B-37E0-4D89-80F9-48A15599D404
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/07BA5718-CF3B-42C7-B501-762E02F9756E
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/5A4642A4-B598-429F-ADC9-BB15D5CEE9B0
-rwxr-xr-x  1 me  staff  3282 Nov 14 17:04 app.sh
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/69F7E3EF-B450-4840-826D-3830E79C247A
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/976D1E91-DA9E-4DA0-800D-52D1AE527AC6
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/473F8259-EE11-4417-B04E-6FBA7BF2ED05
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/CB21C38E-B978-4B8F-99D1-EAC7F10BD894
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.otherapp-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/DE3FF8F1-303D-41FA-AD8D-43B22DDADCDE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-7-1_iPad-Retina.dr -> simulator/4DC11775-F2B5-4447-98EB-FC5C1DB562AD/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-2.dr -> simulator/6FC02AE7-27B4-4DBF-92F1-CCFEBDCAC5EE/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-Retina.dr -> simulator/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-1_iPad-Retina.dr -> simulator/414E8875-8875-4088-B17A-200202219A34/data
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 org.cocoapods.demo.pajdeg-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/C3069623-D55D-462C-82E0-E896C942F7DE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 simulator -> /Users/me/Library/Developer/CoreSimulator/Devices

La ./app.shpièce synchronise les liens. Il est fondamentalement toujours nécessaire de nos jours, car les applications changent d'UUID pour chaque exécution dans Xcode à partir de la version 6.0. De plus, malheureusement, les applications sont par identifiant de bundle pour 8.x et par nom d'application pour <8.

Kalle
la source
3

Sur la base de la réponse d'Ankur mais pour nous, utilisateurs de Swift:

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

Mettez-le dans ViewDidLoad et il s'imprimera immédiatement après l'exécution de l'application.

kakubei
la source
3

Les simulateurs sont situés sous:

~/Library/Developer/CoreSimulator/

Ici, ils sont répertoriés comme des répertoires avec des noms UUID. Utilisez le tri par date de modification pour trouver le dernier. À l'intérieur, accédez à:

/data/Containers/Data/Application/

Ici, vous obtiendrez une liste de toutes les applications de cet appareil. Vous pouvez à nouveau trier ceci pour obtenir la dernière application.

REMARQUE: Xcode change le nom du répertoire chaque fois que vous exécutez l'application, alors ne comptez pas sur la création d'alias / raccourcis sur le bureau.

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

NSRover
la source
2

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

 ~/Library/Developer/CoreSimulator

Parcourir le répertoire dans le dossier Documents de votre application est un peu plus ardu, par exemple,

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

La meilleure façon de trouver le chemin est de le faire via le code.

En utilisant Swift, collez simplement le code ci-dessous dans l' application de fonction dans votre AppDelegate.swift

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

Pour le code Obj-C, regardez la réponse de @Ankur

rsc
la source
2

Pour Swift 3.x

if let documentsPath = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: " + documentsPath)
    }
Boris
la source
1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
SwiftArchitect
la source