Xcode 6: inicia el simulador desde la línea de comandos

102

Quiero iniciar el simulador de iPhone desde la línea de comandos.

hasta ahora he estado usando el siguiente comando

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SimulateDevice

-SimulateDevice se utiliza para iniciar un tipo de dispositivo específico

Ahora con Xcode 6, la ruta y la aplicación se han cambiado a

/Applications/Xcode.app/Contents/Developer/Applications/iOS Simulator.app/Contents/MacOS/iOS Simulator

pero lamentablemente la opción -SimulateDevice no funciona ahora. Puedo iniciar el simulador, pero no tengo una opción para especificar cuál iniciar

¿Alguien encontró alguna alternativa para esto con Xcode 6?

Balaji Sekar
fuente

Respuestas:

210

Encontré una manera de lograr lo que quería.

¡Apple ha introducido una herramienta interesante con Xcode 6!

simctl

simclt le permite controlar el simulador que se está ejecutando.

ejecutar xcrun simctlpara obtener la lista de subcomandos disponibles. Un montón de nuevas opciones para jugar.

Ahora, para hacer lo que quería, aquí está el comando para iniciar el simulador:

xcrun instruments -w "iPhone 5 (8.0 Simulator)"

-w es proporcionar un tipo de dispositivo y obtener la lista de dispositivos disponibles.

Simplemente ejecute esto:

xcrun instruments -s

Después de iniciar el simulador, puede controlarlo usando simctl

Para instalar su aplicación:

xcrun simctl install booted <app path>

Para iniciar la aplicación:

xcrun simctl launch booted <app identifier>

Espero que esto ayude.

Balaji Sekar
fuente
8
<identificador de la aplicación> es su ID de paquete de aplicaciones
Hugo
No es que haya visto, aparte de algunos problemas conocidos , como se mencionó, la ejecución xcrun simctlenumerará los comandos. En mi opinión, se explican por sí mismos.
daniellmb
1
No pude hacer que funcionara usando en xcrun simctl boot <device id>lugar dexcrun instruments -w...
CambridgeMike
de alguna manera sigo obteniendo: simctl [23846: 459252] *** Finalizando la aplicación debido a una excepción no detectada 'NSInvalidArgumentException', razón: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: intento de insertar ningún objeto de los objetos [0] en la instalación simctl arrancada
Pooja Shah
2
Se debe especificar el dispositivo real UDID o nombre en lugar de bootedcomo bootedse acaba de elegir arbitrariamente uno de los dispositivos con botas en el simulador.
devios1
63

Con Xcode 6, si desea que iOS Simulator.app arranque un dispositivo específico cuando se inicie, puede ejecutarlo desde la línea de comando:

open -a "iOS Simulator" --args -CurrentDeviceUDID <DEVICE UDID>

donde puede averiguar el UDID del dispositivo desde el que desea iniciar:

xcrun simctl list

Con Xcode 7, la aplicación pasó a llamarse Simulator.app, por lo que debe actualizar lo anterior en consecuencia para:

open -a Simulator --args -CurrentDeviceUDID <DEVICE UDID>

Jeremy Huddleston Sequoia
fuente
En 6.2 beta, ese comando ya no funciona. Por ejemplo, en lugar de iniciar el simulador de iPhone 5s (dado su ID), obtengo el simulador de iPad Air.
Michael Teper
Hmm, lo tenemos de manera confiable sin funcionar en 3 máquinas diferentes. ¿Alguna otra información que pueda proporcionar para ayudar a solucionar problemas?
Michael Teper
He descubierto lo que está pasando. Instalamos Xcode 6.2 beta, pero no lo convertimos en el Xcode predeterminado. Entonces, /usr/bin/xcrun simctl listenumera los simuladores disponibles para Xcode normal. Sin embargo, open -a "iOS Simulator"lanza el simulador beta 6.2, que espera los ID de dispositivo del simulador beta. ¿Cómo puedo especificar qué simulador ejecuto (regular o beta)?
Michael Teper
1
abra /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia
2
@chrisco No hay documentación. Puede verificar los valores predeterminados a través de defaults read com.apple.iphonesimulatory puede anular cualquiera de los de la línea de comando. Simulator.app utiliza solo los UDID para identificar de forma única los dispositivos. No puedes usar el nombre.
Jeremy Huddleston Sequoia
17

Para xcode 7:

open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID <DeviceUDID>

Obtén tu udid de simulador de xcrun simctl list

TinyTimZamboni
fuente
12

Para iniciar un simulador con un dispositivo específico iniciado, estoy usando el subcomando list devices para obtener la lista de todos los dispositivos disponibles

$ xcrun simctl list devices
== Devices ==
-- iOS 11.2 --
iPhone 5s (E3B6EA43-C805-49C2-9502-A44A465D8DF2) (Shutdown)
iPhone 6 (801E9E11-CA86-473A-9879-4B0742B827FB) (Shutdown)
iPhone 6 Plus (24013349-1A6F-489C-9A68-ABB00EBB4BBF) (Shutdown)
iPhone 6s (1A594D75-146C-4BEA-A250-1FADE7886114) (Shutdown)
iPhone 6s Plus (C2730FA0-11CB-49C9-A087-CB3C1BF1CC3D) (Shutdown)
iPhone 7 (F58B3749-3276-49E5-81C8-EBA1AEA7B242) (Shutdown)
iPhone 7 Plus (98167D8C-8F27-404C-AB02-588D9AAFD071) (Shutdown)
iPhone 8 (96322368-F763-4E0A-8576-ADE9F678211F) (Shutdown)
iPhone 8 Plus (E916D1EE-B67B-4C01-B3F5-C5C80CC4CDF8) (Shutdown)
iPhone SE (ABEFEDDF-7A7C-4B94-9E91-E065170FA47F) (Shutdown)
iPhone X (84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31) (Shutdown)
iPad Air (DCD8CF4B-2C9F-4BA1-952A-ACB9CAD0A84D) (Shutdown)
iPad Air 2 (A47C9A05-233F-450F-9A39-318258E9ADEA) (Shutdown)
iPad (5th generation) (819C058E-64AC-4E73-8F41-2C0F919F8B56) (Booted)

este comando generará una lista de dispositivos disponibles con sus UDID y estados

Luego lanzo la aplicación del simulador especificando un dispositivo con la opción -CurrentDeviceUDID

/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID <DEVICE-UDID>

NOTA: reemplace el con un UDID válido de la lista.

Por ejemplo, si queremos lanzar el simulador con un Ipad (% generación arrancada):

/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID 84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31

ACTUALIZACIÓN 23/05/2018

Con Xcode 9.3, la opción UDID CurrentDevice no me funciona, como solución alternativa, tengo que usar simctl para arrancar el dispositivo en el simulador antes de abrirlo.

xcrun simctl boot 2BF01FC0-7E29-4AF1-ADD1-886DF129A9A9
open -a Simulator 

Puede crear, borrar, borrar, arrancar, apagar y actualizar simuladores usando simctl.

$ xcrun simctl create
Usage: simctl create <name> <device type id> <runtime id>

$ xcrun simctl delete
Usage: simctl delete <device> [... <device n>] | unavailable

Para obtener la lista de tipos de dispositivos y tiempos de ejecución válidos

xcrun simctl list devicetypes

xcrun simctl list runtimes
Javier Rojano
fuente
10

Para arrancar un simulador:

xcrun simctl boot "iPhone X"

Arrancará como modo sin cabeza. Para hacer visible el simulador:

open -a Simulator

xcrun simctl bootes más simple que xcrun instruments -w. instrumentsrequiere el nombre completo del dispositivo.

Estevão Lucas
fuente
8

Puede especificar el hardware y la versión de iOS con el indicador -w. El formato es

instruments -w "simulator-version"

Por ejemplo:

instruments -w "iPhone Retina (3.5-inch) - Simulator - iOS 7.1".

Obtendrá las combinaciones disponibles de hardvare-iOS usando el instruments -w help comando.

Neenu
fuente
2
Úselo instruments -s devicespara obtener una lista de dispositivos. Sin embargo, una vez que tenga el nombre del dispositivo, el simple hecho de llamar instruments -w <device>probablemente producirá un error ya que los instrumentos intentan escribir un rastro en la raíz de su unidad. Es posible que desee especificar una ruta para la traza en la que se escribirá correctamente.
Michael Teper
Para ampliar el comentario de @ MichaelTeper, use -Dpara especificar un directorio de salida para los documentos .trace.
devios1
3

Verificado en Xcode 9.4.1

Lista de dispositivos en un FORMATO REALMENTE BONITO: ~/Library/Developer/CoreSimulator/Devices/device_set.plist

Root
    DefaultDevices
        com.apple.CoreSimulator.SimRuntime.iOS-8-4
             com.apple.CoreSimulator.SimDeviceType.iPad-Retina : AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

Luego, desea ejecutar (abrir) su aplicación Simulator y asegurarse de que se inicie una nueva instancia de la aplicación.

La aplicación está aquí: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

Y el formato que usarías es así:

open -n -a <SimulatorPath> --args -CurrentDeviceUDID <SimDeviceTypeUDID>

Entonces, si quisiera lanzar el simulador anterior, haría esto.

open -n -a /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

¡Maldito calor! Lo acabo de probar y funciona en Mac OS 10.11.6. Ahora, el siguiente truco es decirle al Simulador que abra nuestra aplicación instalada. Aún no he llegado. Espero que esto ayude. Gracias a https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia por su explicación detallada.

Alex Zavatone
fuente
No existe una "nueva instancia de la aplicación". En Macintosh, una aplicación tiene una sola instancia, por usuario que ha iniciado sesión. Esta aplicación de instancia única, alojada como un solo proceso, puede por sí misma albergar muchos "documentos" (en este caso, simuladores).
Motti Shneor
1

Ejecute este comando. La aplicación se reiniciará seguida de cambios. No es necesario reconstruirlo de nuevo.

ios-sim "launch" "/Library/WebServer/Documents/testapp/build/iphone/build/Debug-iphonesimulator/test.app" "--devicetypeid" "iPad-2" "--exit";

Para la lista de tipos de dispositivos:

ios-sim showdevicetypes
Swapnil Mokashi
fuente
iOS-sim (incluido el gigantesco nodo) debe estar instalado para esto, y lamentablemente es limitado, en comparación con la línea de comandos nativa 'scrub simctl'.
Motti Shneor