Limpiar el simulador de iPhone

107

¿Existe una forma sencilla de limpiar el directorio donde xcode implementa una aplicación al compilar para el simulador de iPhone? Tengo una base de datos sqlite que se copia en la carpeta Documentos al inicio si es necesario. El problema es que podría cambiar mi esquema, pero la nueva base de datos no se copiará porque ya existe una.

Idealmente, cada vez que construyo, destruiría los contenidos anteriores. ¿Es esto posible o tengo que hacerlo manualmente?

Travis Jensen
fuente
¿El simulador es compatible con AppleScript?
Rog
Si lo hace. Escribí un AppleScript para iterar a través de todos los simuladores de iOS para cada dispositivo y versión de sistema operativo y restablecer su contenido y configuración: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Respuestas:

91

El simulador instala aplicaciones en:

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

Verifique también:

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

Los archivos y directorios GUID coinciden con las aplicaciones instaladas del simulador.

Elimine manualmente todos esos archivos / directorios para eliminar todas las aplicaciones del simulador.

Sé que hay alguna forma de agregar scripts al proceso de compilación en XCode.

Además, parece que XCode cambia el GUID que usa en cada compilación (el directorio donde se encuentra mi aplicación cambia entre compilaciones en XCode), por lo que intentar eliminar el mismo directorio todo el tiempo no funcionará. Si solo está trabajando en una aplicación a la vez, borrar todo el directorio sería una opción.

PyjamaSam
fuente
2
Asegúrese de revisar la respuesta de @ idStar a continuación. Tiene información actualizada sobre Lion / Xcode4 y un pequeño script para ayudar a automatizar las cosas.
PyjamaSam
Estaba probando agregar / eliminar suscripciones de calendario. En un dispositivo real, puede eliminar una suscripción al calendario en Configuración> Cuentas, pero este menú no existe en iOS Simulator y no quería restablecer todo el simulador. Así que terminé versionando localmente mi carpeta de Dispositivo con git y realicé una git reset HEAD --hard && git clean -fpara eliminar una suscripción de calendario después de agregarla.
Thibault D.
132

De Apples Dev Resources:

Para configurar el contenido del usuario y la configuración del simulador a su estado de fábrica y eliminar las aplicaciones que ha instalado, seleccione Simulador de iPhone> Restablecer contenido y configuración .

Esto se parece a:

Restablecimiento de iOS

j7nn7k
fuente
3
Este no parece limpiar el SQLite
Asped
1
esto no borra el caché del navegador, por ejemplo
Mau
1
Ahora, esta configuración se encuentra enHardware > Reset Content and Settings
Haseeb Eqx
22

La forma en que hago esto es simplemente hacer clic y mantener presionado el ícono de mi aplicación en el simulador; luego, cuando comience a moverse, haga clic en el blanco y negro (x). Aparecerá un mensaje que le preguntará si realmente desea eliminar y simplemente haga clic en Sí. La próxima vez que cree e implemente su aplicación, usará el nuevo sqlite db sin ningún problema y no tendrá que andar con tonterías en el sistema de archivos.

Juan
fuente
Esto no parece funcionar, ¿REALMENTE no elimina los datos del simulador?
Adam
1
Mi error: esto funciona bien (confirmado leyendo el directorio en la respuesta aceptada. Acabo de olvidar el diseño de NSUserDefaults, poco amigable para el usuario de Apple (los valores no configurados no se informan de ninguna manera sensata)
Adam
@quadelirus, creo que tu respuesta es la más adecuada en esta situación.
2013
Esto es exactamente lo que hice, pero no estoy seguro de cómo cerrar la aplicación que ya se abrió en el simulador. Hasta que, a menos que cierre la aplicación, no pueda controlar el simulador.
Wanna Coffee
12

Después de iOS 5 en Mac OS X Lion, puede probar:

  1. Cree un script llamado RemoveSimulatorApps.commandque contenga:
    rm -rf "$ HOME / Biblioteca / Soporte de aplicaciones / Simulador de iPhone / 5.0 / Aplicaciones / *"
    
  2. Guarde este script en un directorio en su PATH.
  3. Haga que el archivo sea ejecutable, como:
    chmod + x RemoveSimulatorApps.command

Supuestos

  • Es posible que desee invocar esto desde los botones favoritos de un teclado, como en un teclado de Logitech o Microsoft con teclas programables (por lo tanto, guardarlo como un archivo .command en lugar de decir, .sh)
  • Está de acuerdo con destruir todo en el simulador de iOS (ideal si solo está trabajando activamente en una aplicación)
  • Todas las notas de los demás se refieren a ser una buena aplicación actualizable, etc. (personalmente me pareció útil, no obstante, porque tengo interruptores de modo de desarrollo que recargan una base de datos en un estado específico en el que estaba tratando de hacer un manejo consistente de robustez / error)
idStar
fuente
1
Este funciona perfectamente, solo recuerde agregar su versión de IOS correcta en la ruta :)
Asped
1
¿Tendría sentido agregar ~ en lugar de una ruta absoluta?
Nikita Leonov
8

puede ser exagerado pero ...

también puede usar el menú y 'Restablecer contenido y configuración ...'

Cordon de zapato
fuente
7

Lo que realmente está tratando de hacer es limpiar su base de datos, si ha cambiado el esquema. Una forma de hacer esto, y lo haría más feliz a largo plazo cuando comience a enviar la versión 2.0, 3.0, etc. de su aplicación, es verificar la versión de su tabla sqlite y, si ha cambiado, descartar la archivo antiguo y utilice el de su paquete.

Encontrar una manera de limpiar el Simulador no ayudará al problema del mundo real de cómo limpiar el iPhone de un cliente cuando envía una nueva versión con un nuevo esquema.

Para obtener puntos adicionales, después de determinar que ha encontrado un esquema antiguo, es posible que desee copiar la nueva base de datos sin destruir la antigua y cargar cualquier dato interesante de la base de datos antigua en la nueva. Luego elimine la vieja base de datos. De esa manera, puede conservar las adiciones de sus usuarios a la base de datos.

Mahboudz
fuente
En general, estoy de acuerdo con usted cuando habla de actualizaciones de versiones, pero en medio del desarrollo de cualquier versión en particular, esto es mucho más general de lo necesario. El esquema de la base de datos puede cambiar por compilación, y la necesidad de escribir un código de conversión para cada compilación es simplemente incorrecto.
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
fuente
6

Si está utilizando Xcode 9 -> Barra de menú -> Hardware -> Borrar todo el contenido y la configuración

Xcode -> Hardware -> Borrar todo el contenido y la configuración

Harald
fuente
5

A partir de Xcode 6, puede hacer esto desde la línea de comando con: xcrun simctl erase

Además, la aplicación iOS Simulator (tanto la versión Xcode 6 como las versiones anteriores) tiene un elemento de menú llamado "Restablecer contenido y configuración" que se puede usar para borrar el dispositivo actualmente iniciado.

Jeremy Huddleston Sequoia
fuente
pero se puede ejecutar en cada compilación automáticamente? por ejemplo para pruebas?
Daniel Gomez Rico
Suponiendo que está haciendo sus pruebas usando un script, ciertamente podría agregar 'xcrun simctl erase <UDID>' a ese script cuando sea apropiado ...
Jeremy Huddleston Sequoia
Sí, eso es exactamente lo que dije.
Jeremy Huddleston Sequoia
5

Esto funciona con 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
fuente
3

A partir de Xcode 6:

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

TinyTimZamboni
fuente
1

Borrar caché de Xcode;

Comando + Opción + Mayús + K

Comando + Mayús + K

(Use ambos porque tienen una funcionalidad diferente)

Borrar contenido de datos derivados;

Barra de menú -> Ventana -> Organizador -> Proyectos -> Seleccione su proyecto

El panel derecho muestra el nombre de la carpeta y también el botón Eliminar en el lado derecho le permite eliminar todos los contenidos de datos derivados.

Borrar caché del simulador;

Barra de menú -> Simulador de iOS -> Restablecer contenido y configuración

Huseyin
fuente
1

Como estaba explicando en un comentario debajo de la respuesta validada :

Estaba probando agregar y eliminar suscripciones de calendario. En un dispositivo real, puede eliminar una suscripción de calendario en Configuración , Cuentas , pero este menú no existe en el Simulador de iOS y no quería restablecer todo el simulador.

Así que terminé versionando localmente mi carpeta de Dispositivo con git y realicé los siguientes comandos para eliminar una suscripción de calendario después de agregarla:

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

Entonces los pasos son:

  1. Instale su aplicación en el simulador de iOS y haga lo que tenga que hacer
  2. Identifique su dispositivo ~/Library/Developer/CoreSimulator/Devices/y hágale una cd, luego git initcree un repositorio de git
  3. Una vez que desee salvar el estado, realice git commit -a "Message"
  4. Haga lo que sea que cambie la configuración (por ejemplo, agregar una suscripción al calendario) y realice sus pruebas
  5. Apaga el simulador
  6. Hacer git reset --hard HEAD
  7. Inicie el simulador, todos los cambios realizados después git commitdesaparecen.
Thibault D.
fuente
1

En XCode, vaya a la opción de menú Ventana, seleccione Dispositivos y luego puede eliminar los que ya no necesita.

Simón
fuente
0

Para Xcode <= 5

Agregué lo siguiente a mi ~/.bash_profile

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

Simplemente destruye todas las aplicaciones de la simulación.

wfbarksdale
fuente
1
Esto ya no es aplicable con Xcode 6 y superior.
Jeremy Huddleston Sequoia