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) находится в системной цепочке ключей.