¿Cómo puedo reiniciar el simulador de iOS desde la línea de comando?

Necesito resetear mucho el simulador de iPhone, y no he encontrado la forma de hacerlo sin usar el mouse. Es algo pequeño, pero estoy realmente harto de hacerlo y me encantaría tener una forma de hacerlo usando un atajo de teclado.

Aún mejor sería una forma de restablecerlo desde la línea de comandos, así que podría construir un reinicio en una secuencia de comandos de implementación.

No estoy muy familiarizado con iOS o MacOS.

sencillo :

 xcrun simctl erase all 

mejora sugerida por @txulu, simplemente mata el simulador antes de ejecutar la limpieza:

 killall "Simulator" 2> /dev/null; xcrun simctl erase all 

En Xcode 6, NO SOLO ELIMINE LA CARPETA PARA EL SIMULADOR. PODRÁ estropear las cosas y le causará dolor de cabeza.

En Xcode 6, en realidad hay una herramienta para controlar el simulador desde la línea de comandos.

Asegúrate de que la configuración de tu línea de comando esté configurada en Xcode 6

 xcrun simctl 

En Xcode 6, cada dispositivo tiene un GUID / UUID asociado, para restablecer un dispositivo específico, necesita el GUID para ello.

El comando

 xcrun simctl list 

le mostrará todos los dispositivos que ha configurado. La salida se verá así:

 == Devices == -- iOS 7.0 -- iPhone 4s (F77DC0AE-6A6D-4D99-9936-F9DB07BBAA82) (Shutdown) iPhone 5 (5B78FC0D-0034-4134-8B1F-19FD0EC9D581) (Shutdown) iPhone 5s (569E5910-E32D-40E2-811F-D2E8F04EA4EF) (Shutdown) iPad 2 (451DBBD8-A387-4E77-89BF-2B3CD45B4772) (Shutdown) iPad Retina (2C58366B-5B60-4687-8031-6C67383D793F) (Shutdown) iPad Air (50E03D3B-3456-4C49-85AD-60B3AFE4918B) (Shutdown) -- iOS 7.1 -- -- iOS 8.0 -- iPhone 4s (27818821-A0BB-496E-A956-EF876FB514C2) (Shutdown) iPhone 5 (6FBAA7E2-857C-432A-BD03-980D762DA9D2) (Shutdown) iPhone 5s (7675C82B-DE49-45EB-A28D-1175376AEEE9) (Shutdown) iPad 2 (836E7C89-B9D6-4CC5-86DE-B18BA8600E7B) (Shutdown) iPad Retina (EFDD043D-2725-47DC-A3FF-C984F839A631) (Shutdown) iPad Air (9079AD6C-E74D-4D5F-9A0F-4933498B852E) (Shutdown) Resizable iPhone (943CFEDE-A03C-4298-93E3-40D0713652CB) (Shutdown) Resizable iPad (DBA71CA5-6426-484B-8E9B-13FCB3B27DEB) (Shutdown) 

Solo copie el GUID desde dentro de los paréntesis y ejecute xcrun simctl erase

por ejemplo,

 xcrun simctl erase 5B78FC0D-0034-4134-8B1F-19FD0EC9D581 

borraría el dispositivo iOS 7.0, iPhone 5

Pensé que publicaría esto para cualquiera que se encuentre con la misma necesidad. Alguien en reddit me dio esta solución (que probé y funciona muy bien). Tenga en cuenta que esta vez necesita una elipsis después de “Configuración”, no tres períodos (raro).

Este es un AppleScript que se puede invocar desde la línea de comando para reiniciar el simulador:

 tell application "iPhone Simulator" activate end tell tell application "System Events" tell process "iPhone Simulator" tell menu bar 1 tell menu bar item "iOs Simulator" tell menu "iOs Simulator" click menu item "Reset Content and Settings…" end tell end tell end tell tell window 1 click button "Reset" end tell end tell end tell 

Guardar como /path/to/script e invocar con:

 osascript /path/to/script 

COPY-PASTE ANSWER – nota: restablecerá el contenido y la configuración de todos los simuladores disponibles.

Gracias @ Alpine por la inspiración y el conocimiento. Si ejecuta esto en su línea de comando, debería poder restablecer todos los sims disponibles. Esto funciona con Xcode 6.

 # Get the sim list with the UUIDs OUTPUT="$(xcrun simctl list)" # Parse out the UUIDs and saves them to file echo $OUTPUT | awk -F "[()]" '{ for (i=2; i output.txt # Iterate through file and reset sim for UUID in `awk '{ print $1 }' output.txt` do xcrun simctl erase $UUID done 

Eliminar el contenido de

 ~/Library/Application Support/iPhone Simulator/ 

Y estás listo para ir.

La solución de atajo de teclado ya no es relevante y lamentablemente la solución de @Cameron tampoco me funcionó (intenté depurarla sin suerte)

Esto es lo que funciona para mí:

 #!/bin/bash # `menu_click`, by Jacob Rus, September 2006 # # Accepts a list of form: `{"Finder", "View", "Arrange By", "Date"}` # Execute the specified menu item. In this case, assuming the Finder # is the active application, arranging the frontmost folder by date. osascript < 

Lo comprobé con XCode 9. Para cerrar todos los simuladores activos, ejecuta:

 xcrun simctl shutdown all 

Para restablecer todos los simuladores, ejecuta:

 xcrun simctl erase all 

Puede filtrar qué simulador cerrar / restablecer de esta manera:

 xcrun simctl shutdown F36B238F-3ED6-4E10-BB5A-0726151916FA xcrun simctl erase F36B238F-3ED6-4E10-BB5A-0726151916FA 

Encuentre todos los simuladores accesibles (y su GUID) en su máquina de esta manera:

 xcrun instruments -s 

Para ejecutar cualquier simulador por GUID:

 xcrun instruments -w F36B238F-3ED6-4E10-BB5A-0726151916FA -t Blank 

Para instalar la aplicación en el simulador arrancado:

 xcrun simctl install booted /path/to/your.app 

Para eliminar la aplicación del simulador arrancado:

 xcrun simctl uninstall booted /path/to/your.app 

Para iniciar la aplicación en el simulador de arranque:

 xcrun simctl launch booted "com.app.bundleIdentifier" 

“com.app.bundleIdentifier” es su CFBundleIdentifier en Info.plist

Al instalar Xcode, siempre creo un atajo de teclado para “Restablecer contenido y configuración” en el simulador. Un ahorro de tiempo extremadamente útil.

System Preferences > Keyboard > Shortcuts > App Shortcuts > "+"

En el selector de aplicaciones, seleccione “Otro …” para abrir el cuadro de diálogo del selector de aplicaciones.

En este cuadro de diálogo, no puede “Mostrar contenido del paquete” para explorar un .app, por lo que deberá usar Go to Folder través de CmdShiftG. (Primero abra la aplicación desplegable y seleccione Other )

En la versión actual de Xcode, ve a la ruta:

/Applications/Xcode/Contents/Developer/Applications

Seleccione Simulator.app y presione “Agregar”

Para el Menu Title , ingrese Reset Content and Settings...

Para Keyboard Shortcut , presione CMDShiftR

Restablecer contenido y configuración

Escribí un script que restablecerá el contenido y la configuración de todas las versiones y dispositivos para iOS Simulator. Toma los nombres de los dispositivos y los números de versión del menú, por lo que incluirá todos los dispositivos nuevos o versiones de iOS para los que Apple lanza simuladores.

Es fácil de ejecutar manualmente o usar en un script de construcción. Sugiero agregarlo como una secuencia de comandos de ejecución previa a la ejecución antes de la comstackción.

Se basa en gran medida en el guión de Stian anterior, pero no se queda obsoleto con las nuevas versiones de iOS, y elimina el cuadro de diálogo (mejor para las secuencias de comandos de comstackción de automatización y desde la línea de comandos).

https://github.com/michaelpatzer/ResetAllSimulators

He encontrado esta herramienta muy útil llamada “SimulatorManager”: http://tue-savvy.github.io Se restablecerán todos los simuladores por medio de un widget de barra de menú (no estoy seguro de que así se llame) pero además de eso le dará acceso rápido a todos sus datos de aplicación. Realmente ya no puedo vivir sin eso. ¡Difundir la palabra!

Quiero agregar algo a la respuesta de Cameron Brown . Para asegurarme de que se restablece la versión correcta (por ejemplo, iPad, versión 6.1), inicio el simulador de iOS a través de ios-sim :

 version=$(echo "$DESTINATION" | egrep -o "OS=[0-9.]{3}" | cut -d '=' -f 2) simType=$(echo "$DESTINATION" | egrep -o "name=[a-zA-Z]*" | cut -d '=' -f 2 | tr "[AZ]" "[az]") IOS_SIM_BIN=$(which ios-sim) if [ -z $IOS_SIM_BIN ] then echo "ios-sim not installed, please use 'sudo npm install ios-sim -g'" fi echo "Resetting Simulator \"$simType\", version \"$version\"" $IOS_SIM_BIN start --family $simType --sdk $version --timeout 1 osascript /path/to/reset_simulator.applescript 

$DESTINATION puede ser, por ejemplo, "OS=7.0,name=iPad" .

Para que funcione correctamente, adapté un reset_simulator.applescript un poco y eliminé la parte de activación:

 tell application "iPhone Simulator" activate end tell 

Como una ventaja añadida al uso de los comandos xcrun, puede iniciar un dispositivo después de haberlo enumerado con

 xcrun simctl list 

Una vez que tenga la lista que se muestra, ejecute:

 xcrun instruments -w "iPhone 5s (8.1 Simulator) [31E5EF01-084B-471B-8AC6-C1EA3167DA9E]" 

Usamos la siguiente secuencia de comandos python para restablecer el simulador en nuestro servidor de comstackción.

 #!/usr/bin/env python import subprocess import re import os def uninstall_app(): print 'Running %s' % __file__ # Get (maybe read from argv) your bundle identifier eg com.mysite.app_name try: bundle_identifier = '$' + os.environ['BUNDLE_IDENTIFIER'] except KeyError, e: print 'Environment variable %s not found. ' % e print 'Environment: ', os.environ exit(1) print 'Uninstalling app with Bundle identifier: ', bundle_identifier # We call xcrun, and strip the device GUIDs from the output process = subprocess.Popen(['xcrun', 'simctl', 'list'], stdout=subprocess.PIPE) # Read first line line = process.stdout.readline() while True: # Assume first match inside parenthesis is what we want m = re.search('\((.*?)\)', line) if not (m is None): # The regex found something, # group(1) will throw away the surrounding parenthesis device_GUID = m.group(1) # Brutely call uninstall on all listed devices. We know some of these will fail and output an error, but, well.. subprocess.call(['xcrun', 'simctl', 'uninstall', device_GUID, bundle_identifier]) # Read next line line = process.stdout.readline() # Stop condition if line == '': break if __name__ == '__main__': uninstall_app() 

Supone que el identificador del paquete de su aplicación está configurado como una variable de entorno, por ejemplo

 export BUNDLE_IDENTIFIER=com.example.app_name 

tal vez quieras pasar el identificador del paquete de otra manera.

Sobre la base de la mayoría de las respuestas anteriores, estoy usando Keyboard Maestro e hice una pequeña macro para reiniciar el simulador en ejecución y reiniciarlo. Vuelve a centrar la atención en Xcode después de restablecer y reiniciar, por lo que puedo presionar Command+R nuevamente para volver a ejecutar la aplicación, lo que me parece muy conveniente.

enter image description here

El contenido del script de ruby ​​es:

 #!/usr/bin/env ruby list = `xcrun simctl list`.split("\n") list.each do |line| if line =~ /\(Booted\)$/ device = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[1] uuid = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[2] status = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[3] puts uuid break end end 

Aquí hay una tarea de Rakefile para reiniciar un simulador específico. Esto funciona con Xcode 7 ya que las herramientas de línea de comandos de Xcode 7 rompieron el comando xcrun simctl uninstall. Tengo un pequeño método runC personalizado porque me gusta ver el comando de terminal real así como su salida.

 desc "Resets the iPhone Simulator state" task :reset_simulator => [] do deviceDestinationName = 'iPhone 6' #for efficiency since we only target one device for our unit tests puts "...starting simulator reset" runC('killall "iOS Simulator"') runC('killall "Simulator"') runC('xcrun simctl list > deviceList.txt') lines = File.open('deviceList.txt').readlines lines.each do |line| lineStripped = line.strip if (lineStripped=~/[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/) if (lineStripped !~ /unavailable/ && lineStripped.include?("#{deviceDestinationName} (")) puts "Inspecting simulator: #{lineStripped} by making sure it is shut down, then erasing it." needsShutdown = !lineStripped.include?('Shutdown') aDeviceId = lineStripped[/[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/] if (needsShutdown) runC("xcrun simctl shutdown #{aDeviceId}") end runC("xcrun simctl erase #{aDeviceId}") #does not work to just uninstall the app with Xcode 7, do just rely on resetting the device above #`xcrun simctl uninstall #{aDeviceId} com.animoto.AppServiceClientTester` end end end runC('rm deviceList.txt') end #Runs a command and prints out both the command that will be run and the results def runC(command) puts '$ ' + command puts `#{command}` end 

los nombres de destino y el nombre de la aplicación del simulador parecen haber cambiado un poco a xCode6 / iOS8. Aquí está una versión actualizada del osascript de Cameron Brown para xCode6 / iOS8:

 tell application "iPhone Simulator" activate end tell tell application "System Events" tell process "iPhone Simulator" tell menu bar 1 tell menu bar item "iOs Simulator" tell menu "iOs Simulator" click menu item "Reset Content and Settings…" end tell end tell end tell tell window 1 click button "Reset" end tell end tell end tell 

Estoy presente,

El script de reinicio Definitive iOS Simulator (enlace)

enter image description here

Basado en el código de Oded Regev (que se basó en el código “menu_click” de Jacob Rus)

    Intereting Posts