Xcode 6 - Lancer le simulateur depuis la ligne de commande

102

Je souhaite lancer le simulateur iPhone à partir de la ligne de commande.

jusqu'à présent, j'utilisais la commande ci-dessous

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

-SimulateDevice est utilisé pour lancer un type d'appareil spécifique

Maintenant, avec Xcode 6, le chemin et l'application ont été modifiés en

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

mais malheureusement l'option -SimulateDevice ne fonctionne pas maintenant. Je peux lancer le simulateur, mais je n'ai pas d'option pour spécifier lequel lancer

Quelqu'un a trouvé des alternatives pour cela avec Xcode 6?

Balaji Sekar
la source

Réponses:

210

J'ai trouvé un moyen de réaliser ce que je voulais.

Apple a introduit un outil intéressant avec Xcode 6!

simctl

simclt vous permet de contrôler le simulateur en cours d'exécution.

exécutez xcrun simctlpour obtenir la liste des sous-commandes disponibles. Beaucoup de nouvelles options pour jouer avec.

Maintenant, pour faire ce que je voulais, voici la commande pour lancer le simulateur:

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

-w est de fournir un type de périphérique et d'obtenir la liste des périphériques disponibles.

Exécutez simplement ceci:

xcrun instruments -s

Après avoir lancé le simulateur, vous pouvez le contrôler en utilisant simctl

Pour installer votre application:

xcrun simctl install booted <app path>

Pour lancer l'application:

xcrun simctl launch booted <app identifier>

J'espère que cela t'aides.

Balaji Sekar
la source
8
<identifiant de l'application> est votre identifiant de bundle d'applications
Hugo
Pas que j'ai vu, à part quelques problèmes connus , comme mentionné, l'exécution xcrun simctllistera les commandes. À mon avis, ils sont assez explicites.
daniellmb
1
Je n'ai pas pu le faire fonctionner à la xcrun simctl boot <device id>place dexcrun instruments -w...
CambridgeMike
d'une manière ou d'une autre, je continue à obtenir: simctl [23846: 459252] *** Fin de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: tentative d'insérer un objet nul à partir d'objets [0] sur l'installation simctl démarrée
Pooja Shah
2
Vous devez spécifier l'UDID ou le nom réel du périphérique plutôt que bootedde bootedchoisir arbitrairement l'un des périphériques démarrés sur le simulateur.
devios1
63

Avec Xcode 6, si vous souhaitez que iOS Simulator.app démarre un appareil spécifique lors de son lancement, vous pouvez l'exécuter à partir de la ligne de commande:

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

où vous pouvez déterminer l'UDID de l'appareil à partir duquel vous souhaitez démarrer:

xcrun simctl list

Avec Xcode 7, l'application a été renommée Simulator.app, vous devez donc mettre à jour ce qui précède en conséquence pour:

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

Jeremy Huddleston Séquoia
la source
Dans la version 6.2 beta, cette commande ne fonctionne plus. Par exemple, au lieu de lancer le simulateur iPhone 5s (compte tenu de son identifiant), j'obtiens le simulateur iPad Air.
Michael Teper
Hmm, nous l'avons fait de manière fiable ne fonctionnant pas sur 3 machines différentes. Y a-t-il d'autres informations que je peux fournir pour aider à résoudre les problèmes?
Michael Teper
J'ai compris ce qui se passe. Nous avons installé Xcode 6.2 beta, mais n'en avons pas fait le Xcode par défaut. Donc, /usr/bin/xcrun simctl listrépertorie les simulateurs disponibles pour Xcode standard. Cependant, open -a "iOS Simulator"lance le simulateur bêta 6.2, qui attend les identifiants d'appareils du simulateur bêta. Comment puis-je spécifier le simulateur que je lance (standard ou bêta)?
Michael Teper
1
ouvrir /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia
2
@chrisco Il n'y a pas de documentation. Vous pouvez vérifier les valeurs par défaut via defaults read com.apple.iphonesimulatoret remplacer celles de la ligne de commande. Simulator.app utilise uniquement les UDID pour identifier de manière unique les périphériques. Vous ne pouvez pas utiliser le nom.
Jeremy Huddleston Sequoia
17

Pour xcode 7:

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

Obtenez votre simulateur udid de xcrun simctl list

TinyTimZamboni
la source
12

Pour lancer un simulateur avec un appareil spécifique démarré, j'utilise la sous-commande list devices pour obtenir la liste de tous les appareils 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)

cette commande affichera une liste des périphériques disponibles avec ses UDID et statuts

Ensuite, je lance l'application de simulation en spécifiant un appareil avec l'option -CurrentDeviceUDID

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

REMARQUE: remplacez le par un UDID valide de la liste.

Par exemple, si nous voulons lancer le simulateur avec un Ipad (% generation booted):

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

MISE À JOUR 23/05/2018

Avec Xcode 9.3, l'option UDID CurrentDevice ne fonctionne pas pour moi, comme solution de contournement, je dois utiliser simctl pour démarrer l'appareil dans le simulateur avant de l'ouvrir.

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

Vous pouvez créer, effacer, supprimer, démarrer, arrêter et mettre à niveau des simulateurs à l'aide de simctl.

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

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

Pour obtenir la liste des types d'appareils et des environnements d'exécution valides

xcrun simctl list devicetypes

xcrun simctl list runtimes
Javier Rojano
la source
10

Pour démarrer un simulateur:

xcrun simctl boot "iPhone X"

Il démarrera en mode sans tête. Pour rendre le simulateur visible:

open -a Simulator

xcrun simctl bootest plus simple que xcrun instruments -w. instrumentsnécessite le nom complet de l'appareil.

Estevão Lucas
la source
8

Vous pouvez spécifier la version matérielle et iOS avec l'option -w. Le format est

instruments -w "simulator-version"

Par exemple:

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

Vous obtiendrez les combinaisons hardvare-iOS disponibles en utilisant la instruments -w help commande.

Neenu
la source
2
Utilisez instruments -s devicespour obtenir une liste d'appareils. Cependant, une fois que vous avez le nom du périphérique, un simple appel instruments -w <device>générera probablement une erreur car les instruments tenteront d'écrire une trace à la racine de votre lecteur. Vous souhaiterez peut-être spécifier un chemin pour la trace dans laquelle il écrira avec succès.
Michael Teper
Pour élaborer sur le commentaire de @ MichaelTeper, utilisez -Dpour spécifier un répertoire de sortie pour les documents .trace.
devios1
3

Vérifié dans Xcode 9.4.1

Liste des appareils dans un FORMAT VRAIMENT AGRÉABLE: ~/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

Ensuite, vous souhaitez exécuter (ouvrir) votre application Simulator et vous assurer qu'une nouvelle instance de l'application est lancée.

L'application est ici: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

Et le format que vous utiliseriez est le suivant:

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

Donc, si je voulais lancer le simulateur ci-dessus, je le ferais.

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

Damn hot! Je viens de le tester et cela fonctionne sur Mac OS 10.11.6. Maintenant, la prochaine astuce consiste à dire au simulateur d'ouvrir notre application installée. Je n'y suis pas encore. J'espère que cela t'aides. Merci à https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia pour son explication détaillée.

Alex Zavatone
la source
Il n'existe pas de "nouvelle instance de l'application". Sur Macintosh, une application n'a qu'une seule instance, par utilisateur connecté. Cette application à instance unique, hébergée en tant que processus unique, peut à elle seule héberger de nombreux «documents» (dans ce cas, des simulateurs).
Motti Shneor le
1

Exécutez cette commande. L'application sera redémarrée suivie de modifications. Pas besoin de le reconstruire à nouveau.

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

Pour la liste devicetypeid:

ios-sim showdevicetypes
Swapnil Mokashi
la source
iOS-sim (y compris le gigantesque Node) doit être installé pour cela, et il est malheureusement limité par rapport à la ligne de commande native 'scrub simctl'.
Motti Shneor