2012-10-18 22 views
9

Sto cercando di automatizzare il processo di creazione di un'app, eseguire test di unità e infine eseguire test dell'interfaccia utente.Script per installare l'app in iOS Simulator

Sto costruendo l'app tramite la riga di comando (xcodebuild -sdk iphonesimulator6.0) in qualche directory.

Come si installa questa app sul simulatore iOS tramite riga di comando (in ~/Libreria/Application Support/iPhone Simulator // Applicazioni)?

ho provato:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator -SimulateApplication MyApp.app/MyApp 

ma questo apre una nuova finestra del Finder chiamato "simulatore iOS non riusciva a trovare l'applicazione per simulare".

risposta

18

Ho creato uno script di shell che installa l'app sul simulatore.

#!/bin/sh 
# Pick a uuid for the app (or reuse existing one). 
if ! [ -f installApp.uuid ]; then 
    uuidgen > installApp.uuid 
fi 
UUID=$(cat installApp.uuid) 
#create supporting folders 
TOPDIR="$HOME/Library/Application Support/\ 
iPhone Simulator/6.0/Applications/$UUID/" 
mkdir -p "$TOPDIR" 
mkdir -p "$TOPDIR/Documents" 
mkdir -p "$TOPDIR/Library" 
mkdir -p "$TOPDIR/tmp" 
mkdir -p "$TOPDIR/$1.app" 

#copy all the app file to the simulators directory 
cp -r * "$TOPDIR/$1.app" 

Come utilizzare questo script per installare l'applicazione:

  1. Modifica questa linea:

    TOPDIR="$HOME/Library/Application Support/iPhone Simulator/6.0/Applications/$UUID/" 
    

    per riflettere la versione di iPhone Simulator si sta utilizzando cioè 6.0/7.1.

  2. Salvare lo script come installApp.sh nella cartella project_name.app/.

  3. Aprire una finestra di terminale ed eseguire installApp dalla directory del progetto.

    • Quindi, se ho il mio project_name.app/ con un progetto all'interno. Digitare nel terminale:

      cd path/to/project_name.app/

    • Poi ./installApp per installare l'applicazione per il simulatore.

ho avuto l'idea da Jeffrey Scofield: Run iOS Simulator from the Command Line


Per iOS 8 e il nuovo XCode Apple ha cambiato alcune cose e ha reso difficile per installare applicazioni tramite il riga di comando. E 'ancora possibile fare:

  1. Prima di tutto bisogna trovare la cartella app (supponendo di aver installato le applicazioni): find ~/Library/Developer/CoreSimulator/Devices -name '*.app'

  2. Ciò elencherà tutti i percorsi che hanno un'applicazione personalizzata installata. Per esempio.

/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app

  1. Non ci sarà più directory UUID genitore con la struttura di cui sopra. Ogni UUID corrisponde a un simulatore per un dispositivo diverso. Apri la directory in alto e troverai un file device.plist. Questo file conterrà il dispositivo si sta simulando:
<dict> 
    ... 
    <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> 
    <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> 
    ... 
</dict> 
  1. Se si desidera installare la vostra applicazione per iPhone-6-Plus è la directory lo farebbe. Esegui lo script della shell sopra per installare l'app. Modificare il percorso TOPDIR a $HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
+0

Purtroppo, questo non sembra funzionare più (sto usando iOS 7.1) – thomers

+0

Spiacente, avrei dovuto essere più specifico. La directory è ancora lì, i file vengono copiati, ma il simulatore non mostra l'app sul trampolino. – thomers

+1

@thomers funziona con iOS 7.1, devi solo mettere questo script nella cartella 'project_name.app' e rinominare' 6.0' in '7.1' (ma spesso si blocca). Quindi esegui 'installApp' da quella directory. Quindi, se ho il mio 'project.app /' con un 'progetto' dentro. Vorrei 'cd project.app /' ed eseguo './installApp project'. Sto anche lasciando questo commento come documentazione migliore per i futuri lettori. – film42

4

Come di Xcode 6, si dovrebbe essere in grado di utilizzare simctl per raggiungere questo obiettivo.

1) Ottenere la lista dei dispositivi disponibili:

xcrun simctl list devices 

1a) Supponendo di aver jq installato, è possibile utilizzare per ottenere solo i dispositivi che sono effettivamente disponibili:

xcrun simctl list devices -j \ 
| jq -rc '.[] | .[] | .[] | select(.availability | contains("(available)")) ' 

1b) O anche filtrare ulteriormente da iPhone o iPad:

xcrun simctl list devices -j \ 
| jq -rc '.[] | .[] | .[] | select(.name | contains("iPhone"), contains("iPad")) | select(.availability | contains("(available)")) ' 

2) Una volta ottenuto il UDID del dispositivo che si desidera installare a:

xcrun simctl install $DEVICE_UDID /path/to/your/app 

2a) o, se si desidera installare solo per il dispositivo di avvio:

xcrun simctl install booted /path/to/your/app 

Dove questo diventa davvero utile è se si consiglia di eseguire la stessa applicazione su tutti i dispositivi:

1) reset/cancella tutti i simulatori:

xcrun simctl erase all 

2) Aprire un'istanza Simulator per ogni prova:

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app 
(Ignore the 'Booted' error and switch hardware.) 

3) Ottenere UDID di dispositivi disponibili si desidera installare:

DEVICES=$(xcrun simctl list devices -j | jq -rc '.[] | .[] | .[] | select(.name | contains("iPhone"), contains("iPad")) | select(.availability | contains("(available)")) | select(.state == "Booted") | .udid ') 

4) Installare l'applicazione (che deve essere costruito per il simulatore appropriata SDK):

for device in DEVICES ; do xcrun simctl install $device /path/to/app ; done 

5) per comodità, lanciare l'applicazione su ogni dispositivo:

for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done 
Problemi correlati