Xcode 6 - Starten Sie den Simulator über die Befehlszeile

102

Ich möchte den iPhone-Simulator über die Befehlszeile starten.

Bis jetzt habe ich den folgenden Befehl verwendet

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

-SimulateDevice wird verwendet, um einen bestimmten Gerätetyp zu starten

Mit Xcode 6 wurde nun der Pfad und die App geändert

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

Leider funktioniert die Option -SimulateDevice jetzt nicht. Ich kann den Simulator starten, habe aber keine Option, um anzugeben, welcher gestartet werden soll

Hat jemand mit Xcode 6 Alternativen dafür gefunden?

Balaji Sekar
quelle

Antworten:

210

Ich habe einen Weg gefunden, um das zu erreichen, was ich wollte.

Apple hat mit Xcode 6 ein interessantes Tool vorgestellt!

simctl

Mit simclt können Sie den laufenden Simulator steuern.

Führen Sie aus xcrun simctl, um die Liste der verfügbaren Unterbefehle abzurufen. Viele neue Optionen zum Herumspielen.

Um zu tun, was ich wollte, ist hier der Befehl zum Starten des Simulators:

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

-w dient dazu, einen Gerätetyp anzugeben und die Liste der verfügbaren Geräte abzurufen.

Führen Sie einfach Folgendes aus:

xcrun instruments -s

Nach dem Start des Simulators können Sie ihn mit steuern simctl

So installieren Sie Ihre App:

xcrun simctl install booted <app path>

So starten Sie die App:

xcrun simctl launch booted <app identifier>

Hoffe das hilft.

Balaji Sekar
quelle
8
<App-ID> ist Ihre App-Bundle-ID
Hugo
Nicht dass ich gesehen hätte, abgesehen von einigen bekannten Problemen , wie beim Ausführen erwähnt, xcrun simctlwerden die Befehle aufgelistet. Meiner Meinung nach sind sie ziemlich selbsterklärend.
Daniellmb
1
Ich war nicht in der Lage zu bekommen , mit zu arbeiten , xcrun simctl boot <device id>stattxcrun instruments -w...
CambridgeMike
Irgendwie bekomme ich immer wieder: simctl [23846: 459252] *** Beenden der App aufgrund einer nicht erfassten Ausnahme 'NSInvalidArgumentException', Grund: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: Versuch, kein Objekt aus Objekten einzufügen [0] auf simctl install gebootet
Pooja Shah
2
Sie sollten das eigentliche Gerät UDID oder den Namen angeben , anstatt bootedwie bootedwird nur willkürlich eine der gebootet Geräte auf dem Simulator wählen.
Devios1
63

Wenn Sie mit Xcode 6 möchten, dass iOS Simulator.app beim Start ein bestimmtes Gerät startet, können Sie dies über die Befehlszeile ausführen:

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

Hier können Sie die UDID des Geräts ermitteln, von dem Sie booten möchten:

xcrun simctl list

Mit Xcode 7 wurde die Anwendung in Simulator.app umbenannt, daher sollten Sie die obigen Angaben entsprechend aktualisieren:

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

Jeremy Huddleston Sequoia
quelle
In der Beta-Version 6.2 funktioniert dieser Befehl nicht mehr. Anstatt beispielsweise den iPhone 5s-Simulator (anhand seiner ID) zu starten, erhalte ich den iPad Air-Simulator.
Michael Teper
Hmm, wir haben es zuverlässig nicht auf 3 verschiedenen Maschinen. Weitere Informationen, die ich zur Fehlerbehebung bereitstellen kann?
Michael Teper
Ich habe herausgefunden, was passiert. Wir haben Xcode 6.2 Beta installiert, es jedoch nicht zum Standard-Xcode gemacht. So /usr/bin/xcrun simctl listsind die Simulatoren zur Verfügung regelmäßig Xcode. Allerdings open -a "iOS Simulator"startet den 6.2 Beta - Simulator, der den Geräte - IDs aus dem Beta - Simulator erwartet. Wie kann ich angeben, welchen Simulator ich starte (regulär vs. Beta)?
Michael Teper
1
Öffnen Sie /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia
2
@chrisco Es gibt keine Dokumentation. Sie können die Standardeinstellungen über überprüfen defaults read com.apple.iphonesimulatorund alle in der Befehlszeile überschreiben. Simulator.app verwendet nur die UDIDs, um die Geräte eindeutig zu identifizieren. Sie können den Namen nicht verwenden.
Jeremy Huddleston Sequoia
17

Für xcode 7:

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

Holen Sie sich Ihren Simulator udid's von xcrun simctl list

TinyTimZamboni
quelle
12

Um einen Simulator mit einem bestimmten gebooteten Gerät zu starten, verwende ich den Unterbefehl Liste Geräte , um die Liste aller verfügbaren Geräte abzurufen

$ 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)

Dieser Befehl gibt eine Liste der verfügbaren Geräte mit ihren UDIDs und Status aus

Dann starte ich die Simulator-App, die ein Gerät mit der Option -CurrentDeviceUDID angibt

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

HINWEIS: Ersetzen Sie die durch eine gültige UDID aus der Liste.

Wenn wir beispielsweise den Simulator mit einem Ipad starten möchten (% Generation gebootet):

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

UPDATE 23/05/2018

Mit Xcode 9.3 CurrentDevice funktioniert die UDID-Option bei mir nicht. Um dieses Problem zu umgehen, muss ich simctl verwenden, um das Gerät im Simulator zu starten, bevor ich es öffne.

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

Mit simctl können Sie Simulatoren erstellen, löschen, löschen, starten, herunterfahren und aktualisieren.

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

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

Um die Liste der gültigen Gerätetypen und Laufzeiten abzurufen

xcrun simctl list devicetypes

xcrun simctl list runtimes
Javier Rojano
quelle
10

So starten Sie einen Simulator:

xcrun simctl boot "iPhone X"

Es wird als Headless-Modus gestartet. So machen Sie den Simulator sichtbar:

open -a Simulator

xcrun simctl bootist einfacher als xcrun instruments -w. instrumentserfordert den vollständigen Gerätenamen.

Estevão Lucas
quelle
8

Sie können die Hardware- und iOS-Version mit dem Flag -w angeben. Das Format ist

instruments -w "simulator-version"

Zum Beispiel:

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

Mit dem instruments -w help Befehl erhalten Sie die verfügbaren Hardvare-iOS-Kombinationen .

Neenu
quelle
2
Verwenden Sie instruments -s devicesdiese Option , um eine Liste der Geräte abzurufen. Sobald Sie jedoch den Gerätenamen haben, führt ein einfacher Aufruf instruments -w <device>wahrscheinlich zu einem Fehler, da das Gerät versucht, eine Ablaufverfolgung in das Stammverzeichnis Ihres Laufwerks zu schreiben. Möglicherweise möchten Sie einen Pfad für die Ablaufverfolgung angeben, in die erfolgreich geschrieben werden soll.
Michael Teper
-DGeben Sie zum Ausarbeiten des Kommentars von @ MichaelTeper ein Ausgabeverzeichnis für die .trace-Dokumente an.
Devios1
3

Verifiziert in Xcode 9.4.1

Geräteliste in einem WIRKLICH SCHÖNEN FORMAT: ~/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

Anschließend möchten Sie Ihre Simulator-App ausführen (öffnen) und sicherstellen, dass eine neue Instanz der App gestartet wird.

Die App ist da: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

Und das Format, das Sie verwenden würden, ist wie folgt:

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

Wenn ich den obigen Simulator starten wollte, würde ich dies tun.

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

Heiß verdammt! Ich habe es gerade getestet und es funktioniert unter Mac OS 10.11.6. Der nächste Trick besteht nun darin, dem Simulator zu sagen, dass er unsere installierte App öffnen soll. Ich bin noch nicht da Hoffe das hilft. Vielen Dank an https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia für seine ausführliche Erklärung.

Alex Zavatone
quelle
Es gibt keine "neue Instanz der App". Unter Macintosh hat eine Anwendung nur eine Instanz pro angemeldetem Benutzer. Diese Einzelinstanz-App, die als einzelner Prozess gehostet wird, kann selbst viele "Dokumente" (in diesem Fall Simulatoren) hosten.
Motti Shneor
1

Führen Sie diesen Befehl aus. Die App wird neu gestartet, gefolgt von Änderungen. Sie müssen es nicht erneut erstellen.

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

Für Devicetypeid-Liste:

ios-sim showdevicetypes
Swapnil Mokashi
quelle
Dazu muss iOS-sim (einschließlich des humorvollen Knotens) installiert werden, und es ist leider begrenzt, verglichen mit der nativen Befehlszeile 'scrub simctl'.
Motti Shneor