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

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

Взаимодействие с пользователем запрещено. Ошибка команды /usr/bin/codesign с кодом выхода 1

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


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

  • Я разрешил всем элементам доступ к цепочке ключей, и я специально добавил код в список "всегда разрешать" (как это делается здесь qaru.site/info/47406/...)

  • Я установил, что брелок не будет автоматически блокироваться с тайм-аутом, как с помощью настроек доступа Keychain, так и с помощью команды

    security set-keychain-settings -t 3600 -l <KEYCHAIN>
    
  • Я попытался позвонить

    codesign --sign <CODE SIGN IDENTITY> --force ...
    

    перед компиляцией проекта (точнее, это решение qaru.site/info/47406/...), и хотя это успешно строит проект, я не думаю, что кодовое кодирование перед компиляцией является правильным или надежным. (edit: это также не удалось при запуске из jenkins)


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

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) вызывает ошибку.


Заранее благодарим за помощь!

Ответы

Ответ 1

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

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

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

Попробовали ли вы использовать веб-агент?

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

в

Xcode - Подписание кода и опции Keychain OS X

чтобы выполнить мой запуск.

введите описание изображения здесь

Ответ 6

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

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

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

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

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

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