Limpando o simulador de iPhone

107

Existe uma maneira direta de limpar o diretório onde o xcode implanta um aplicativo ao construir para o simulador de iPhone? Eu tenho um banco de dados sqlite que é copiado para a pasta Documentos na inicialização, se necessário. O problema é que posso mudar meu esquema, mas o novo banco de dados não será copiado, porque já existe um.

Idealmente, toda vez que eu construo, ele destruiria o conteúdo anterior. Isso é possível ou tenho que fazer manualmente?

Travis Jensen
fonte
O simulador é compatível com AppleScript?
Rog,
Sim. Eu escrevi um AppleScript para iterar em todos os simuladores iOS para cada dispositivo e versão do sistema operacional e redefinir seus conteúdos e configurações: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Respostas:

91

O simulador instala aplicativos em:

"$HOME/Library/Application Support/iPhone Simulator/User/Applications"

Verifique também:

"$HOME/Library/Developer/CoreSimulator/Devices"

Os arquivos e diretórios GUID correspondem aos aplicativos instalados do simulador.

Exclua manualmente todos esses arquivos / diretórios para remover todos os aplicativos do simulador.

Eu sei que há alguma maneira de adicionar scripts ao processo de construção no XCode.

Além disso, parece que o XCode altera o GUID que usa em cada compilação (o diretório onde meu aplicativo fica muda entre as compilações no XCode), portanto, tentar excluir o mesmo diretório o tempo todo não funcionará. Se você estiver trabalhando apenas em um aplicativo por vez, limpar todo o diretório seria uma opção.

PyjamaSam
fonte
2
Certifique-se de verificar a resposta de @idStar abaixo. Ele tem informações atualizadas sobre Lion / Xcode4 e um pequeno script para ajudar a automatizar as coisas.
PyjamaSam
Eu estava testando a adição / remoção de assinaturas de calendário. Em um dispositivo real, você pode remover uma assinatura de calendário em Ajustes> Contas, mas este menu não existe no simulador iOS e eu não queria redefinir todo o simulador. Então, acabei criando localmente a versão da minha pasta Device com git e executei uma ação git reset HEAD --hard && git clean -fpara remover uma assinatura de calendário após adicioná-la.
Thibault D.
132

De Apples Dev Resources:

Para definir o conteúdo do usuário e as configurações do simulador para o estado de fábrica e remover os aplicativos que você instalou, escolha iPhone Simulator> Reset Content and Settings .

Isso se parece com:

iOS Reset

j7nn7k
fonte
3
Este não parece limpar o SQLite
Asped em
1
isso não limpa o cache do navegador, por exemplo
Mau
1
Agora, essa configuração está localizada emHardware > Reset Content and Settings
Haseeb Eqx
22

A maneira como faço isso é simplesmente clicar e segurar o ícone do meu aplicativo no simulador - então, quando ele começar a balançar, clique no preto e branco (x). Uma mensagem aparecerá perguntando se você realmente deseja excluir e basta clicar em sim. Na próxima vez que você construir e implantar seu aplicativo, ele usará o novo sqlite db sem problemas e você não terá que mexer no sistema de arquivos.

John
fonte
Isso não parece funcionar - não exclui REALMENTE os dados do simulador?
Adam
1
Meu erro - isso funciona bem (confirmado lendo o diretório na resposta aceita. Eu tinha acabado de esquecer o design hostil ao usuário da Apple de NSUserDefaults (valores não definidos não são relatados de maneira sensata)
Adam
@quadelirus, acho que sua resposta é a mais adequada nesta situação.
data
Isso é exatamente o que eu fiz, mas não tenho certeza de como fechar o aplicativo que já abriu no simulador. Até que, a menos que eu feche o aplicativo, não consigo controlar o simulador.
Wanna Coffee
1
@WannaCoffee Consulte stackoverflow.com/questions/18519799/…
John
12

Após o iOS 5 no Mac OS X Lion, você pode tentar:

  1. Crie um script chamado RemoveSimulatorApps.commandque contenha:
    rm -rf "$ HOME / Library / Application Support / iPhone Simulator / 5.0 / Applications / *"
    
  2. Salve este script em um diretório em seu PATH.
  3. Torne o arquivo executável, como:
    chmod + x RemoveSimulatorApps.command

Premissas

  • Você pode querer invocá-lo a partir de botões de favoritos do teclado, como em um teclado Logitech ou Microsoft com teclas programáveis ​​(portanto, salvá-lo como um arquivo .command em vez de dizer, .sh)
  • Você não tem problema em explodir tudo no simulador iOS (ideal se você estiver apenas trabalhando ativamente em um aplicativo)
  • Todas as notas de outros se aplicam sobre ser um bom aplicativo atualizável, etc. (eu pessoalmente achei isso útil, no entanto, b / c eu tenho opções de modo de desenvolvimento que recarregam um banco de dados em um estado específico no qual eu estava tentando fazer um tratamento consistente de robustez / erro)
idStar
fonte
1
Este funciona perfeitamente, mas lembre-se de adicionar a versão correta do IOS ao caminho :)
Em
1
Faria sentido adicionar ~ em vez de caminho absoluto?
Nikita Leonov
8

pode ser um exagero, mas ..

você também pode usar o menu e 'Redefinir conteúdo e configurações ...'

Cadarço
fonte
7

O que você realmente está tentando fazer é limpar seu banco de dados, caso tenha alterado o esquema. Uma maneira de fazer isso, e ficaria mais feliz no longo prazo, quando você começar a enviar a versão 2.0, 3.0, etc. do seu aplicativo, é verificar a versão da sua tabela sqlite e, se ela mudou, descarte o arquivo antigo e use aquele em seu pacote.

Encontrar uma maneira de limpar o Simulador não ajudará no problema do mundo real de como limpar o iPhone de um cliente quando você envia uma nova versão com um novo esquema.

Para pontos extras, depois de determinar que encontrou um esquema antigo, você pode querer copiar o novo banco de dados sem destruir o antigo e carregar quaisquer dados interessantes do banco de dados antigo para o novo. Em seguida, elimine o banco de dados antigo. Dessa forma, você pode preservar as adições do usuário ao banco de dados.

Mahboudz
fonte
Em geral, concordo com você quando você está falando sobre atualizações de lançamento, mas no meio do desenvolvimento de qualquer versão em particular, isso é muito mais sobrecarregado do que o necessário. O esquema do banco de dados pode mudar em uma base por compilação, e precisar escrever código de conversão para cada compilação é simplesmente errado.
Travis Jensen,
7

para Xcode> = 6

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -n1 xcrun simctl erase
jia tian
fonte
6

Se você estiver usando o Xcode 9 -> Barra de menus -> Hardware -> Apagar todo o conteúdo e configurações

Xcode -> Hardware -> Apagar Todo o Conteúdo e Configurações

Harald
fonte
5

No Xcode 6, você pode fazer isso na linha de comando com: xcrun simctl erase

Além disso, o aplicativo iOS Simulator (a versão do Xcode 6 e versões anteriores) tem um item de menu chamado "Redefinir conteúdo e configurações" que pode ser usado para apagar o dispositivo inicializado no momento.

Jeremy Huddleston Sequoia
fonte
mas pode ser executado em cada build automaticamente? por exemplo, para testes?
Daniel Gomez Rico
Supondo que você esteja fazendo seus testes usando um script, você certamente poderia adicionar 'xcrun simctl erase <UDID>' ao script quando apropriado ...
Jeremy Huddleston Sequoia
Sim, foi exatamente isso que eu disse.
Jeremy Huddleston Sequoia
5

Isso funciona com o Xcode 6:

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}

Para .bash_profile

alias cleansim="xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}"
Thomas T
fonte
3

A partir do Xcode 6:

xcrun simctl erase <sim udid> <- reinicia o simulador.

TinyTimZamboni
fonte
1

Limpar cache do Xcode;

Command + Option + Shift + K

Command + Shift + K

(Use os dois porque têm funcionalidades diferentes)

Limpar conteúdo de dados derivados;

Barra de menus -> Janela -> Organizador -> Projetos -> Selecione seu projeto

O painel direito mostra o nome da pasta e também o botão excluir no lado direito permite que você exclua todo o conteúdo dos dados derivados.

Limpar Cache do Simulador;

Barra de menus -> Simulador iOS -> Redefinir conteúdo e configurações

Huseyin
fonte
1

Como eu estava explicando em um comentário sob a resposta validada :

Eu estava testando a adição e remoção de assinaturas de calendário. Em um dispositivo real, você pode remover uma assinatura de calendário em Configurações , Contas , mas este menu não existe no Simulador iOS e eu não queria redefinir todo o simulador.

Então, acabei criando localmente a versão da minha pasta Device com git e executei os seguintes comandos para remover uma assinatura de calendário depois de adicioná-la:

$ git reset HEAD --hard
$ git clean -f

Portanto, as etapas são:

  1. Instale seu aplicativo no simulador iOS e faça o que você precisa fazer
  2. Identifique seu dispositivo ~/Library/Developer/CoreSimulator/Devices/e faça uma cdação nele e, em seguida, git initcrie um repositório git
  3. Quando quiser salvar o estado, execute git commit -a "Message"
  4. Faça o que quer que altere as configurações (por exemplo: adicionar uma assinatura de calendário) e execute seus testes
  5. Desligue o simulador
  6. Faz git reset --hard HEAD
  7. Inicie o simulador, todas as alterações feitas após git commitdesaparecerão.
Thibault D.
fonte
1

No XCode, vá para a opção de menu Window, selecione Devices e então você pode simplesmente deletar aqueles que você não precisa mais.

Simon
fonte
0

Para Xcode <= 5

Eu adicionei o seguinte ao meu ~/.bash_profile

alias cleansim='rm -r ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/*'

Ele simplesmente destrói todos os aplicativos do sim.

Wfbarksdale
fonte
1
Isso não é mais aplicável com o Xcode 6 e superior.
Jeremy Huddleston Sequoia