Onde o iPhone Simulator armazena seus dados?

234

Eu tenho um banco de dados SQLite que estou usando para armazenar dados de aplicativos e poderia dar uma olhada nele para depurar um problema que estou tendo - mas onde o iPhone Simulator armazena seus dados normalmente?

Codebeef
fonte

Respostas:

291

A resposta aceita está correta para o SDK 3.2 - O SDK 4 substitui a pasta / User nesse caminho por um número para cada uma das versões herdadas do iPhone OS / iOS que ele pode simular, para que o caminho se torne:

~ / Biblioteca / Suporte a aplicativos / Simulador de iPhone / [versão do SO] / Aplicativos / [appGUID] /

se você tiver o SDK anterior instalado, o simulador 3.1.x continuará salvando seus dados em:

~ / Biblioteca / Suporte a aplicativos / Simulador de iPhone / Usuário / Aplicativos / [appGUID] /

Para Xcode6 e iOS8

~ / Biblioteca / Desenvolvedor / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID] /

dsmudger
fonte
6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert
174
Em vez de procurar no localizador qual GUID é seu, observe a resposta de pisca46 abaixo: Digite po NSHomeDirectory()o depurador. Recorte e cole em Ir> Ir para a pasta (Cmd-Shift-G).
mackworth
Estou um pouco preocupado que, quando inicio o simulador, ele diz 8.2, mas quando olho para esta pasta, o único número da versão que vejo é 7.1. Isso me preocupa porque estou procurando no lugar errado.
bugloaf
1
@bugloaf Veja esta pergunta ou resposta abaixo
Raviprakash
4
É difícil enfatizar quão mais simples, conveniente, menos propensa a erros e menos frustrante é essa resposta (como recomendado no comentário de mackworth acima). Você pode simplesmente adicionar uma linha para NSLogisso em suas AppDelegate's didFinishLaunchingWithOptions:, ou você pode po NSHomeDirectory()a partir do depurador. Em qualquer um dos casos, copie a sequência e abra-a no localizador com Cmd+Shift+G. Isso funciona melhor porque você está perguntando com um comando padrão em vez de precisar saber algo que muda.
precisa saber é
93

Existe outra maneira (mais rápida?) De descobrir onde estão os dados do seu aplicativo sem o Terminal:

  1. Inicie o aplicativo no simulador
  2. Open Activity Monitor
  3. Encontre o nome do seu aplicativo na guia CPU
  4. Clique duas vezes nele e abra o "Abrir arquivos e portas"

insira a descrição da imagem aqui

Sergey Lost
fonte
1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];dá-lhe o identificador de dispositivo
oabarca
@oabarca, o identificador que você recebe não tem nada a ver com o deviceID ou appFolder do simulador; Estou usando o Xcode 11.2.1 e o iOS 13.2.2
DawnSong 21/11
78

Encontrei:

~/Library/Application Support/iPhone Simulator/User/
Codebeef
fonte
16
Como pesquisar: No Finder imprensa CMD + SHIFT + G
rohan-patel
Por favor, veja a resposta atualizada abaixo por dsmudger, é a resposta correta no momento.
precisa saber é o seguinte
74

iOS 8 ~ / Biblioteca / Desenvolvedor / CoreSimulator / Dispositivos / [ID do dispositivo] / dados / aplicativos / [appGUID] / Documentos /

Wagh
fonte
1
Alguma maneira de obter o ID do dispositivo?
msmq
2
@msmq tryxcrun instruments -s
Shazron
11
@msmq Ligue o seu simulador atual, Hardware -> Dispositivo -> Gerenciar dispositivos ... -> Selecione seu simulador na lista "SIMULADORES". Em seguida, à direita é "Identificador". Este é o ID do dispositivo.
RichX 23/10
Como encontrar o [appGUID] aqui?
Yang Você
66

Em Lion, o Users/[username]/Libraryestá oculto.

Para simplesmente visualizar no Finder, clique no menu 'Ir' na parte superior da tela e mantenha pressionada a tecla 'alt' para mostrar 'Biblioteca'.

Clique em 'Biblioteca' e você poderá ver sua pasta da biblioteca oculta anteriormente.

Aconselhado anteriormente:

Usar

chflags nohidden /users/[username]/library

em um terminal para exibir a pasta.

Rafael Moreira
fonte
1
depois disso, você pode encontrá-lo em: ~ / Biblioteca / Suporte a aplicativos / iPhone Simulator / [versão do SO] / Aplicativos / [appGUID] /
Rafael Moreira
Essa é uma sugestão interessante para usuários normais, mas parece-me que os desenvolvedores do iOS / OS X precisam acessar a biblioteca regularmente e, portanto, não querem mais escondê-la. (Então, novamente, eu acho que um monte de desenvolvedores usam Terminal vez de Finder?)
ArtOfWarfare
58

A maneira mais fácil de todas.

  1. Pegar um ponto de interrupção em algum lugar.

  2. Entrar po NSHomeDirectory()na janela do console

Resultado:

(lldb) po NSHomeDirectory () / Usuários / usuário / Biblioteca / Desenvolvedor / CoreSimulator / Devices / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Containers / Data / Application / 395818BB-6D0F-499F-AAFE-068A783D9753

Lal Krishna
fonte
1
Se eu soubesse disso antes. Este deve ter sido a resposta correta
Ivan Cantarino
Eu acho que todas as outras respostas também estão corretas. Mas isso parece ser fácil para mim: -]
Lal Krishna
37

Se o Simulador estiver em execução, você poderá encontrar o caminho para o contêiner de qualquer aplicativo:

xcrun simctl get_app_container booted <app bundle identifier>

Exemplo de saída:

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

"boot" pode ser substituído pela maioria dos simctlcomandos em qualquer lugar em que um UDID do dispositivo seja esperado.

Você pode ver a lista de dispositivos com xcrun simctl liste obter ajuda sobre comandos específicos com xcrun simctl help.

Atualização : Por solicitação popular no Xcode 8.3, agora você pode especificar o tipo de contêiner que deseja, anexando "aplicativo", "dados", "grupos" ou um identificador de grupo de aplicativos.

Para obter o contêiner de dados:

$ xcrun simctl get_app_container booted com.example.app data
russbishop
fonte
excelente. Não há necessidade de executar o comando para obter device_id e appId. Um passo para obter todas
iamhite
Este deve ser aceito, porque é a maneira mais "estável" de fazer essas coisas.
Olha
35

Com o Xcode 5, você pode usar o código abaixo:

#import <Foundation/NSFileManager.h>

e:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

O resultado pode parecer com:

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

Onde hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhestá uma sequência hexadecimal que identifica seu aplicativo iOS.

Pisca46
fonte
16
Isso também funciona no depurador: po NSHomeDirectory()
mackworth
30

Parece que o Xcode 6.0 mudou esse local mais uma vez, pelo menos para os simuladores do iOS 8.

~ / Biblioteca / Desenvolvedor / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID]

um lobo
fonte
4
em ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / também existe um arquivo .plist chamado "device.plist". Se você olhar para dentro, poderá descobrir o nome do dispositivo como iphone-6 ou iphone-5s. deviceID é muito confuso, então acho que você deve procurar dentro do arquivo .plist.
EFE
1
Como obter o AppID?
Exibir nome
1
Eu trapacei para encontrar o ID do aplicativo, usando 'ls -l' e descobrindo quais arquivos do aplicativo foram criados mais recentemente. Pode funcionar para os outros também.
585 Maya Maya
1
Ou, no localizador, classifique por "data de criação" para colocar o aplicativo no topo da lista.
Ammar Mujeeb
30

Uma das maneiras mais fáceis de descobrir onde o aplicativo está dentro do simulador. Usuário "NSTemporaryDirectory ()"

Passos-

  1. Aplique o ponto de interrupção em qualquer lugar do aplicativo e execute-o.
  2. Quando o aplicativo parar no ponto de interrupção, digite o seguinte comando no console do Xcode.

    po NSTemporaryDirectory ()

Veja a imagem abaixo para uma visão adequadainsira a descrição da imagem aqui

Agora você tem o caminho exato até a pasta temporária. Você pode voltar e ver todas as pastas relacionadas ao aplicativo.

Espero que isso também ajude. Happy Coding :)

Shubhendu
fonte
1
Dica legal, mas por que não po NSHomeDirectory()?
Code Roadie
9

Onde o Xcode armazena simuladores em 2019+ Catalina, Xcode 11.0

Runtimes

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

Por exemplo: iOS 13.0, watchOS 6.0Estes têm mais espaço, de longe. Cada um pode ter até ~ 5 GB

Aparelhos

$ open ~/Library/Developer/CoreSimulator/Devices

Por exemplo: iPhone Xr, iPhone 11 Pro Max. Estes são tipicamente <15 mb cada.

Explicação

Os simuladores são divididos entre tempos de execução e dispositivos. Se você executar, $ xcrun simctl listpoderá ver uma visão geral, mas se quiser encontrar a localização física desses simuladores, consulte os diretórios que mostrei.

É totalmente seguro excluir tempos de execução que você não suporta. Você pode reinstalá-los posteriormente, se desejar.

joshuakcockrell
fonte
8

Simplesmente faça o seguinte:

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

E você terá algo assim:

/ Usuários / admin / Biblioteca / Desenvolvedor / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Containers / Data / Application / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Documents

Vá para lá e você verá a pasta de documentos do seu aplicativo, independentemente da versão do XCode. (Use o comando "Ir para a pasta ..." no Finder e especifique um caminho "~ / library").

Versão Swift para o caminho da string:

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

e URL da pasta:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)
LembergSun
fonte
Estava prestes a postar quase a mesma resposta. Este método tem a vantagem de sempre fornecer o caminho correto, em qualquer versão do simulador iOS. A propósito, você também pode copiar o valor da variável url no depurador, se não quiser registrá-la;)
Moose
7

No iOS 5:

/ Usuários / [Nome do usuário] / Biblioteca / Suporte a aplicativos / iPhone Simulator / 5.0 / Aplicativos / [AppGUID] /

Karthi
fonte
6

Para o Xcode 4.6, ele é armazenado no seguinte caminho ...

/ Usuários / [currentuser] / Biblioteca / Suporte a aplicativos / iPhone Simulator / 6.1 / Aplicativos /

Para conhecê-lo programaticamente, use o seguinte código

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
Durai Amuthan.H
fonte
2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect
4

Para iOS 8

Para localizar a pasta Documentos , você pode escrever um arquivo na pasta Documentos:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

digamos, em didFinishLaunchingWithOptions.

Então você pode abrir um terminal e encontrar a pasta:

$ find ~/Library -name Words.txt
Oh Ho
fonte
2

se alguém ainda está enfrentando esse problema no lion, há um ótimo artigo com 19 dicas diferentes para visualizar o diretório ~ / Library. encontre o artigo de Dan Frakes aqui http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

Lembre-se de que o diretório do simulador é fornecido abaixo

~ / Biblioteca / Suporte a aplicativos / Simulador de iPhone / Usuário /

Edwin
fonte
2

Para o macOS Catalina, encontrei meu banco de dados em:

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

Para obtê-lo applicationId, apenas classifiquei as pastas por data de modificação, embora tenha certeza de que há uma maneira melhor de fazer isso.

Stevenspiel
fonte
1

Para usuários nativos de reação que não usam o Xcode com frequência, basta usar find. Abra um terminal e pesquise com o nome do banco de dados.

$ find ~/Library/Developer -name 'myname.db'

Se você não souber o nome exato, poderá usar caracteres curinga:

$ find ~/Library/Developer -name 'myname.*'

cão de guarda
fonte
0

Você pode tentar usar o código abaixo

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);
Raees Madathil Valapuram
fonte
0

Para abrir os ditames onde você cria o aplicativo no xCode nos simuladores, faça o seguinte:

  1. abrir um winder do Finder (ícone de rosto sorridente)
  2. depois clique em IR -> Ir para a pasta
  3. tipo: ~ / Biblioteca / Suporte a aplicativos / iPhone Simulator
  4. Os Diretórios são a versão iOS dos diferentes Simuladores
  5. Os subdiretórios são os aplicativos instalados no simulador
  6. A pasta Documentos é onde o usuário gerou o conteúdo que é copiado para o iCloud
Mike Zriel
fonte
0

Não tenho afiliação com este programa, mas se você deseja abrir algo disso no localizador, o SimPholders torna incrivelmente fácil.

Jason
fonte