Caminho do diretório de documentos do Xcode Device Simulator

89

No iOS 7, o diretório de documentos dos simuladores iOS pode ser encontrado em:

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

No entanto, no iOS 8 Beta Simulator , não consigo encontrar o diretório correspondente para iOS 8 no diretório acima.

Onde está o caminho do diretório do documento para o simulador iOS 8?

insira a descrição da imagem aqui

Punho de fogo
fonte
Experimente isso . Existe um aplicativo que abre diretamente o diretório Documentos da última execução do aplicativo.
NSRover
tente este link stackoverflow.com/questions/24133022/…
Tunvir Rahman Tusher
Se você não conseguir encontrar a pasta da biblioteca, provavelmente ela está oculta. Digitar este comando no terminal o exibirá: chflags nohidden ~ / Library
simon_smiley
Se você gosta do plug-in Xcode, experimente github.com/onmyway133/XcodeWay , um plug-in Xcode que pode navegar para a pasta do seu simulador e muitos outros lugares
onmyway133

Respostas:

155

no meu computador, o caminho é:

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

NOTA: provavelmente esses IDs longos (ou seja, UDIDs) são diferentes no seu computador.

holex
fonte
1
Se seu aplicativo usa CoreData, pode haver uma maneira mais fácil de pesquisar o local da pasta: stackoverflow.com/a/25937606/1103584
DiscDev
12
Não, isso está incorreto. Não há distinção entre projetos ObjC e projetos Swift. Esses são UDIDs (identificadores exclusivos de dispositivos) e você pode ver os seus executando 'xcrun simctl list'
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, correto ou não, foi assim que o projeto Swift e um ObjC foram copiados para o meu computador. Não preciso mencionar que ambos foram compilados apenas no simulador (essa era a pergunta original). se o Xcode fizer diferença entre UDIDs para idiomas diferentes e você achar que não está correto, pode ser necessário relatar à Apple.
holex
7
Holex, estou dizendo que sua afirmação está incorreta, não que o design esteja incorreto (note que eu sou o cara da Apple que projetou o CoreSimulator, então provavelmente seria a primeira pessoa a corrigir algo que acho que é errado). Os UDIDs correspondem a dispositivos separados. A única razão pela qual seus projetos swift e objc estariam usando UDIDs diferentes é porque você implantou seus projetos em dispositivos simuladores diferentes (por exemplo: para um, você implantou no iPhone 5s e o outro implantou no iPhone 6).
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, fique à vontade para corrigir minha resposta a qualquer momento, se se sentir suficientemente confiante.
holex
75

NSLogabaixo do código em algum lugar em "AppDelegate", execute seu projeto e siga o caminho. Será mais fácil para você chegar aos documentos em vez de pesquisar aleatoriamente dentro de "~ / Library / Developer / CoreSimulator / Devices /"

Objective-C

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

Swift
Se você estiver usando o Swift 1.2, use o código abaixo, que só sairá em desenvolvimento ao usar o Simulador por causa do #if #endifbloco:

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

Copie seu caminho de "/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ..." vá em " Finder " e depois " Ir para a pasta " ou command+ shift+ ge cole seu caminho, deixe o mac levá-lo ao seu diretório de documentos :)

Ankur
fonte
simples e eficiente!
Loretoparisi
43

Basta escrever o código abaixo em 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 / Documentos

Copie seu caminho de "/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ..." vá para "Finder" e "Ir para a pasta" ou comando + shift + g e cole seu caminho , deixe o mac levá-lo ao diretório de documentos

Mitul Marsoniya
fonte
Como você vai saber em qual pasta seu aplicativo está contido? Há muitos diretórios, preciso pesquisar cada um deles?
KarenAnne,
your ans is hear> stackoverflow.com/questions/24133022/…
Mitul Marsoniya
este é um caminho codificado para seu próprio simulador. Não funcionará para mais ninguém. Na verdade, esse caminho também mudará para você quando você executar o simulador novamente.
NSRover
#if TARGET_IPHONE_SIMULATOR // onde você está? NSLog (@ "Diretório de documentos:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya
16

Eu recomendo um bom aplicativo utilitário chamado SimPholders que facilita a localização de arquivos e pastas durante o desenvolvimento de seu aplicativo iOS. Possui uma nova versão para funcionar com os novos simuladores chamados SimPholders2. Ele pode ser encontrado em simpholders.com

JDibble
fonte
Esse seria um aplicativo legal agora que o simulador iOS8 está enterrado na obscuridade da pasta, mas esse aplicativo não foi atualizado para suportar iOS8.
wibobm
@wibobm. SimPholders2 certamente é compatível com iOS 8.0 e iOS 8.1
JDibble
AMD. Devo estar totalmente cego. Obrigado!
wibobm
16

Apesar do fato de haver muitas respostas, nenhuma delas fornece uma compreensão de como a estrutura de pastas dos simuladores iOS 8.3 mudou e não estão fornecendo uma maneira rápida de encontrar os dados do aplicativo (pasta Documentos).

Desde o iOS 8, as pastas de armazenamento de dados de um aplicativo são separadas dos arquivos executáveis ​​do aplicativo, enquanto o iOS 7 e anteriores têm a mesma estrutura de pastas, sendo a única diferença o fato de que todos os simuladores (diferentes tipos e versões) são agora em uma grande pasta.

Portanto, o caminho para um simulador iOS 8,7,6 é o seguinte:

~/Library/Developer/CoreSimulator/Devices

Cada simulador agora está contido em uma pasta nomeada com um identificador exclusivo que muda a cada reinicialização de um simulador.

Você pode encontrar o Identifierpara cada um de seus dispositivos e simuladores indo para Xcode > Window > Devices(os primeiros 3 ou 4 caracteres do identificador são mais do que suficientes para lembrar).

Para encontrar aquele no qual você instalou seu (s) aplicativo (s), dê uma olhada em Run scheme > devices(tela 2).

tela 1

tela 2

Agora, depois de identificar seu simulador, dependendo de sua versão, a estrutura de pastas é muito diferente:

No iOS 8, o executável e a pasta de dados de um aplicativo estão em pastas diferentes:

Executável : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Pasta de dados : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

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

No iOS 7 e abaixo, a estrutura de pastas é a mesma de antes, mas lembre-se de que agora todos os simuladores estão na mesma pasta (veja acima).

Razvan
fonte
13

Se seu aplicativo usa CoreData, um truque bacana é procurar o nome do arquivo sqlite usando o terminal.

find ~ -name my_app_db_name.sqlite

Os resultados listarão os caminhos de arquivo completos para quaisquer simuladores que executaram seu aplicativo.

Eu realmente gostaria que a Apple apenas adicionasse um botão ao menu de arquivo do iOS Simulator, como "Revelar a pasta Documentos no Finder".

DiscDev
fonte
1
Tenho que amar o terminal.
kakubei
2
Esta parece ser uma maneira bastante remota de descobrir isso. Pesquisar todo o diretório inicial?
shortstuffsushi
11

É correto que precisamos olhar para o caminho ~ / Library / Developer / CoreSimulator / Devices /.

Mas o problema que estou vendo é que o caminho muda sempre que executo o aplicativo. O caminho contém outro conjunto de IDs longos após a string do aplicativo e que muda sempre que executo o aplicativo. Isso basicamente significa que meu aplicativo não terá nenhum dado em cache quando for executado na próxima vez.

Deepak GM
fonte
Eu também estou vendo isso.
Nathan Jones de
5
Os caminhos não mudam sempre que você executa o aplicativo. Existe um caminho por dispositivo que você tem em sua biblioteca. Execute 'xcrun simctl list' para ver a lista de dispositivos e seus UDIDs, a fim de ver qual subdiretório você deve considerar.
Jeremy Huddleston Sequoia
8

Com iOS 9.2 e Xcode 7.2, o script a seguir abrirá a pasta Documentos do último aplicativo instalado no último simulador usado;

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

Para criar um script de fácil execução, coloque-o em um aplicativo Automator com "Run Shell Script":

Executar Shell Script dentro do aplicativo Automator

Bouke
fonte
7

Com a adoção do CoreSimulator no Xcode 6.0, os diretórios de dados são por dispositivo em vez de por versão. O diretório de dados é ~ / Library / Developer / CoreSimulator / Devices // data onde pode ser determinado a partir de 'xcrun simctl list'

Observe que você pode excluir com segurança ~ / Library / Application Support / iPhone Simulator e ~ / Library / Logs / iOS Simulator se não planeja voltar para o Xcode 5.x ou anterior.

Jeremy Huddleston Sequoia
fonte
Obrigado por dar o que provavelmente pode ser visto como uma resposta confiável. Existe uma maneira fácil (exceto registrar de dentro do aplicativo) para encontrar a localização de um aplicativo específico dentro de um simulador?
fzwo
Desculpe, não, mas tenho visto alguns pedidos para isso aqui e nos fóruns. Envie um radar em bugreport.apple.com
Jeremy Huddleston Sequoia
6

atualização: 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
}

Vá para o seu Finder, pressione command-shift-g (ou Go> Go to Folder ... sob a barra de menu) e cole o caminho completo "var / folder /.../ documents" lá e pressione go.

Leo Dabus
fonte
4

Experimentar ~/Library/Developer/CoreSimulator/Devices/

Droppy
fonte
4

Eu enfrentei o mesmo problema quando armazenei o caminho completo usando CoreData. Ao recuperar o caminho completo, ele retorna nulo porque o UUID da pasta de documentos é diferente a cada vez que o aplicativo é reiniciado. A seguir está minha resolução:

  1. Certifique-se de armazenar apenas o caminho relativo do documento / arquivo no CoreData. Por exemplo, armazene "Arquivos / imagem.jpg" em vez de "/Usuários/seunome/.../Applications/UUID/Document/Files/image.jpg".
  2. Use o seguinte para recuperar a localização do documento do aplicativo:

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

  3. Concatene os números 2 e 1 para obter o caminho completo do documento / arquivo que deseja recuperar.
Você pode consultar a Nota do desenvolvedor da Apple: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

netliner
fonte
3

Onde está o diretório de documentos para o simulador iOS 8

Você deve ter notado que o simulador do iPhone mudou com o Xcode 6 e com ele - é claro - o caminho para o diretório de documentos de seus aplicativos simulados. Às vezes, podemos precisar dar uma olhada nisso.

Encontrar esse caminho não é tão fácil quanto antes, ou seja, Biblioteca / Suporte de aplicativo / iPhone Simulator / 7.1 / Aplicativos / seguido por um número críptico representando seu aplicativo.

No Xcode 6 e no iOS 8, você o encontrará aqui: Biblioteca / Desenvolvedor / CoreSimulator / Dispositivos / número críptico / dados / Containers / Dados / Aplicativo / número críptico

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

jbchitaliya
fonte
3

em Appdelegate, coloque este código para ver Document e 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

no registro:

Diretório de documentos: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

Diretório de cache: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches

ikanimo
fonte
3

Se você gosta de acessar as pastas do aplicativo para ver o que está acontecendo e não quer ter que passar por UUDIDs labirínticos, fiz isto: https://github.com/kallewoof/plget

e usando-o, fiz isso: https://gist.github.com/kallewoof/de4899aabde564f62687

Basicamente, quando quero ir para a pasta de algum aplicativo, eu faço:

$ 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

A ./app.shparte sincroniza os links. É necessário basicamente sempre hoje em dia, pois os aplicativos mudam o UUID para cada execução no Xcode a partir do 6.0. Além disso, infelizmente, os aplicativos são por id de pacote para 8.xe por nome de aplicativo para <8.

Kalle
fonte
3

Com base na resposta da Ankur, mas para nós, usuários do Swift:

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

Coloque-o dentro de ViewDidLoad e ele será impresso imediatamente após a execução do aplicativo.

Kakubei
fonte
3

Os simuladores estão localizados em:

~/Library/Developer/CoreSimulator/

Aqui, eles são listados como diretórios com nomes UUID. Use classificar por 'Data de modificação' para encontrar o mais recente. Navegue até:

/data/Containers/Data/Application/

Aqui você obterá uma lista de todos os aplicativos desse dispositivo. Você pode classificar isso novamente para obter o aplicativo mais recente.

NOTA: o Xcode muda o nome do diretório toda vez que você executa o aplicativo, portanto, não confie em fazer alias / atalhos no desktop.

A maneira mais fácil é usar o aplicativo aqui , que faz tudo automaticamente.

NSRover
fonte
2

O diretório do simulador foi movido com o Xcode 6 beta para ...

 ~/Library/Developer/CoreSimulator

Navegar no diretório até a pasta Documentos do seu aplicativo é um pouco mais árduo, por exemplo,

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

A melhor forma de encontrar o caminho é via código.

Usando o Swift, basta colar o código abaixo dentro do aplicativo de função em seu AppDelegate.swift

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

Para o código Obj-C, veja a resposta de @Ankur

rsc
fonte
2

Para Swift 3.x

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

iOS 11

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