Xcode, Codesign Ошибка от Jenkins / SSH - "Взаимодействие с пользователем не разрешено"
Я пытаюсь запустить автоматизированную xcodebuild на Jenkins, но сталкиваюсь с ошибкой
Взаимодействие с пользователем не допускается. Команда /usr/bin/codesign завершилась неудачно с кодом выхода 1
Я уже упоминал "Взаимодействие с пользователем не разрешено", пытаясь подписать приложение OSX, используя кодовый знак и другие подобные потоки, но ни одно из решений, похоже, не исправляет ошибку должным образом.
Вот что я уже пробовал:
Я разрешил всем элементам доступ к цепочке для ключей, и я специально добавил кодовый знак в список "всегда разрешать" (как это сделано здесь /questions/7523199/vzaimodejstvie-s-polzovatelem-ne-razresheno-pri-popyitke-podpisat-prilozhenie-osx-s-ispolzovaniem-koda/7523226#7523226)
Я установил, чтобы цепочка для ключей не блокировалась автоматически по тайм-ауту, как через настройки Keychain Access, так и через команду
security set-keychain-settings -t 3600 -l <KEYCHAIN>
Я пробовал звонить
codesign --sign <CODE SIGN IDENTITY> --force ...
до компиляции проекта (точнее, это решение /questions/7523199/vzaimodejstvie-s-polzovatelem-ne-razresheno-pri-popyitke-podpisat-prilozhenie-osx-s-ispolzovaniem-koda/7523241#7523241), и хотя это успешно создает проект, я не думаю, что кодирование перед компиляцией является правильным или надежным. (редактировать: это также не удалось при запуске из Дженкинс)
Вот команды, которые я выполняю:
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, но ни одно из них не сработало.
В конце концов, я исправил это следующим образом:
- Откройте брелок, перейдите в настройки
- Нажмите "Сбросить мою брелок по умолчанию"
- Появляется сообщение "операция не разрешена" или подобное
- Ошибка не имеет никакого смысла, так как пользователь является администратором
- брелок для входа в систему удаляется, но не создается заново.
- Выйдите из системы и войдите снова
- новая цепочка для ключей входа в систему появляется
- productign снова работает (через автоматическую сборку)
Обратите внимание, что наш сертификат "Установщик идентификатора разработчика: ACME, Inc (12345ABCDE)" находится в цепочке ключей системы.