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.
— SpokaneDude


Use "NSTemporaryDirectory ()". Veja aqui: stackoverflow.com/questions/1108076/…
— Shubhendu

Respostas:


296

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

~/Library/Developer/CoreSimulator

Navegar no diretório para a pasta Documents do seu aplicativo é um pouco mais difícil, por exemplo,

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

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

insira a descrição da imagem aqui

Nota : Isso funciona apenas com o Xcode 6 (6.1.1 no meu caso) e acima.

Espero que ajude!


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

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

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

agora chame esse método no AppDelegate.m

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

  //call here
   [self applicationDocumentsDirectory];

}

grande .. especialmente útil quando há vários simuladores
— Yasitha Waduge

6

Isso funcionou para mim rapidamente:

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

3

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.

Espero que isso seja útil para os outros!


Obrigado, eu apenas atualizar XcodeWay para apoiar iOS 8 pasta simulador
— onmyway133

3

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:

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

Caso contrário, faça o seguinte:

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

- Ele imprimirá o caminho completo para a pasta de dados.

Rápido:

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

Swift 3.0:let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
— AtomicBoolean

2

Use o Finder -> vá para a pasta e insira o caminho base especificado para acessar as pastas do aplicativo

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

NSLog(@"%@",basePath);

1

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


1

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

1

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.


1

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

#!/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

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


0
 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
  1. 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())

  2. 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ê.

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


0

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