Xcode, Codesign Ошибка от Jenkins / SSH - "Взаимодействие с пользователем не разрешено"

Я пытаюсь запустить автоматизированную xcodebuild на Jenkins, но сталкиваюсь с ошибкой

Взаимодействие с пользователем не допускается. Команда /usr/bin/codesign завершилась неудачно с кодом выхода 1

Я уже упоминал "Взаимодействие с пользователем не разрешено", пытаясь подписать приложение OSX, используя кодовый знак и другие подобные потоки, но ни одно из решений, похоже, не исправляет ошибку должным образом.


Вот что я уже пробовал:


Вот команды, которые я выполняю:

security unlock-keychain -p <PASSWORD> <KEYCHAIN>
xcodebuild -scheme <SCHEME> -workspace <WORKSPACE> -derivedDataPath <BUILD DIRECTORY> -configuration <CONFIGURATION> "CONFIGURATION_BUILD_DIR=<BUILD DIRECTORY>" "CODE_SIGN_IDENTITY=<CODE SIGN ID>" "PROVISIONING_PROFILE=<PROVISIONING PROFILE>" clean build

Интересно отметить, что сборка проекта на машине работает с указанными выше командами, но попытка выполнить точно такие же команды через ssh (и jenkins) приводит к ошибке.


Заранее спасибо за помощь!

6 ответов

На всякий случай, если кто-то пропустил это. Ответ в связанном вопросе решает проблему. В основном вам нужно бежать security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN", Я запускаю это до сборки, и кодовый знак завершается успешно.

Apple не поддерживает SSH для запуска автоматической сборки headlessтак что запуск через SSH может быть проблемой здесь:

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

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

Вы пытались использовать вместо этого веб-агент?

Поместите ваши ключи в системную цепочку для ключей вместо Login/iCloud/Local Items.

Установите плагин XCode здесь: https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin

Выберите опцию, чтобы разблокировать связку ключей и указать путь к связке ключей. например, ${HOME}/Library/Keychains/login.keychain

Убедитесь, что вы установили переменную окружения $HOME. Исходя из опыта, просто войти в систему под пользователем, как разработчик, было бы проще.

Я прошел через эту проблему с плагином Jenkins XCode.

Я просто проверяю разблокировку брелка?

в

Xcode - Подписание кода и опции цепочки для ключей OS X

чтобы моя сборка работала.

Автоматическая сборка (Jenkins w/remote SSH), в которой используется productsign, работала хорошо, пока мы не обновили сборочную коробку с Yosemite до Sierra.

productsign [4065: 51711] Ошибка настройки подписи RSA: взаимодействие с пользователем запрещено. (-25308)

Мы пробовали разные решения, найденные на SO, но ни одно из них не сработало.

В конце концов, я исправил это следующим образом:

  1. Откройте брелок, перейдите в настройки
  2. Нажмите "Сбросить мою брелок по умолчанию"
  3. Появляется сообщение "операция не разрешена" или подобное
    • Ошибка не имеет никакого смысла, так как пользователь является администратором
    • брелок для входа в систему удаляется, но не создается заново.
  4. Выйдите из системы и войдите снова
    • новая цепочка для ключей входа в систему появляется
    • productign снова работает (через автоматическую сборку)

Обратите внимание, что наш сертификат "Установщик идентификатора разработчика: ACME, Inc (12345ABCDE)" находится в цепочке ключей системы.

Другие вопросы по тегам