Local do suporte do aplicativo Xcode 6 iPhone Simulator
137
No Xcode 6, tenho um aplicativo em que estou usando o Core Data, mas não há pasta no Suporte a aplicativos para o iOS 8 iPhone Simulator. Onde meus arquivos e o banco de dados sqlite do Core Data estão sendo armazenados?
Tente isso . Há um aplicativo que abre diretamente o diretório Documents da última execução do aplicativo.
NSRover 28/11
Adicionei uma resposta (na parte inferior das outras respostas) que mostra como obter programaticamente o caminho onde os arquivos de dados principais residem.
isso está correto em geral, mas parece que há mais alterações de pastas internas. Este é o caminho que funciona para mim no Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn
1
Existe uma maneira de entender que os números ou a força bruta são a única chance de acessar os dados?
vir us
89
NSLog (@ "app dir:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - imprimirá o caminho completo para a pasta de dados
vir us
2
Eu precisava de um atalho persistente para o diretório de documentos do meu aplicativo, para depuração rápida. Após a aplicação, didFinishLaunchingWithOptions. #if DEBUG 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 Agora eu tenho um simlink que funciona, mesmo que o iOS8 + XCode6 altere o GUID de dados do meu aplicativo toda vez que eu construo.
seabass
32
O xcrun simctl listcomando pode ser usado para ver a correspondência entre os nomes do simulador e os UDIDs do dispositivo. Ou, mais especificamente, o xcrun simctl list devicescomando.
Thomasw
36
Eu sugiro que você use SimPholders para encontrar seus arquivos do Simulator. É um item da barra de menus que rastreia seus aplicativos de simulador e permite que você vá diretamente para suas pastas e conteúdo. É incrivel.
Eu também estava tendo problemas com o SimPholders2 no Yosemite, então iniciei um script de linha de comando para ajudá-lo a encontrar e abrir uma janela do Finder no simulador e no aplicativo que você deseja. Ele percorre as pastas e as listas de metadados para listar todas as pastas e aplicativos do simulador. Se estiver interessado, confira aqui
Rodrigo Lima
O SimPholders2 funciona em Yosemite, mas é um pouco lento; Depois de clicar no ícone na barra de status, aguarde alguns segundos e ele deve aparecer.
Jason
Whoa, é impressionante e os trabalhos mais recentes com o Yosemite + Xcode 6.3!
TruMan1
21
Achei a aplicação SimulatorManager muito útil. Leva você diretamente para a pasta do aplicativo dos simuladores instalados. Eu tentei com os simuladores 7.1, 8.0 e 8.1.
O SimulatorManager reside como um ícone na bandeja do sistema e fornece uma opção para "Iniciar no logon".
Nota : Isso funciona apenas com o Xcode 6 (6.1.1 no meu caso) e acima.
Amar, como você instala o SimulatorManager? Eu pensei que era um plugin para Xcode, mas é um projeto Xcode
malena
1
na barra superior, selecione: Produto -> Arquivo -> e, em seguida, Exportar o arquivo como um aplicativo Mac sem precisar assinar novamente (a última opção), você receberá um arquivo .app que pode ser colocado na pasta Aplicativo como um aplicativo normal. ..
Heckscheibe
11
Para saber onde seu arquivo .sqlite está armazenado no AppDelegate.m, adicione o seguinte código
Eu lutei com isso por algum tempo. Tornou-se uma enorme dor simplesmente acessar meu banco de dados sqlite local. Eu escrevi esse script e o fiz um trecho de código dentro do XCode. Coloco-o dentro do meu appDidFinishLaunching dentro do meu 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
Isso cria um simlink na raiz da sua unidade. (Talvez você precise criar essa pasta pela primeira vez e chmod, ou pode mudar a localização para outro local). Então instalei o plugin xcodeway https://github.com/onmyway133/XcodeWay
Eu o modifiquei um pouco para permitir que eu simplesmente pressione cmd + d e ele abrirá um enrolador de localização no diretório de documentos persistente do meu aplicativo atual. Dessa forma, não importa quantas vezes o XCode mude seu caminho, ele muda apenas na execução e atualiza seu simlink imediatamente a cada execução.
O simulador coloca o arquivo em ~ / Library / Developer / CoreSimulator / Devices / ... mas o caminho após / Devices é diferente para todos.
Use este método útil. Ele retorna o caminho do diretório temporário para o usuário atual e não aceita argumentos.
NSString*NSTemporaryDirectory(void);
Portanto, na minha classe ViewController, costumo colocar essa linha no meu viewDidLoad apenas para uma referência quando preciso pegar meu arquivo armazenado no CoreData. Espero que isto ajude.
NSLog(@"FILE PATH :%@",NSTemporaryDirectory());
(Nota: para ir para o caminho, no menu localizador, clique em Ir e digite ~ / Library para abrir o diretório oculto; em seguida, na janela do Finder, clique no caminho mostrado no console.)
Esse local, mais uma vez, foi alterado, se você estiver usando o Swift, use-o para descobrir onde está a pasta (copiada do arquivo AppDelegate.swift que a Apple cria para você, portanto, se não funcionar em sua máquina, pesquise esse arquivo para a sintaxe correta, isso funciona no meu usando o simulador Xcode 6.1 e iOS 8):
let urls =NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains:.UserDomainMask)
println("Possible sqlite file: \(urls)")
Aqui, eles são listados como diretórios com nomes de UUID. Use classificar por 'Data da modificação' para encontrar a mais recente. Dentro, navegue até:
/data/Containers/Data/Application/
Aqui você obterá uma lista de todos os aplicativos nesse dispositivo. Você pode classificar novamente para obter o aplicativo mais recente.
NOTA: O Xcode altera o nome do diretório toda vez que você executa o aplicativo, portanto, não confie em criar alias / atalhos na área de trabalho.
A maneira mais fácil é usar o aplicativo aqui , que faz tudo automaticamente.
No Swift 4 ou Swift 5 você pode usar NSHomeDirectory().
A maneira mais fácil no Xcode 10 (ou Xcode 11) é pausar seu aplicativo (como quando atinge um ponto de interrupção) e executar esta linha no console do depurador:
po NSHomeDirectory()
po significa objeto de impressão e imprime a maioria das coisas
Com o Swift 4, você pode usar o código abaixo para obter o diretório inicial do seu aplicativo. O diretório de documentos do seu aplicativo está lá.
print(NSHomeDirectory())
Acho que você já sabe que o diretório inicial do seu aplicativo é mutável. Portanto, se você não deseja adicionar código adicional à sua base de código, o SimPholder é uma ótima ferramenta para você.
Além disso, você pode se perguntar: existe uma ferramenta que pode ajudar você a economizar tempo ao fechar e reabrir o mesmo banco de dados SQLite toda vez que o diretório inicial do seu aplicativo for alterado. E a resposta é sim, uma ferramenta que eu conheço é o SQLiteFlow . Do documento, diz que:
Manipule o nome do arquivo de banco de dados ou as alterações de diretório. Isso faz com que o SQLiteFlow possa funcionar de maneira amigável com o banco de dados SQLite no simulador do iOS.
Aqui está o sh para o último simulador e aplicação usados. Basta executar sh e copiar o texto impresso e colar e executar o comando para mostrar no localizador.
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication
Respostas:
O diretório do simulador foi movido com o Xcode 6 beta para ...
Navegar no diretório para a pasta Documents do seu aplicativo é um pouco mais difícil, por exemplo,
fonte
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG 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
Agora eu tenho um simlink que funciona, mesmo que o iOS8 + XCode6 altere o GUID de dados do meu aplicativo toda vez que eu construo.xcrun simctl list
comando pode ser usado para ver a correspondência entre os nomes do simulador e os UDIDs do dispositivo. Ou, mais especificamente, oxcrun simctl list devices
comando.Eu sugiro que você use SimPholders para encontrar seus arquivos do Simulator. É um item da barra de menus que rastreia seus aplicativos de simulador e permite que você vá diretamente para suas pastas e conteúdo. É incrivel.
fonte
Achei a aplicação SimulatorManager muito útil. Leva você diretamente para a pasta do aplicativo dos simuladores instalados. Eu tentei com os simuladores 7.1, 8.0 e 8.1.
O SimulatorManager reside como um ícone na bandeja do sistema e fornece uma opção para "Iniciar no logon".
Nota : Isso funciona apenas com o Xcode 6 (6.1.1 no meu caso) e acima.
Espero que ajude!
fonte
Para saber onde seu arquivo .sqlite está armazenado no AppDelegate.m, adicione o seguinte código
agora chame esse método no AppDelegate.m
fonte
Isso funcionou para mim rapidamente:
fonte
Eu lutei com isso por algum tempo. Tornou-se uma enorme dor simplesmente acessar meu banco de dados sqlite local. Eu escrevi esse script e o fiz um trecho de código dentro do XCode. Coloco-o dentro do meu appDidFinishLaunching dentro do meu appDelegate.
Isso cria um simlink na raiz da sua unidade. (Talvez você precise criar essa pasta pela primeira vez e chmod, ou pode mudar a localização para outro local). Então instalei o plugin xcodeway https://github.com/onmyway133/XcodeWay
Eu o modifiquei um pouco para permitir que eu simplesmente pressione cmd + d e ele abrirá um enrolador de localização no diretório de documentos persistente do meu aplicativo atual. Dessa forma, não importa quantas vezes o XCode mude seu caminho, ele muda apenas na execução e atualiza seu simlink imediatamente a cada execução.
Espero que isso seja útil para os outros!
fonte
Open finder> Biblioteca> Desenvolvedor> CoreSimulator> Dispositivos
Em seguida, clique no ícone Alterar arranjo no localizador, selecione Data de adição
Selecione seu aplicativo> dados> Contêiner> dados> Aplicativos>
escolha seu aplicativo> Documentos> Aqui está o seu arquivo db
No meu caso:
Caso contrário, faça o seguinte:
- Ele imprimirá o caminho completo para a pasta de dados.
Rápido:
fonte
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
Use o Finder -> vá para a pasta e insira o caminho base especificado para acessar as pastas do aplicativo
fonte
O simulador coloca o arquivo em ~ / Library / Developer / CoreSimulator / Devices / ... mas o caminho após / Devices é diferente para todos.
Use este método útil. Ele retorna o caminho do diretório temporário para o usuário atual e não aceita argumentos.
Portanto, na minha classe ViewController, costumo colocar essa linha no meu viewDidLoad apenas para uma referência quando preciso pegar meu arquivo armazenado no CoreData. Espero que isto ajude.
(Nota: para ir para o caminho, no menu localizador, clique em Ir e digite ~ / Library para abrir o diretório oculto; em seguida, na janela do Finder, clique no caminho mostrado no console.)
fonte
Esse local, mais uma vez, foi alterado, se você estiver usando o Swift, use-o para descobrir onde está a pasta (copiada do arquivo AppDelegate.swift que a Apple cria para você, portanto, se não funcionar em sua máquina, pesquise esse arquivo para a sintaxe correta, isso funciona no meu usando o simulador Xcode 6.1 e iOS 8):
fonte
Os simuladores estão localizados em:
~/Library/Developer/CoreSimulator/
Aqui, eles são listados como diretórios com nomes de UUID. Use classificar por 'Data da modificação' para encontrar a mais recente. Dentro, navegue até:
/data/Containers/Data/Application/
Aqui você obterá uma lista de todos os aplicativos nesse dispositivo. Você pode classificar novamente para obter o aplicativo mais recente.
NOTA: O Xcode altera o nome do diretório toda vez que você executa o aplicativo, portanto, não confie em criar alias / atalhos na área de trabalho.
A maneira mais fácil é usar o aplicativo aqui , que faz tudo automaticamente.
fonte
Eu criei esse script que compactará o aplicativo mais recente criado para qualquer simulador e compactado na área de trabalho.
https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c
fonte
No Swift 4 ou Swift 5 você pode usar
NSHomeDirectory()
.A maneira mais fácil no Xcode 10 (ou Xcode 11) é pausar seu aplicativo (como quando atinge um ponto de interrupção) e executar esta linha no console do depurador:
po
significa objeto de impressão e imprime a maioria das coisasfonte
fonte
Com o Swift 4, você pode usar o código abaixo para obter o diretório inicial do seu aplicativo. O diretório de documentos do seu aplicativo está lá.
print(NSHomeDirectory())
Acho que você já sabe que o diretório inicial do seu aplicativo é mutável. Portanto, se você não deseja adicionar código adicional à sua base de código, o SimPholder é uma ótima ferramenta para você.
Além disso, você pode se perguntar: existe uma ferramenta que pode ajudar você a economizar tempo ao fechar e reabrir o mesmo banco de dados SQLite toda vez que o diretório inicial do seu aplicativo for alterado. E a resposta é sim, uma ferramenta que eu conheço é o SQLiteFlow . Do documento, diz que:
fonte
Aqui está o sh para o último simulador e aplicação usados. Basta executar sh e copiar o texto impresso e colar e executar o comando para mostrar no localizador.
fonte