Наша автоматизированная сборка работает на Jenkins. Сама сборка выполняется на подчиненных, причем подчиненные выполняются через SSH.
Я получаю ошибку:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Я попробовал каждое предложение, которое я видел до сих пор в других сообщениях здесь:
- Использование безопасности unlock-keychain непосредственно перед подписью для разблокировки цепочки для ключей.
- Перемещение подписывающего ключа в собственную цепочку для ключей.
- Перемещение подписывающего ключа в связку ключей входа.
- Перемещение подписывающего ключа в системную связку ключей.
- Ручная настройка списков цепочек для ключей только для цепочки для ключей, которая содержит ключ.
Во всех случаях я получаю одну и ту же ошибку.
В попытке диагностировать проблему, я попытался выполнить команду «security unlock-keychain» на своем локальном терминале и обнаружил, что она фактически не разблокирует цепочку для ключей - если я смотрю в Keychain Access, символ блокировки все еще там. Это тот случай, когда я передаю пароль в командной строке или разрешаю ему запрашивать его. Разблокировка той же цепочки для ключей с помощью графического интерфейса предложит мне ввести пароль, а затем разблокировать его. Кроме того, если я бегу «безопасности с замком-брелок», я сделать увидеть блокировку сразу после запуска команды. Это заставляет меня думать, что unlock-keychain на самом деле не работает. Я испытываю такое же поведение на Lion (который мы используем для сборщиков) и Mavericks (на котором я разрабатываю).
Затем я попытался добавить -v ко всем командам безопасности:
list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
"/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.
Из этого может показаться, что списки-брелки - это то, что не работает. Может быть, ни работа. : /
Здесь есть похожий вопрос . Решение интересное - установите «SessionCreate» в true в launchctl. Но я не опираюсь на мастер - мой процесс сборки запускается из SSH на подчиненной сборочной машине. Может быть, есть способ командной строки сделать то, что делает launchctl, когда вы запускаете "SessionCreate"?
источник
Ответы:
Я тоже боролся с этим. Ничего не помогало, пока я не попробовал предложение на http://devnet.jetbrains.com/thread/311971 . Спасибо Ашиш Агравал!
Войдите в свой пользователь сборки через графический интерфейс и откройте Keychain Access. Выберите подписывающий закрытый ключ, щелкните правой кнопкой мыши, выберите «Информация», перейдите на вкладку «Контроль доступа» и выберите «Разрешить всем приложениям доступ к этому элементу».
источник
codesign
в список «Всегда разрешать».security unlock-keychain
это тожеНу, я думаю, что смогу ответить на свой собственный вопрос сегодня, потому что после того, как он ударил его в течение двух с половиной дней, одна из вещей, которые я попробовал, похоже, сработала. Я просто собираюсь отступить от этого сейчас и надеюсь, что он продолжает работать.
По сути, похоже, что это сводится к тому, что на
-d system
самом деле не работает. Поэтому многие ответы на другие вопросы здесь, вероятно, следует обновить, чтобы отразить это.источник
codesign
через ssh без фактического сохранения пароля для входа в некоторый скрипт?.env
файле не так уж и плохо, поскольку.env
файл уже содержит секретные ключи, например. AWS и Heroku. В нашем случае учетные данные кода, связанные со сборкой, хранятся во вновь созданной цепочке для ключей, которая затем удаляется после сборки. Затем он воссоздается снова для следующей сборки. Тем не менее,login
цепочка для ключей все еще должна быть открыта, поэтомуsecurity unlock-keychain -p pass login.keychain
здесь отсутствовала ссылка. Спасибо!Ни один из других ответов не работал для меня.
Что в конечном итоге спасло меня, был этот пост
Подводя итог, это может быть вызвано тайм-аутом по умолчанию 5 минут, который вызовет эту ошибку после долгой сборки.
Исправить:
источник
Confirm
даже после изменения доступа. : /Попробуйте позвонить
security unlock-keychain
иcodesign
в виде однострочной команды. Это помогло мне. Что-то вроде:источник
sshexec
и каждый раз он создает новую сессию ssh.Использование безопасности для создания цепочки для ключей для / usr / bin / codesign
Импортировать сертификат и заставить его работать с кодовым знаком программно - это не вопрос использования логинов или системных цепочек ключей или молитвы богу кодового знака. Вам просто нужно установить правильные разрешения. Я рекомендую создать новый брелок специально для целей кодирования.
В эти дни, чтобы
codesign
не датьerrSecInternalComponent
вам, вы должны получить правильный список разделов (ACL). Я пойду через шаги:Создать брелок
на этом этапе цепочка для ключей разблокирована, но не появится в
Keychain Access
.Добавить новый брелок в список поиска
Добавьте новый брелок в список. Если вы сначала не
list-keychains
получите исходный список, его больше не будетlogin.keychain
в вашем списке поиска.Разблокировать брелок
Это избыточно, если вы создали цепочку для ключей выше, но если цепочка для ключей уже существует, это необходимо.
Удалить значения по умолчанию из брелка
Без указания каких-либо аргументов это установит неограниченное время автоблокировки и удалит автоматическую блокировку в спящем режиме.
Импортируйте сертификаты подписи из .p12
Импортируйте сертификаты и дайте
codesign
доступ через-T
опцию.Установите ACL на связку ключей
Это требование, которое многие люди пропускают. Вы можете увидеть, что делает macOS, используя dump-keychain. Который в случае кодирования требует
apple:
иapple-tool:
.-s
относится к подписанию сертификатов.Gitlab-Runner, Дженкинс и тому подобное
Для любого бегуна типа CI или системы сборки очень важно убедиться, что процесс запущен
launchd
правильно. Убедитесь, что ваш список содержит<SessionCreate> </true>
.Неправильное сопоставление владельца цепочки для ключей с процессом сборки и обеспечение того, что сеанс безопасности будет создан, приведет к разным головным болям. С диагностической точки зрения вы можете представить
list-keychains
и посмотреть, соответствует ли результат вашим ожиданиям.Это с
launchd.plist
man-страницы:SessionCreate <boolean>
UserName <string>
GroupName <string>
Наконец код
Вы можете посмотреть хэш сертификатов подписи используя
find-identity
Codesign рамки, dylib и др.
Создайте комплект приложений
Заключительные замечания - если вы посмотрите на то, как Xcode делает это, они установят
CODESIGN_ALLOCATE
использовать тот, который содержится в Xcode, а не в/usr/bin
.Путь поиска установлен на
${PLATFORM_PATH}:${TOOLCHAIN_PATH}:${PATH}
, где путь PLATFORM - это каталог / usr / bin для заданного целевого SDK, а TOOLCHAIN_PATH - это / usr / bin для инструментов узла Xcode.источник
Поместите свои ключи в Системную цепочку для ключей
источник
Так что это команда, которая работает.
-A
чтобы запретить Mac запрашивать пароль. Импорт в system.keychain не требует графического интерфейса.sudo security import <cert.p12> -k "/Library/Keychains/System.keychain" -P <passphrase> -A
источник
Мой брелок был заблокирован. Он сопротивлялся моим достижениям, чтобы изменить этот факт ...
Keychain Access
->Keychain First Aid
->Repair
, и вуаля !источник
Разблокировка брелка не достаточно. Вы также должны установить доступ к закрытому ключу «Разрешить всем приложениям доступ к этому элементу». И чтобы сделать это из командной строки, необходимо повторно импортировать ключ. Итак, чтобы принять вещи за раз:
Разблокируйте брелок для входа, если он заблокирован. Это не должно быть заблокировано, но в любом случае вот как вы это делаете:
Если по какой-либо причине на вашей машине сборки заблокирована цепочка для ключей входа в систему, и вы не хотите показывать этот пароль в сценарии, то вам следует использовать другую цепочку для ключей. Вы можете создать его на месте и использовать в предыдущей и следующей командах. Чтобы создать его на месте:
Затем импортируйте свои сертификаты и соответствующие закрытые ключи в цепочку ключей входа в систему, используя параметр -A. Обратите внимание, что вам не нужно sudo для всего этого ...
Параметр -A задает для вашего личного ключа значение «Разрешить всем приложениям доступ к этому элементу».
Таким образом, используя все это, вы сможете создать скрипт, который установит необходимый сертификат для создания релиза ipa и подпишет его без запроса. Вы можете сохранить файл .p12 в своем репозитории, чтобы любая машина могла собрать ваш ipa без необходимости ручной настройки.
источник
Помимо разблокировки цепочки для ключей (как упомянуто в других ответах), вам необходимо разрешить доступ всех приложений к токену аутентификации XCode в цепочке для ключей:
источник
Импортируйте ваши ключи в Системную связку ключей. Вы можете использовать эту команду:
источник
Поэтому я попробовал каждый ответ здесь, и что-то не совсем складывалось. Наконец, я понял, когда я перезагружал свой CI-сервис, он работал под другим пользователем, чем я ожидал. Переход на пользователя, который фактически имел доступ к ключу в своей цепочке входа, исправил все. Возможно, это не частая проблема, но я хотел документировать мою конкретную причину этой ошибки, на случай, если это случится с другими.
источник
Для меня ничего не работает, кажется, придется переустановить XCode снова и снова. Дженкинс продолжает повторять одну и ту же ошибку. Вы сэкономите много времени, если просто переместите установку XCode в корзину и переустановите. Убедитесь, что вы выполнили команду codeign из командной строки хотя бы один раз.
Даже после того, как вы получите ту же ошибку, попробуйте установить 'Unlock Keychain?' свойства в Jenkins и укажите путь к своему login.keychain в /Users/$ndomUSER‹/Library/Keychains/login.keychain
Я надеюсь, что Бог будет с тобой после этого.
источник
В моем случае это было вызвано созданием цепочки для ключей с тайм-аутом по умолчанию, равным 300 с, и длинной компиляцией xcode, продолжительностью более 300 с. Обходной путь, для меня, должен был вызвать:
security set-keychain-settings -t <longer timeout in seconds> <keychain>
сразу после создания временной цепочки для ключей.
источник
Я проверил все эти предложения и все еще имел проблемы с использованием Fastlane's
gym
в работе Дженкинса. У меня был установлен сертификат и разблокирована цепочка для ключей, и я смог кодировать на ведомом устройстве, когда я вручную запускал команду codeign на командной строке.В качестве обходного пути, если Jenkins подключается к ведомому устройству, используя JNLP вместо SSH, вы сможете кодировать.
источник
Для меня это происходит, когда вручную добавляется вторая цепочка для ключей, и она заблокирована. По какой-то причине
codesign
пытается получить доступ к заблокированной цепочке для ключей и терпит неудачу, даже если сертификаты находятся в цепочке для ключей входа (и разблокирована). Разблокировка второго решает проблему. Просто не имеет смысла для меня.источник
Попробовав ряд вышеперечисленных решений. Я понял, что одним из факторов, которые я имел, было то, что я начинал сборку с помощью ION Console. Когда я вернулся к созданию сборки из приложения Terminal, все работало просто отлично.
источник