Limit czasu podczas uruchamiania testów xcodebuild pod Xcode 6 przez SSH

Wydaje mi się, że mam problemy z integracją Xcode6 z jenkins, obecnie mam taką konfigurację i pracuję z Xcode 5.

Z Xcode 6 działa zdalnie przez SSH czas symulatora, gdy uruchamiam lokalnie to się udaje.

Command

XCODEBUILD-workspace PROJECTNAME.xcworkspace-scheme BGO_Tests-destination 'platform = iOS Simulator, name=iPhone 5s' - derivedDataPath ./ Build clean test

2014-08-19 10:46:36.591 xcodebuild[33966: 381f] iPhoneSimulator: Timed out waiting 120 seconds for > simulator to boot, current state is 1.

Testy nie powiodły się: Test docelowy bgo_tests napotkał błąd (czas oczekiwania 120 sekund na uruchomienie symulatora, aktualny stan to 1

Testowane z najnowszym Xcode 6 beta 6

Author: StackRunner, 2014-08-19

5 answers

Uwaga: nazwy urządzeń zostały zmienione w Xcode 7, więc nie należy ich już określać za pomocą iPhone 5 (9.1 Simulator), ale raczej iPhone 5 (9.1).

Użyj xcrun instruments -s, Aby pobrać aktualną listę urządzeń, a następnie możesz ją uruchomić wstępnie za pomocą:

xcrun instruments -w "iPhone 5 (9.1)" || echo "(Pre)Launched the simulator."

Prelaunching

Doszedłem do momentu, w którym to, co zaproponowałem, przestało działać. Oprócz dokonywania zmian wymienionych tutaj, musisz uruchomić symulator xcodebuild oczekuje przed xcodebuild jest uruchomiony:
# First get the UDID you need
xcrun instruments -s

# Then launch it
open -a "iOS Simulator" --args -CurrentDeviceUDID <sim device UDID>

# and wait some time....
sleep 5

# Then launch your unit tests
xcodebuild [...] -destination 'platform=iOS Simulator,name=<device name matching the UDID>' 

Stary post

Ten błąd został naprawiony w Xcode 6.3 i nowszych. Jeśli masz podobne problemy w nowszym Xcode, prawdopodobnie jest to inny błąd.

Apple śledzi błąd ID # 18001199:

Kontekst dostarczony przez LaunchDaemons nie jest obsługiwany do uruchamiania GUI aplikacje. Usługa SSH i domyślna konfiguracja Jenkins to oba zaimplementowane jako LaunchDaemons. We wcześniejszych wersjach Xcode 5 xcodebuild może w tym kontekście uruchamiać testy na symulatorze iOS, ale to nigdy nie była obsługiwana konfiguracja, a jak zauważyłeś, że nie działa już od Xcode 6.

W Przeciwieństwie Do LaunchDaemons, LaunchAgents zapewnia kontekst, w którym można uruchomić Aplikacje GUI-jeśli użytkownik jest zalogowany w tym czasie, z oknem serwer / Aqua session. Konwersja konfiguracji Jenkins z bycie Launchdaemonem do bycia Launchagentem uniknie zgłoszonego problem. Launchd można również używać do uruchamiania testów na symulatorze systemu iOS z SSH sesji, albo przez wytworzenie Launchagenta i ręcznie Ładowanie / uruchamianie tego, lub przez użycie "launchctl submit".

Ok, po trochę więcej grzebania wokół komentarze tutaj (wielkie dzięki Opal), dowiedziałem się, że uruchomienie slave przez JNLP zamiast działa.

Jak Wiele osób wspomniało, obecnie nie jest możliwe uruchomienie testu jednostkowego przez SSH, więc możesz na razie zwrócić się w stronę agenta JNLP, dopóki Apple go nie naprawi.


Jeśli połączenie z JNLP nadal go nie rozwiązuje, spróbuj rozwiązanie wymienione w tym komentarz .

Tj.: uruchom je w wierszu poleceń:

DevToolsSecurity-enable

Sudo dscl . -append / Groups / _developer GroupMembership "user-that-runs-the-sim"

System autoryzacji bezpieczeństwa.przywilej.taskport is-developer

Zobacz referencje tutaj i tutaj .

Niedawno dowiedziałem się, że jeśli zainstalujesz nowy wersja Xcode i nie uruchamiaj go. Symulator może znowu zacząć odliczać czas. Aby to rozwiązać, musiałem ręcznie uruchomić Xcode i zainstalować dodatkowe narzędzia, o które prosił.

 31
Author: Michael Loo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:33:51

Skończyłem rozwiązując to na Xcode 5 przez robiąc kroki tutaj , zasadniczo działa:

sudo security authorizationdb write system.privilege.taskport allow

Spowoduje to wyeliminowanie jednej klasy wyskakujących okienek uwierzytelniania. Musisz też uruchomić:

sudo DevToolsSecurity -enable

Jednak, gdy uaktualniłem do Xcode 6, teraz dostaję nieskończoną zawieszkę podczas próby uruchomienia testów xcodebuild przez SSH. Nadal działają dobrze, o ile jestem zalogowany do konsoli i uruchamiam je z klawiatury.

 5
Author: Tad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 12:37:36

Natknąłem się na ten sam problem. Moja teoria robocza jest taka, że SSH na OSX jest uruchamiany jako LaunchDaemon, a Launchdaemony nie mogą prezentować interfejsu użytkownika; Reference.

Udało mi się obejść ten problem używając Java Web Start do uruchomienia Jenkins slave. Następnie zainstalowałem Jenkins slave jako usługę launchd.

Niestety niewolnik Jenkins instaluje się jako - jak się domyślacie-LaunchDaemon, co prowadzi do tego samego problemu, że nie jest w stanie uruchomić badania; odniesienie .

Obejrzałem ten problem, przenosząc pliki plist i Jar Jenkins Slave LaunchDaemon w /System/Library/LaunchDaemons do ~/Library/LaunchAgents i zaktualizowałem ścieżki wewnątrz pliku plist.

To w końcu pozwoliło mi uruchomić testy XCode6 (Beta6) na OSX jenkins slave.

 3
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-18 11:49:59

W końcu udało mi się znaleźć dobre proste rozwiązanie. JNLP powodowało wiele problemów z naszym serwerem jenkins.

Obejście limitu czasu SSH poprzez https://corner.squareup.com/2015/07/ios-build-infrastructure.html

"Mavericks (10.9) i Yosemite (10.10) określają, czy proces może uzyskać dostęp do hooków dostępności poprzez rodzicielstwo procesu dostępu. Umieszczając launchd na liście dozwolonych procesów, procesy uruchamiane przez SSH lub Jenkins mają dostęp do haków dostępności w całym systemie. Aby to zrobić, możesz zmodyfikować bazę danych TCC, zgodnie z tym gist. Aby zmiana weszła w życie, konieczne jest ponowne uruchomienie komputera."

#!/bin/bash

# This will add lauchd to the list of allowed processes for accessibility access
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceAccessibility','/sbin/launchd',1,1,1,NULL)"

# This outputs the rows in the TCC database
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db 'select * from access'

echo "Restart is required for these changes to take effect"

Aktualizacja 8/02/2016 Jest to teraz naprawione w Xcode 7.2.1 ("narzędzie wiersza poleceń' xcodebuild test ' nie będzie już czekać na symulator.aplikacja do uruchomienia")

 1
Author: StackRunner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-09 21:47:36

Widziałem ten błąd wcześniej, jedną z możliwości jest to, że ponieważ prawdopodobnie pobrał Xcode6 Beta z Internetu (nie appstore jak jego nie jest jeszcze dostępny), urządzenie próbujesz uruchomić go pokaże pop up z pytaniem, czy naprawdę chcesz otworzyć tę aplikację jako jej z Internetu.

To samo stanie się, gdy xcodebuild spróbuje uruchomić aplikację iPhone simulator.

Jedną z rzeczy, których możesz spróbować, jest udostępnienie ekranu maszynie i kliknięcie "Otwórz" w tym pop w górę.

Jeśli to nadal nie działa, to postaram się:

  1. Zresetuj zawartość i ustawienia symulatora
  2. Uruchom ponownie komputer i upewnij się, że żaden symulator nie działa podczas uruchamiania (możesz po prostu nie otwierać ponownie żadnej aplikacji podczas ponownego uruchamiania)
 0
Author: Michael Loo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-21 05:19:13