Тайм-аут при запуске тестов xcodebuild под Xcode 6 через SSH

Кажется, у меня проблемы с интеграцией Xcode6 с jenkins, у меня в настоящее время есть эта настройка и работа с Xcode 5.

Когда xcode 6 работает удаленно через SSH, таймаут симулятора, когда я запускаю локально, он преуспевает.

Команда

xcodebuild -workspace PROJECTNAME.xcworkspace -схема BGO_Tests -destination 'platform = iOS Simulator, имя = iPhone 5s' -derivedDataPath./Build clean test

2014-08-19 10: 46: 36.591 xcodebuild [33966: 381f] iPhoneSimulator: время ожидания 120 секунд для > симулятора для загрузки, текущее состояние равно 1.

Не удалось выполнить тестирование:     Целевой тест BGO_Tests обнаружил ошибку (время ожидания 120 секунд для загрузки тренажера, текущее состояние 1

Протестировано с недавним Xcode 6 beta 6

Ответ 1

Наконец-то мне удалось найти хорошее простое решение. JNLP вызывал многочисленные проблемы с нашим сервером jenkins.

Временное решение для тайм-аута SSH через https://corner.squareup.com/2015/07/ios-build-infrastructure.html

"Mavericks (10.9) и Yosemite (10.10) определяют, может ли процесс получить доступ к крючкам доступности через исходное состояние процесса доступа. Путем размещения launchd в списке разрешенных процессов, процессы, запущенные через SSH или Jenkins, имеют доступ к доступности перехватывает систему. Для этого вы можете изменить базу данных TCC по этому принципу. Для внесения изменений в силу требуется перезагрузка.

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

Обновление 8/02/2016 Теперь это исправлено в Xcode 7.2.1 ( "Инструмент командной строки" xcodebuild test больше не будет ждать ожидания запуска Simulator.app)

Ответ 2

Примечание: имена устройств изменены в Xcode 7, поэтому вы больше не указываете их с помощью iPhone 5 (9.1 Simulator), а скорее iPhone 5 (9.1).

Используйте xcrun instruments -s, чтобы получить текущий список устройств, а затем вы можете предварительно запустить его, используя:

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

Prelaunching

Я дошел до того, что то, что я предложил там, больше не работало. В дополнение к внесению изменений, упомянутых здесь, вам нужно запустить симулятор. Xcodebuild ожидает ПЕРЕД. Xcodebuild запущен:

# 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>' 

Старый пост

Эта ошибка исправлена ​​в Xcode 6.3 и выше. Если вы столкнулись с аналогичными проблемами в новом Xcode, это, вероятно, еще одна ошибка.

Apple отслеживает ошибку ID # 18001199:

Контекст, предоставляемый LaunchDaemons, не поддерживается для запуска графического интерфейса Приложения. Служба SSH и настройка по умолчанию для Jenkins: оба реализованы как LaunchDaemons. В более ранних версиях Xcode 5 В этом контексте xcodebuild может запускать тесты на симуляторе iOS, но которая никогда не поддерживалась, и, как вы заметили, больше не работает с Xcode 6.

В отличие от LaunchDaemons, LaunchAgents предоставляют контекст, в котором вы можете запускать Приложения GUI - если пользователь вошел в систему в то время, с окном сервер /Aqua. Преобразование конфигурации Jenkins из будучи LaunchDaemon, чтобы стать LaunchAgent, вопрос. Вы также можете использовать launchd для запуска тестов на iOS-симуляторе с сеанса SSH, либо путем создания LaunchAgent, либо вручную загрузку/запуск, или с помощью "launchctl submit".

Хорошо, после того, как мы немного поработаем вокруг комментариев (спасибо Opal), я узнал, что запуск slave-устройства через JNLP работает.

Как упоминалось многие люди, в настоящее время невозможно запустить unit test поверх SSH, поэтому вы можете сейчас обратиться к агенту JNLP, пока Apple не исправит его.


Если соединение с JNLP все еще не решит его, попробуйте решение, упомянутое в этом comment.

i.e: Запустите их в командной строке:

DevToolsSecurity -enable

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

security authorizationdb write system.privilege.taskport is-developer

См. ссылки здесь и здесь.

Недавно я узнал, что если вы установите новую версию Xcode и не запускаете ее. Симулятор может снова начать отсчет времени. Чтобы решить эту проблему, мне пришлось вручную запустить Xcode и установить дополнительные инструменты, которые она запросила.

Ответ 3

Я закончил решение этой проблемы на Xcode 5 выполнив шаги здесь, по существу работая:

sudo security authorizationdb write system.privilege.taskport allow

Это исключит один класс этих всплывающих окон. Вам также нужно запустить:

sudo DevToolsSecurity -enable

Однако, как только я обновился до Xcode 6, теперь я получаю бесконечное зависание при попытке выполнить тесты xcodebuild через SSH. Они продолжают работать нормально, пока я вошел в консоль и запускаю их с клавиатуры.

Ответ 4

Я столкнулся с той же проблемой. Моя теория работы заключается в том, что SSH на OSX запускается как LaunchDaemon, а LaunchDaemons не могут представлять пользовательский интерфейс; Ссылка.

Мне удалось обойти эту проблему, используя Java Web Start для запуска подчиненного Jenkins. Затем я установил рабочую станцию ​​Jenkins в качестве службы запуска.

К сожалению, подчиненный Jenkins устанавливает себя как "вы уже догадались" - LaunchDaemon, что приводит к одной и той же проблеме: не удается запустить тесты; Ссылка.

Я работал над этой проблемой, перемещая Jenkins Slave LaunchDaemon plist и файлы jar в /System/Library/LaunchDaemons в ~/Library/LaunchAgents и обновлял пути внутри файла plist.

Это позволило мне запустить тесты XCode6 (Beta6) на подчиненном OSX jenkins.

Ответ 5

Я видел эту ошибку раньше, одна из возможностей заключается в том, что, поскольку вы, вероятно, загрузили бета-версию Xcode6 из Интернета (а не в appstore, поскольку ее еще нет), машина, на которой вы пытаетесь запустить ее, покажет всплывающее окно спрашивая вас, действительно ли вы хотите открыть это приложение из Интернета.

То же самое произойдет, когда xcodebuild попытается запустить приложение для симулятора iPhone.

Одна вещь, которую вы, возможно, захотите попробовать, - поделиться экраном с машиной и нажать "Открыть" в этом всплывающем окне.

Если это все еще не работает, я бы попытался:

  • Reset Содержание и настройки симулятора
  • Перезагрузите компьютер и убедитесь, что во время запуска нет симулятора (вы можете просто не открывать приложение при перезапуске)