Ошибка команды Xcode / usr / bin /codeign с кодом выхода 1: errSecInternalComponent

105

Я пытаюсь добавить новый профиль подготовки в свой Xcode, чтобы протестировать приложение на устройстве. Вот шаги, которые я выполнил:

  1. Удалены все сертификаты и профили обеспечения.

  2. Создать / добавить сертификат разработчика IOS

  3. Добавить мое устройство IOS в Интернет

  4. Создать профиль подготовки IOS

  5. Добавить профиль подготовки IOS

  6. Чистое приложение

  7. Собрать и запустить приложение

  8. Задайте Codesigning nd Provisioning Profile в настройках сборки

  9. Много гуглить> безуспешно

Вот ошибка, которую я получаю:

CSSM_SignData returned: 800108E6
/Users/alexpelletier/Library/Developer/Xcode/DerivedData/MyExpense-efnqzvoqwngzcmazaotyalepiice/Build/Products/Debug-iphoneos/MyExpense.app:     errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Алекс Пеллетье
источник
1
Ошибка возникает из-за несоответствия в настройке профиля обеспечения, сертификатов и идентификатора пакета. Убедитесь, что ваш PP, идентификатор пакета и сертификаты правильно настроены и правильно назначены в itunes connect и в приложении.
Alex Pelletier
1
Я столкнулся с этой проблемой, переходя с Xcode 11.2.1 на 11.3 во время подписания кода созданных мной фреймворков. Профили обеспечения не задействованы. Ответ Мохита Манхаса прояснил это.
Даниэль Чжан,
Это происходит, если вы используете SSH и codeign не разрешает доступ к закрытому ключу в Связке ключей. Чтобы проверить это, найдите ключ в Связке ключей, щелкните правой кнопкой мыши и выберите «Получить информацию», переключитесь на «Контроль доступа» и посмотрите, есть ли приложение «codeign» в списке «Всегда разрешать доступ». См. Этот комментарий github.com/electron-userland/electron-builder/issues/… Я запустил скрипты один раз из графического интерфейса и щелкнул «Всегда разрешать» для доступа к ключу, после чего он начал работать.
ArticIceJuice

Ответы:

241

Откройте Keychain Access , затем в меню File выберите Lock All Keychains .

Затем вернитесь в Xcode, очистите и перестройте. Вам снова будет предложено ввести пароль, чтобы разблокировать связку ключей.

После этого, если у вас нет других проблем с компиляцией, все будет успешно!

Мохит Манхас
источник
7
Невероятно, что эта глупая блокировка и разблокировка помогает! Спасибо
Джосип Б.
8
Это должен быть принятый ответ. Намного разумнее, чем перезагрузка!
yonix
3
У меня тоже сработало. Создайте apk для Android 30 секунд, создайте приложение для iOS .. 2hs.
Гейб
1
Серьезно WTF ?! Спасибо!
Питер Н Льюис
1
@FredericP Я недавно сменил пароль. Таким образом, между последней разблокировкой связки ключей с помощью xcode и паролем, используемым для этого, было некоторое взаимодействие.
sherrellbc
77

Похоже на ошибку в механизме подписи кода, перезапуск вашего Mac должен решить проблему

сигабрт
источник
другой случай, но похожее сообщение об ошибке - перезагрузка прошла.
mikus 09
Спустя почти четыре года, он все еще работает! Я забыл Золотое Правило - "Если сомневаетесь, перезагрузитесь!"
Алан
2
Если вы ждете менее деструктивного решения, см. Ответ
Мохита Манхаса
не помогло мне
Ануп Вайдья
70

Это происходит, когда связка ключей входа в систему заблокирована. Чтобы разблокировать связку ключей входа в систему, запустите:

security unlock-keychain login.keychain

Если ваша связка ключей защищена паролем, укажите пароль с помощью -pопции.

Затем попробуйте снова выполнить сборку или операцию подписания кода. Этот код ошибки описан в документации Apple как внутренняя ошибка, поэтому вполне возможно, что это происходит и в других случаях.

cbracken
источник
1
К сожалению, это решение кажется полностью циклическим: для выполнения указанной выше команды требуется ввести пароль, что, очевидно, недопустимо в неинтерактивном сеансе (например, при выполнении этого с помощью агента CI, такого как Jenkins).
Конрад Рудольф
Это хороший момент - как вы говорите, это не подходит для неинтерактивного сеанса, такого как CI-бот. Это полезно при запуске удаленных сборок в сеансе командной строки (например, через ssh).
cbracken
3
У нас была аналогичная проблема с Jenkins, и в дополнение к тому, что упомянуто в приведенной выше команде, нам пришлось передать пароль в качестве аргумента команды, поэтому мы сделали «security unlock-keychain -p $ KeychainPassword <login-keychain>», где вы можете легко безопасно хранить KeychainPaasword на Jenkins.
Мохит Tater
1
Я не могу отблагодарить вас за этот пост. Я потратил несколько дней, пытаясь понять причину codesignнеудачи, и это волшебная команда, которая спасла меня !!!
Dimu4
32

Была такая же проблема с High Sierra/ Xcode 9.4.1, все попытки войти закончилисьerrSecInternalComponent

    • Перейти к Связке ключей
    • Перейти к связке ключей входа
    • Выберите категорию «Мои сертификаты».
    • Найдите сертификат, которым вы подписываете, и разверните его, чтобы увидеть ключ.
    • Дважды щелкните ключ
    • Перейдите во вкладку «Контроль доступа».
    • Обновите контроль доступа к ключу на "Разрешить всем приложениям доступ к этому элементу"

Альтернативно:

запустите командуcodeign на терминале Mac и "Всегда разрешать" / usr / bin /codeign доступ к ключу

  1. Если вы пытаетесь подписаться из ssh / CI, вам также необходимо запустить

    security unlock-keychain login.keychain

    прежде чем пытаться подписать пакет приложений

Равновесие
источник
Не могли бы вы подробнее рассказать о «обновлении управления доступом к ключу на« Разрешить всем приложениям доступ к этому элементу »? Я даже не понимаю, что это означает»
Джон МакКланг
2
@JonMcClung Откройте доступ к связке ключей, перейдите в раздел Связка ключей входа - мои сертификаты. Найдите сертификат, которым вы подписываете, разверните его, чтобы увидеть ключ. Дважды щелкните по клавише, и вы должны увидеть вкладку «Контроль доступа». Переключатель, чтобы разрешить, есть
Равновесие
5
@KonradRudolph security unlock-keychain -p <password> login.keychainиз CI.
Equilibrium
1
@KonradRudolph, нет необходимости предоставлять пароль для безопасности разблокировки-связки ключей, если вы разрешили codeign для доступа к закрытому ключу. Достаточно оставить в качестве пароля пустую строку.
Камил Шостаковски
1
@KonradRudolph все еще, вероятно, не идеален, но вы можете переместить эту команду разблокировки ~/.bash_profileтак, чтобы связка ключей разблокировалась при запуске клиента SSH, но вам не нужна ссылка на нее из вашего сценария CI
sschilli
17

Я столкнулся с той же проблемой, я перезапускаю свою macOS, и она работает.

В Китае разработчики говорят:

Небольшие проблемы, просто перезапустите. Большие проблемы, следует переустановить.

Иногда сказанное выше может вам очень помочь!

ifeegoo
источник
7
В Америке говорят: «Никогда не перезагружайте старое оборудование»,
Брант
@Brant Почему у тебя такое высказывание? Это интересно.
ifeegoo
Шучу - но у нас была похожая проблема, и в конце концов просто пришлось перезагрузить старый сервер.
Brant
1
@ifeegoo Старые серверы могут иметь проблемы с загрузкой резервных копий (может быть, ОС обновилась сама? Может быть, кто-то сломал сценарии загрузки?) или требуется некоторая ручная процедура запуска, о которой никто из доступных не знает. Вы не можете знать, пока не попробуете. Может быть, bios rom испортилась. Это просто одна из тех вещей, которые не должны быть проблемой в должным образом поддерживаемой среде, но вы на самом деле не знаете, прежде чем пытаться, и не хотели бы пытаться.
Ласси Киннунен
1
@LassiKinnunen Вы правы, мы мобильные разработчики для Android и iOS, поэтому в такой ситуации серверы не важны. Серверы действительно опасны, это не так.
ifeegoo
8

Если это помогает кому-то другому, я столкнулся с errSecInternalComponentошибкой, codesignпотому что я запускал его через сеанс ssh на моем компьютере MacOS. Выполнение той же команды из окна терминала на самой машине MacOS сработало.

Предположительно это связано с тем, что codesignтребуется доступ к закрытому ключу из цепочки ключей входа в систему.

Запуск security unlock-keychain login.keychain(как объяснил ответ cbracken ) из того же сеанса также должен работать.

Jamesdlin
источник
Это очень странно, даже запуск команды разблокировки связки ключей, кажется, молча терпит неудачу, потому что кодовый знак по-прежнему не работает. Но выполнение тех же команд с помощью удаленного рабочего стола (вместо SSH) работает нормально.
Макс
2

Если вы пытаетесь подписаться с помощью команды запуска ssh:

security unlock-keychain login.keychain

прежде чем пытаться подписать пакет приложений

или из пользовательского интерфейса

Обновите контроль доступа к ключу на "Разрешить всем приложениям доступ к этому элементу"

Спасибо @Equilibrium и @Jon McClung

Стас С
источник
2

У меня была такая же проблема. Обнаружена проблема с подписью кода приложения.

Opened the developer account and accepted the updated agreement and it worked.  

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

сахилджайн
источник
2

Я побежал, security unlock-keychain login.keychainно мой пароль для входа не сработал. Итак, я перезагрузился, а затем снова запустил Xcode, и это сработало. Выполнение команды тоже работает. Странная проблема.

sunapi386
источник
2

Как указано в @Equilibrium в одном из комментариев, если вы находитесь в командной строке env. как и Дженкинс (мой случай), вам может потребоваться передать пароль команде безопасности-разблокировки, упомянутой в решениях.

Поэтому вместо использования

security unlock-keychain login.keychain

использование:

security unlock-keychain -p <login-keychain-password> <path-to-login-keychain>

где цепочка ключей пути к логину может быть $ HOME / Library / Keychains / login.keychain (мой случай) или просто login.keychain

Мохит Татер
источник
Ваш ответ основан на ответе @equilibrium, но я пойму его. На Bamboo CI мне помогли команда security unlock-keychain -p {account-password} login.keychain
A.Kant
2

для всех, кто столкнулся с этой проблемой от jenkins и ssh:

высокая вероятность того, что вы не предоставили доступ к закрытому ключу в цепочке для ключей, я пробовал, но не уверен, почему все это не работает:

  1. безопасный импорт файла .p12 с -A или -T / usr / bin / codeign
  2. список-разделов-ключей-наборов безопасности -S инструмент-яблок:, яблоко:, codeign: -s -k # {пароль} # {keychainPath}
  3. измените весь профиль обеспечения на [UUID] .mobileprovision и скопируйте их в '~ / Library / MobileDevice / Provisioning \ Profiles' на сервере jenkins
  4. очистить производные данные и перезагрузить сервер jenkins
  5. убедитесь, что связка ключей по умолчанию - это связка ключей входа в систему, и разблокируйте ее.

окончательно решено:

1.ssh [пользователь] @ [jenkinsServerIP] -L 5900: localhost: 5900, войти на сервер jenkins

2. открыть vnc: // localhost

это запустит удаленный экран, если ваш сервер jenkins позволяет это ...

затем откройте keychain.app, чтобы предоставить доступ / usr / bin /codeign к закрытому ключу

удачи

Си Чжан
источник
1

Просто попробуйте один раз с помощью терминала Mac, но не из сеанса ssh

security unlock-keychain login.keychain

И выберите всегда разрешать в диалоговом окне с запросом. И тогда вы можете xcodebuild в удаленном сеансе.

Феликс
источник
1

Щелкните правой кнопкой мыши закрытый ключ, связанный с сертификатом кодовой подписи в цепочке для ключей, а затем нажмите «Разрешить все приложения» вместо того, чтобы полагаться на подсказку, исправленную для меня, поскольку сборка происходила через ssh.

Пеллет
источник
0

Мне пришлось:

1) удалить сертификат, связанный с проектом

2) Вернуться к Xcode и отозвать сертификат приложения.

3) Xcode требует новый сертификат

4) Заблокируйте все брелки

5) Очистить проект

6) Восстановить

Вот и все. Надеюсь, это поможет кому-нибудь.

Андрес Фелипе
источник
0

Вышеуказанные методы мне ни к чему.

Я решил это:

  1. Открытый доступ к связке ключей.
  2. Щелкните Меню входа.
  3. Удалите все личные сертификаты.
  4. Очистите проект.
  5. Восстановить.

Вот и все. Надеюсь, это поможет кому-нибудь.

yerwoo_gmail
источник