Xcode 6 - Inicie o simulador da linha de comando

102

Quero iniciar o simulador do iPhone na linha de comando.

até agora tenho usado o comando abaixo

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

-SimulateDevice é usado para iniciar um tipo de dispositivo específico

Agora, com o Xcode 6, o caminho e o aplicativo foram alterados para

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

mas, infelizmente, a opção -SimulateDevice não está funcionando agora. Eu posso iniciar o simulador, mas não tenho a opção de especificar qual iniciar

Alguém encontrou alguma alternativa para isso com o Xcode 6?

Balaji Sekar
fonte

Respostas:

210

Encontrei uma maneira de conseguir o que queria.

A Apple lançou uma ferramenta interessante com o Xcode 6!

simctl

simclt permite que você controle o simulador que está rodando.

execute xcrun simctlpara obter a lista de subcomandos disponíveis. Muitas opções novas para brincar.

Agora, para fazer o que eu queria, aqui está o comando para iniciar o simulador:

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

-w fornece um tipo de dispositivo e obtém a lista de dispositivos disponíveis.

Basta executar isto:

xcrun instruments -s

Depois de lançar o simulador, você pode controlá-lo usando simctl

Para instalar seu aplicativo:

xcrun simctl install booted <app path>

Para iniciar o aplicativo:

xcrun simctl launch booted <app identifier>

Espero que isto ajude.

Balaji Sekar
fonte
8
<app identifier> é o id do pacote de aplicativos
Hugo
Não que eu tenha visto, além de alguns problemas conhecidos , como mencionei, a execução xcrun simctllistará os comandos. Na minha opinião, eles são bastante autoexplicativos.
daniellmb
1
Não consegui fazê-lo funcionar usando em xcrun simctl boot <device id>vez dexcrun instruments -w...
CambridgeMike
de alguma forma, continuo recebendo: simctl [23846: 459252] *** Encerrando o aplicativo devido à exceção não capturada 'NSInvalidArgumentException', motivo: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: tentativa de inserir objeto nil de objetos [0] na instalação simctl inicializada
Pooja Shah
2
Você deve especificar o dispositivo real UDID ou nome, em vez de bootedcomo bootedvai apenas escolher arbitrariamente um dos dispositivos inicializados no simulador.
devios1
63

Com o Xcode 6, se você deseja que o iOS Simulator.app inicialize um dispositivo específico quando ele for iniciado, você pode executar isso na linha de comando:

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

onde você pode descobrir o UDID do dispositivo de onde deseja inicializar:

xcrun simctl list

Com o Xcode 7, o aplicativo foi renomeado como Simulator.app, então você deve atualizar o acima de acordo com:

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

Jeremy Huddleston Sequoia
fonte
Na versão 6.2 beta, esse comando não funciona mais. Por exemplo, em vez de iniciar o simulador do iPhone 5s (dado seu ID), recebo o simulador do iPad Air.
Michael Teper
Hmm, ele não funciona de forma confiável em 3 máquinas diferentes. Qualquer outra informação que eu possa fornecer para ajudar a solucionar o problema?
Michael Teper
Eu descobri o que está acontecendo. Instalamos o Xcode 6.2 beta, mas não o tornamos o Xcode padrão. Portanto, /usr/bin/xcrun simctl listlista os simuladores disponíveis para o Xcode regular. No entanto, open -a "iOS Simulator"inicia o simulador beta 6.2, que espera os IDs de dispositivo do simulador beta. Como posso especificar qual simulador devo lançar (regular vs. beta)?
Michael Teper
1
abra /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia
2
@chrisco Não há documentação. Você pode verificar os padrões via defaults read com.apple.iphonesimulatore pode substituir qualquer um na linha de comando. Simulator.app usa apenas os UDIDs para identificar exclusivamente os dispositivos. Você não pode usar o nome.
Jeremy Huddleston Sequoia
17

Para xcode 7:

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

Obtenha seu udid do simulador de xcrun simctl list

TinyTimZamboni
fonte
12

Para lançar um simulador com um dispositivo específico inicializado, estou usando o subcomando list devices para obter a lista de todos os dispositivos disponíveis

$ 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 irá mostrar uma lista de dispositivos disponíveis com seus UDIDs e status

Então eu inicio o aplicativo simulador especificando um dispositivo com a opção -CurrentDeviceUDID

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

NOTA: substitua por um UDID válido da lista.

Por exemplo, se quisermos iniciar o simulador com um Ipad (% geração inicializada):

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

ATUALIZAÇÃO 23/05/2018

Com a opção UDID do Xcode 9.3 CurrentDevice não está funcionando para mim, como uma solução alternativa, eu tenho que usar simctl para inicializar o dispositivo no simulador antes de abri-lo.

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

Você pode criar, apagar, excluir, inicializar, desligar e atualizar 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 obter a lista de tipos de dispositivos e tempos de execução válidos

xcrun simctl list devicetypes

xcrun simctl list runtimes
Javier Rojano
fonte
10

Para inicializar um simulador:

xcrun simctl boot "iPhone X"

Ele será inicializado como um modo sem cabeça. Para tornar o simulador visível:

open -a Simulator

xcrun simctl booté mais simples do que xcrun instruments -w. instrumentsrequer o nome completo do dispositivo.

Estevão lucas
fonte
8

Você pode especificar o hardware e a versão do iOS com o sinalizador -w. O formato é

instruments -w "simulator-version"

Por exemplo:

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

Você obterá as combinações de hardware-iOS disponíveis usando o instruments -w help comando.

Neenu
fonte
2
Use instruments -s devicespara obter uma lista de dispositivos. No entanto, uma vez que você tenha o nome do dispositivo, simplesmente chamar instruments -w <device>provavelmente resultará em um erro, já que o instrumento tenta gravar um rastreamento na raiz de sua unidade. Você pode querer especificar um caminho para o rastreamento no qual ele gravará com êxito.
Michael Teper
Para elaborar o comentário de @MichaelTeper, use -Dpara especificar um diretório de saída para os documentos .trace.
devios1
3

Verificado no Xcode 9.4.1

Lista de dispositivos em um FORMATO REALMENTE AGRADÁVEL: ~/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

Em seguida, você deseja executar (abrir) seu aplicativo Simulador e certificar-se de que uma nova instância do aplicativo seja iniciada.

O aplicativo está aqui: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

E o formato que você usará é este:

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

Então, se eu quisesse iniciar o Simulador acima, faria isso.

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

Cacete! Acabei de testá-lo e ele funciona no Mac OS 10.11.6. Agora, o próximo truque é dizer ao Simulador para abrir nosso aplicativo instalado. Ainda não cheguei lá. Espero que isto ajude. Agradecimentos a https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia por sua explicação detalhada.

Alex Zavatone
fonte
Não existe "nova instância do aplicativo". No Macintosh, um aplicativo tem apenas uma instância, por usuário conectado. Este aplicativo de instância única, hospedado como um único processo - pode por si só hospedar muitos "documentos" (neste caso - simuladores).
Motti Shneor
1

Execute este comando. O aplicativo será reiniciado seguido de alterações. Não há necessidade de reconstruí-lo novamente.

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

Para lista de tipos de dispositivos:

ios-sim showdevicetypes
Swapnil Mokashi
fonte
iOS-sim (incluindo o gigantesco Node) deve ser instalado para isso, e infelizmente é limitado, em comparação com a linha de comando nativa 'scrub simctl'.
Motti Shneor