2012-10-18 11 views
9

Próbuję zautomatyzować proces budowania aplikacji, przeprowadzania testów jednostkowych i wreszcie przeprowadzania testów interfejsu użytkownika.Skrypt do zainstalowania aplikacji w Symulatorze iOS

Buduję aplikację za pomocą wiersza poleceń (xcodebuild -sdk iphonesimulator6.0) w jakimś katalogu.

Jak zainstalować tę aplikację na symulatorze iOS za pomocą wiersza poleceń (w ~/Bibliotece/Application Support/iPhone Simulator // Applications)?

Próbowałem:

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

ale otwiera nowe okno Findera nazwie „iOS Simulator nie mogła znaleźć zastosowanie do symulacji”.

Odpowiedz

18

Zrobiłem skrypt powłoki, który instaluje aplikację na symulatorze.

#!/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" 

Jak korzystać z tego skryptu, aby zainstalować aplikację:

  1. zmienić ten wiersz:

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

    odzwierciedlać wersję iPhone Simulator używasz tj 6.0/7.1.

  2. Zapisz skrypt jako installApp.sh w swoim folderze project_name.app/.

  3. Otwórz okno terminala i uruchom installApp z katalogu projektu.

    • Więc jeśli mam swój project_name.app/ z projektem wewnątrz. Wpisz w terminalu:

      cd ścieżka/do/project_name.app/

    • Następnie ./installApp zainstalować aplikację na symulatorze.

wpadłem na pomysł z Jeffrey Scofield: Run iOS Simulator from the Command Line


Dla systemów iOS 8 i nowa XCode Jabłko zmienił kilka rzeczy i trudno było instalować aplikacje za pośrednictwem wiersz poleceń. Jest jeszcze możliwe do zrobienia:

  1. Najpierw trzeba znaleźć katalogu aplikacji (zakładając, że masz zainstalowane aplikacje): find ~/Library/Developer/CoreSimulator/Devices -name '*.app'

  2. Będzie to lista wszystkich ścieżek, które mają zainstalowany niestandardowy aplikacja. Na przykład.

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

  1. nie będzie wiele katalogów UUID macierzystego z powyższej strukturze. Każdy identyfikator UUID odpowiada symulatorowi dla innego urządzenia. Otwórz górny katalog, a znajdziesz plik device.plist. Plik ten będzie zawierał urządzenie jest symulowanie:
<dict> 
    ... 
    <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> 
    <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> 
    ... 
</dict> 
  1. Jeśli chcesz zainstalować aplikację dla iPhone-6-Plus to jest katalog ty zrobi to. Uruchom skrypt powłoki powyżej, aby zainstalować aplikację. Zmienić ścieżkę TOPDIR do $HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
+0

Niestety, to już nie działa (używam iOS 7.1) – thomers

+0

Przepraszam, powinienem być bardziej konkretny. Katalog nadal tam jest, pliki są kopiowane, ale symulator nie wyświetla aplikacji na trampolinie. – thomers

+1

@thomers działa z iOS 7.1, wystarczy umieścić ten skrypt w folderze 'project_name.app' i zmienić nazwę' 6.0' na '7.1' (ale często zawiesza się). Następnie uruchom 'installApp' z tego katalogu. Więc jeśli mam mój 'project.app /' z 'projektem' wewnątrz. Zrobiłbym 'cd project.app /' i uruchomiłbym projekt './installApp'. Pozostawiam ten komentarz jako lepszą dokumentację dla przyszłych czytelników. – film42

4

As z Xcode 6, powinny być w stanie używać simctl do osiągnięcia tego celu.

1) Pobierz listę dostępnych urządzeń:

xcrun simctl list devices 

1a) Zakładając, że masz zainstalowany jq, można go użyć, aby uzyskać tylko te urządzenia, które są aktualnie dostępne:

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

1b) Lub nawet filtrować dalej przez iPhone'a lub iPada:

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

2) Po uzyskaniu UDID urządzenia chcesz zainstalować:

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

2a) lub, jeśli chcesz po prostu zainstalować w uruchomionym urządzeniu:

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

Gdzie to robi się naprawdę przydatny jest, jeśli aby uruchomić tę samą aplikację na wszystkich urządzeniach:

1) Reset/skasować wszystkie symulatory:

xcrun simctl erase all 

2) Otwarte jedna instancja Simulator dla każdego testu:

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

3) Get do identyfikatorów dostępnych urządzeń, które chcemy zainstalować:

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

4) zainstalować aplikację (który musi być zbudowany dla odpowiedniego symulatora SDK):

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

5) dla wygody uruchomić aplikację na każdym urządzeniu:

for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done 
Powiązane problemy