Xcode 6 - Uruchom symulator z wiersza poleceń

103

Chcę uruchomić symulator iPhone'a z wiersza poleceń.

do tej pory korzystałem z poniższego polecenia

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

-SimulateDevice służy do uruchamiania określonego typu urządzenia

Teraz z Xcode 6 ścieżka i aplikacja zostały zmienione na

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

ale niestety opcja -SimulateDevice teraz nie działa. Mogę uruchomić symulator, ale nie mam opcji określania, który mam uruchomić

Czy ktoś znalazł alternatywę dla tego z Xcode 6?

Balaji Sekar
źródło

Odpowiedzi:

210

Znalazłem sposób, aby osiągnąć to, czego chciałem.

Apple wprowadziło ciekawe narzędzie z Xcode 6!

simctl

simclt umożliwia sterowanie działającym symulatorem.

uruchom, xcrun simctlaby uzyskać listę dostępnych podkomend. Wiele nowych opcji do zabawy.

Teraz, aby zrobić to, co chciałem, oto polecenie uruchomienia symulatora:

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

-w służy do podania typu urządzenia i pobrania listy dostępnych urządzeń.

Po prostu wykonaj to:

xcrun instruments -s

Po uruchomieniu symulatora można nim sterować za pomocą simctl

Aby zainstalować aplikację:

xcrun simctl install booted <app path>

Aby uruchomić aplikację:

xcrun simctl launch booted <app identifier>

Mam nadzieję że to pomoże.

Balaji Sekar
źródło
8
<identyfikator aplikacji> to identyfikator pakietu aplikacji
Hugo,
Nie widziałem, poza niektórymi znanymi problemami , jak wspomniano, uruchomienie xcrun simctlwyświetli listę poleceń. Moim zdaniem są one dość oczywiste.
daniellmb
1
Nie byłem w stanie zmusić go do pracy, używając xcrun simctl boot <device id>zamiastxcrun instruments -w...
CambridgeMike,
w jakiś sposób ciągle otrzymuję: simctl [23846: 459252] *** Zamykanie aplikacji z powodu nieprzechwyconego wyjątku „NSInvalidArgumentException”, powód: „*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: próba wstawienia zerowego obiektu z obiektów [0] on simctl install booted
Pooja Shah
2
Należy podać rzeczywiste urządzenie UDID lub nazwa raczej niż bootedjako bootedpo prostu dowolnie wybrać jedną z obutych urządzeń na symulatorze.
devios1
63

W przypadku Xcode 6, jeśli chcesz, aby aplikacja iOS Simulator.app uruchamiała określone urządzenie po uruchomieniu, możesz uruchomić to z wiersza poleceń:

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

gdzie możesz znaleźć UDID urządzenia, z którego chcesz dokonać rozruchu:

xcrun simctl list

W Xcode 7 nazwa aplikacji została przemianowana na Simulator.app, więc należy odpowiednio zaktualizować powyższe do:

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

Jeremy Huddleston Sequoia
źródło
W wersji 6.2 beta to polecenie już nie działa. Na przykład zamiast odpalać symulator iPhone'a 5s (podając jego identyfikator), otrzymuję symulator iPada Air.
Michael Teper,
Hmm, mamy to niezawodnie nie działa na 3 różnych maszynach. Czy mogę podać inne informacje, które pomogą rozwiązać problem?
Michael Teper
Zrozumiałem, co się dzieje. Zainstalowaliśmy Xcode 6.2 beta, ale nie ustawiliśmy go jako domyślnego Xcode. Tak więc /usr/bin/xcrun simctl listwyświetla listę symulatorów dostępnych dla zwykłego Xcode. Jednak open -a "iOS Simulator"uruchamia symulator wersji beta 6.2, który oczekuje identyfikatorów urządzeń z symulatora wersji beta. Jak mogę określić, który symulator mam uruchomić (zwykły czy beta)?
Michael Teper
1
open /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia
2
@chrisco Brak dokumentacji. Możesz sprawdzić ustawienia domyślne za pomocą defaults read com.apple.iphonesimulatori zastąpić dowolne z nich w wierszu poleceń. Simulator.app używa tylko identyfikatorów UDID do jednoznacznej identyfikacji urządzeń. Nie możesz użyć nazwy.
Jeremy Huddleston Sequoia
17

Dla xcode 7:

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

Pobierz swój symulator udid's od xcrun simctl list

TinyTimZamboni
źródło
13

Aby uruchomić symulator z uruchomionym określonym urządzeniem Używam podkomendy Lista urządzeń, aby uzyskać listę wszystkich dostępnych urządzeń

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

to polecenie wyświetli listę dostępnych urządzeń wraz z identyfikatorami UDID i statusami

Następnie uruchamiam aplikację symulatora, określając urządzenie z opcją -CurrentDeviceUDID

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

UWAGA: zastąp poprawnym UDID z listy.

Na przykład, jeśli chcemy uruchomić symulator z iPadem (uruchomiona% generacji):

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

AKTUALIZACJA 23.05.2018

Z Xcode 9.3 CurrentDevice UDID opcja nie działa dla mnie, jako obejście, muszę użyć simctl do uruchomienia urządzenia w symulatorze przed jego otwarciem.

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

Możesz tworzyć, usuwać, usuwać, uruchamiać, wyłączać i aktualizować symulatory za pomocą simctl.

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

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

Aby uzyskać listę prawidłowych typów urządzeń i środowisk wykonawczych

xcrun simctl list devicetypes

xcrun simctl list runtimes
Javier Rojano
źródło
10

Aby uruchomić symulator:

xcrun simctl boot "iPhone X"

Uruchomi się w trybie bezgłowym. Aby symulator był widoczny:

open -a Simulator

xcrun simctl bootjest prostsze niż xcrun instruments -w. instrumentswymaga pełnej nazwy urządzenia.

Estevão Lucas
źródło
8

Możesz określić wersję sprzętu i iOS za pomocą opcji -w. Format to

instruments -w "simulator-version"

Na przykład:

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

Otrzymasz dostępne kombinacje hardvare-iOS za pomocą instruments -w help polecenia.

Neenu
źródło
2
Użyj, instruments -s devicesaby uzyskać listę urządzeń. Jednak po uzyskaniu nazwy urządzenia samo wywołanie instruments -w <device>prawdopodobnie spowoduje błąd, ponieważ instrumenty będą próbowały zapisać ślad w katalogu głównym dysku. Możesz chcieć określić ścieżkę do śledzenia, do którego pomyślnie zapisze.
Michael Teper
Aby rozwinąć komentarz @ MichaelTeper, użyj -Ddo określenia katalogu wyjściowego dla dokumentów .trace.
devios1
3

Zweryfikowano w Xcode 9.4.1

Lista urządzeń w NAPRAWDĘ ŁADNYM FORMACIE: ~/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

Następnie chcesz uruchomić (otworzyć) aplikację Symulator i upewnić się, że została uruchomiona nowa instancja aplikacji.

Aplikacja jest tutaj: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

A format, którego użyjesz, jest taki:

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

Tak więc, gdybym chciał uruchomić powyższy Symulator, zrobiłbym to.

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

Jasna cholera! Właśnie to przetestowałem i działa na Mac OS 10.11.6. Teraz kolejną sztuczką jest nakazanie symulatorowi otwarcia naszej zainstalowanej aplikacji. Jeszcze mnie tam nie ma. Mam nadzieję że to pomoże. Podziękowania dla https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia za szczegółowe wyjaśnienie.

Alex Zavatone
źródło
Nie ma czegoś takiego jak „nowa instancja aplikacji”. W systemie Macintosh aplikacja ma tylko jedną instancję na zalogowanego użytkownika. Ta aplikacja o pojedynczej instancji, hostowana jako pojedynczy proces - może sama obsługiwać wiele „dokumentów” (w tym przypadku - symulatorów).
Motti Shneor
1

Uruchom to polecenie. Aplikacja zostanie ponownie uruchomiona, po czym nastąpią zmiany. Nie trzeba go ponownie odbudowywać.

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

Dla listy devicetypeid:

ios-sim showdevicetypes
Swapnil Mokashi
źródło
W tym celu należy zainstalować iOS-sim (w tym gigantyczny węzeł) i jest niestety ograniczony w porównaniu z natywnym wierszem poleceń „scrub simctl”.
Motti Shneor