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


Experimente isso . Existe um aplicativo que abre diretamente o diretório Documentos da última execução do aplicativo.
NSRover



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.


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


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


Como você vai saber em qual pasta seu aplicativo está contido? Há muitos diretórios, preciso pesquisar cada um deles?
KarenAnne,


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


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


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".


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.


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


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.


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.


4

Experimentar ~/Library/Developer/CoreSimulator/Devices/


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


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/


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


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.


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.


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.


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

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


2

Para Swift 3.x

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

1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.