Xcode 6: avvia il simulatore dalla riga di comando


102

Voglio avviare il simulatore di iPhone dalla riga di comando.

fino ad ora ho utilizzato il comando seguente

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

-SimulateDevice viene utilizzato per avviare un tipo di dispositivo specifico

Ora con Xcode 6 il percorso e l'app sono stati modificati in

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

ma purtroppo l'opzione -SimulateDevice non funziona ora. Posso avviare il simulatore, ma non ho un'opzione per specificare quale avviare

Qualcuno ha trovato delle alternative per questo con Xcode 6?

Risposte:


210

Ho trovato un modo per ottenere ciò che volevo.

Apple ha introdotto uno strumento interessante con Xcode 6!

simctl

simclt ti consente di controllare il simulatore in esecuzione.

eseguire xcrun simctlper ottenere l'elenco dei sottocomandi disponibili. Molte nuove opzioni con cui giocare.

Ora per fare quello che volevo, ecco il comando per avviare il simulatore:

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

-w serve per fornire un tipo di dispositivo e per ottenere l'elenco dei dispositivi disponibili.

Basta eseguire questo:

xcrun instruments -s

Dopo aver avviato il simulatore puoi controllarlo usando simctl

Per installare la tua app:

xcrun simctl install booted <app path>

Per avviare l'app:

xcrun simctl launch booted <app identifier>

Spero che questo ti aiuti.


8
<identificatore app> è l'ID del tuo app bundle
Hugo

Non che io abbia visto, a parte alcuni problemi noti , come detto in esecuzione xcrun simctlelencherà i comandi. A mio parere sono abbastanza autoesplicativi.
daniellmb

1
Non sono riuscito a farlo funzionare utilizzando al xcrun simctl boot <device id>posto dixcrun instruments -w...
CambridgeMike

in qualche modo continuo a ricevere: simctl [23846: 459252] *** Chiusura dell'app a causa di un'eccezione non rilevata 'NSInvalidArgumentException', motivo: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: tentativo di inserire nil oggetto dagli oggetti [0] su installazione simctl avviata
Pooja Shah

2
È necessario specificare il dispositivo reale UDID o nome anziché bootedcome bootedsarà solo scegliere arbitrariamente uno dei dispositivi può essere avviato al simulatore.
devios1

63

Con Xcode 6, se desideri che iOS Simulator.app avvii un dispositivo specifico all'avvio, puoi eseguirlo dalla riga di comando:

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

dove puoi capire l'UDID del dispositivo da cui vuoi avviare:

xcrun simctl list

Con Xcode 7, l'applicazione è stata rinominata Simulator.app, quindi è necessario aggiornare quanto sopra di conseguenza a:

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


Nella versione 6.2 beta, quel comando non funziona più. Ad esempio, invece di avviare il simulatore di iPhone 5s (dato il suo ID), ottengo il simulatore di iPad Air.
Michael Teper

Hmm, abbiamo che non funziona in modo affidabile su 3 macchine diverse. Altre informazioni che posso fornire per aiutare a risolvere i problemi?
Michael Teper

Ho capito cosa sta succedendo. Abbiamo installato Xcode 6.2 beta, ma non lo abbiamo reso l'Xcode predefinito. Quindi, /usr/bin/xcrun simctl listelenca i simulatori disponibili per il normale Xcode. Tuttavia, open -a "iOS Simulator"avvia il simulatore beta 6.2, che si aspetta gli ID dispositivo dal simulatore beta. Come posso specificare quale simulatore lancio (normale o beta)?
Michael Teper

1
aprire /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia

2
@chrisco Non c'è documentazione. Puoi controllare le impostazioni predefinite tramite defaults read com.apple.iphonesimulatore puoi sovrascrivere quelle sulla riga di comando. Simulator.app utilizza solo gli UDID per identificare in modo univoco i dispositivi. Non puoi usare il nome.
Jeremy Huddleston Sequoia

17

Per xcode 7:

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

Ottieni il tuo simulatore udid da xcrun simctl list


12

Per avviare un simulatore con un dispositivo specifico avviato sto usando il sottocomando list devices per ottenere l'elenco di tutti i dispositivi disponibili

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

questo comando produrrà un elenco di dispositivi disponibili con i suoi UDID e stati

Quindi avvio l'app del simulatore specificando un dispositivo con l'opzione -CurrentDeviceUDID

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

NOTA: sostituire con un UDID valido dall'elenco.

Ad esempio, se vogliamo avviare il simulatore con un Ipad (generazione% avviata):

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

AGGIORNAMENTO 23/05/2018

Con Xcode 9.3 CurrentDevice UDID l'opzione non funziona per me, come soluzione alternativa, devo usare simctl per avviare il dispositivo nel simulatore prima di aprirlo.

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

Puoi creare, cancellare, eliminare, avviare, arrestare e aggiornare i simulatori utilizzando simctl.

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

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

Per ottenere l'elenco dei tipi di dispositivi e dei tempi di esecuzione validi

xcrun simctl list devicetypes

xcrun simctl list runtimes

10

Per avviare un simulatore:

xcrun simctl boot "iPhone X"

Si avvierà come modalità senza testa. Per rendere visibile il simulatore:

open -a Simulator

xcrun simctl bootè più semplice di xcrun instruments -w. instrumentsrichiede il nome completo del dispositivo.


8

È possibile specificare l'hardware e la versione iOS con il flag -w. Il formato è

instruments -w "simulator-version"

Ad esempio:

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

Otterrai le combinazioni hardvare-iOS disponibili usando il instruments -w help comando.


2
Utilizzare instruments -s devicesper ottenere un elenco di dispositivi. Tuttavia, una volta ottenuto il nome del dispositivo, la semplice chiamata instruments -w <device>produrrà probabilmente un errore poiché lo strumento tenta di scrivere una traccia nella radice del disco. Potresti voler specificare un percorso per la traccia in cui scriverà correttamente.
Michael Teper

Per approfondire il commento di @ MichaelTeper, utilizzare -Dper specificare una directory di output per i documenti .trace.
devios1

3

Verificato in Xcode 9.4.1

Elenco dei dispositivi in ​​un FORMATO VERAMENTE BELLO: ~/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

Quindi vuoi eseguire (aprire) la tua app Simulator e assicurarti che venga avviata una nuova istanza dell'app.

L'app è qui: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

E il formato che useresti è così:

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

Quindi, se volessi avviare il simulatore sopra, lo farei.

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

Caldo maledetto! L'ho appena testato e funziona su Mac OS 10.11.6. Ora il prossimo trucco è dire al simulatore di aprire la nostra app installata. Non sono ancora arrivato. Spero che questo ti aiuti. Grazie a https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia per la sua spiegazione dettagliata.


Non esiste una "nuova istanza dell'app". In Macintosh, un'applicazione ha una sola istanza per utente connesso. Questa app a istanza singola, ospitata come un unico processo, può ospitare da sola molti "documenti" (in questo caso - simulatori).
Motti Shneor

1

Esegui questo comando. L'app verrà riavviata seguita da modifiche. Non c'è bisogno di ricostruirlo di nuovo.

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

Per l'elenco dei tipi di dispositivo:

ios-sim showdevicetypes

iOS-sim (incluso il gigantesco Nodo) deve essere installato per questo, ed è purtroppo limitato, rispetto alla riga di comando nativa 'scrub simctl'.
Motti Shneor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.