Не вдалося команду Xcode / usr / bin / codeign з кодом виходу 1: errSecInternalComponent


105

Я намагаюся додати новий профіль забезпечення до мого Xcode, щоб протестувати додаток на пристрої. Ось наступні кроки:

  1. Видалено всі сертифікати та профілі резервування

  2. Створення / Додати сертифікат розробки IOS

  3. Додати мій пристрій IOS в Інтернеті

  4. Створіть профіль надання IOS

  5. Додати профіль надання IOS

  6. Очистити додаток

  7. Створіть, то запустіть додаток

  8. Встановити кодування проекту та профілю надання в налаштуваннях збірки

  9. Багато Googling> до успіхів немає

Ось помилка, яку я отримую:

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 і в додатку.
Алекс Пелтьє,

1
Я зіткнувся з цією проблемою, переходячи від Xcode 11.2.1 до 11.3 під час підписання коду побудованих мною фреймворків. Жодних профілів резервування не було залучено. Відповідь Мохіта Манхаса прояснила його.
Даніель Чжан

Це трапляється, якщо для використання SSH та кодування знаку заборонено доступ до приватного ключа в Keychain. Щоб перевірити це, знайдіть ключ у брелоку, клацніть правою кнопкою миші та виберіть "Отримати інформацію", переключіться на "Контроль доступу" та перевірте, чи додається програма "codeign" у списку "завжди дозволяти доступ". Дивіться цей коментар github.com/electron-userland/electron-builder/isissue/… Що я зробив, запустив сценарії один раз із графічного інтерфейсу та натиснув "Завжди дозволяти" для доступу до клавіш, після чого він почав працювати.
ArticIceJuice

Відповіді:


240

Відкрийте Keychain Access , а потім у меню File виберіть Lock All Keychains .

Потім поверніться до Xcode та очистіть та відновіть. Він знову запропонує ввести пароль, щоб розблокувати брелок.

Після цього, якщо припустити, що у вас немає інших проблем з компіляцією, це вдасться!


7
Неймовірно, що цей дурний замок і розблокування допомагає! Спасибі
Йосип Б.

8
Це має бути прийнятою відповіддю. Набагато більш здоровий, ніж перезавантаження!
yonix

3
Працював і для мене. Створіть apk для Android 30 секунд, створіть додаток для iOS .. 2 год.
Гейб

1
Серйозно WTF ?! Дякую!
Пітер Н Льюїс

1
@FredericP Для мене я нещодавно змінив пароль. Отже, між тим, коли останній раз брелок брелоку було розблоковано xcode, і паролем, який використовується для цього, була певна взаємодія.
sherrellbc

77

Здається, що помилка в механізмі підписання коду, проблему слід вирішити


інший випадок, але схоже повідомлення про помилку - перезапуск працював.
mikus

Майже через чотири роки, і це все ще працює! Я забув Золоте правило - "Якщо сумніваєтесь, перезавантажте!"
Алан

2
Якщо ви чекаєте менш руйнівного рішення, дивіться відповідь
Мохіта Манхаса

не допомогли мені
Ануп Вайдя

70

Це відбувається, коли брелок для входу заблокований. Щоб розблокувати брелок для входу, запустіть:

security unlock-keychain login.keychain

Якщо ваша брелок захищена паролем, вкажіть пароль, скориставшись -pопцією.

Потім спробуйте операцію збірки або підписання коду ще раз. Код помилки, про який йдеться, описується в документах Apple як внутрішня помилка, тому цілком можливо, що це трапляється і в інших випадках.


1
На жаль, це рішення здається цілком круговим: виконання вказаної вище команди вимагає ввести пароль, що, очевидно, не входить в неінтерактивний сеанс (як при виконанні цього за допомогою агента CI, такого як Jenkins).
Конрад Рудольф

Це хороший момент - як ви кажете, це не підходить для неінтерактивного сеансу, такого як бот CI. Це корисно під час запуску віддалених збірок у сеансі командного рядка (наприклад, через ssh).
cbracken

3
У нас була аналогічна проблема з Дженкінсом, і крім того, що згадується у вищезгаданій команді, нам довелося передати пароль як аргумент команді, тому ми зробили "безпеку розблокування-брелок -p $ KeychainPassword <login-keychain>", де ви можете легко зберігати KeychainPaasword на Jenkins.
Мохіт Татер

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.
Рівновага

1
@KonradRudolph не потрібно вводити пароль для брелока розблокування безпеки, якщо ви дозволили кодовий знак отримати доступ до приватного ключа. Досить залишити порожній рядок як пароль.
Каміль Шостаковський,

1
@KonradRudolph все ще, мабуть, не ідеально, але ви можете перенести цю команду розблокування, щоб ~/.bash_profileбрелок розблокувався під час запуску клієнта SSH, але вам не потрібно посилатися на нього зі свого сценарію CI
sschilli

17

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

У Китаї між розробниками є приказка:

Невеликі проблеми, просто перезавантажте. Великі проблеми повинні перевстановитись.

Іноді вищезгадана приказка вам дуже допоможе!


7
В Америці ми говоримо: «Ніколи не перезавантажуй старе обладнання»
Brant

@Brant Чому у вас така приказка? Це цікаво.
ifeegoo

Жартую - але ми мали подібну проблему і нарешті просто вдалися до перезавантаження старого сервера.
Брант

1
@ifeegoo У старих серверів можуть виникнути проблеми із завантаженням резервної копії (можливо, OS оновився сам? Ви не можете знати, перш ніж спробувати. Можливо, біос ром пішов погано. Це просто одна з тих речей, яка не повинна бути проблемою в належно підтримуваному середовищі, але ви насправді не знаєте, перш ніж спробувати, і ви краще не намагатиметесь.
Лассі Кіннунен

1
@LassiKinnunen Ви маєте рацію, ми розробники мобільних пристроїв для Android та iOS, тому така ситуація не стосується серверів. Сервери дійсно небезпечні, це не зручно.
ifeegoo

8

Якщо це допомагає комусь іншому, я зіткнувся з errSecInternalComponentпомилкоюcodesign тому що я запускав його протягом ssh-сеансу на своїй машині macOS. Запуск тієї самої команди з вікна терміналу на машині macOS працював.

Імовірно, це тому, що codesign потрібен доступ до приватного ключа з брелка входу.

Запуск security unlock-keychain login.keychain(як пояснено у відповіді cbracken ) з того ж сеансу також повинен працювати.


Це дуже дивно, навіть здається, що команда розблокування брелка брелоків мовчки не працює, оскільки кодовий знак все ще не працює. Але запуск одних і тих же команд за допомогою віддаленого робочого столу (замість SSH) працює чудово.
Макс

2

Якщо ви намагаєтеся підписати команду run ssh:

security unlock-keychain login.keychain

перш ніж спробувати підписати пакет програм

або з інтерфейсу користувача

Оновіть контроль доступу ключем до "Дозволити всім програмам доступ до цього елемента"

Thx для @Equilibrium та @Jon McClung


2

У мене була та сама проблема. Дізнався, що проблема полягає в підписанні коду програми.

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

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


2

Я біг, security unlock-keychain login.keychainі мій пароль для входу не працював. Тому я перезавантажився, а потім просто запустив Xcode знову, і він спрацював. Запуск команди також працює. Дивна проблема.


2

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

Тож замість використання,

security unlock-keychain login.keychain

використання:

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

де брелок "шлях до входу" може бути $ HOME / Бібліотека / Брелки / login.keychain (мій випадок) або просто login.keychain


Ваша відповідь заснована на @equilibrium відповіді, але я задумаю. На Cam Bamboo мені допомогли команду безпеки unlock-keychain -p {account-password} login.keychain
A.Kant

2

для всіх, хто стикався з цією проблемою від jenkins та ssh:

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

  1. Файл імпорту безпеки .p12 з -A або -T / usr / bin / codeign
  2. безпека набір-ключ-розділ-список -S apple-інструмент:, apple:, кодове: -s -k # {пароль} # {keychainPath}
  3. змінити весь профіль надання на [UUID] .mobileprovision та скопіювати їх у '~ / Бібліотека / MobileDevice / Продавання \ Профілі' на сервері 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) Заблокуйте всі KeyChain

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

6) Перебудувати

Це воно. Сподіваюся, це допомагає комусь.


0

Вищеописані методи для мене марні.

Я передавав це:

  1. Відкрийте доступ до брелоків.
  2. Натисніть Меню входу.
  3. Видаліть усі особисті сертифікати.
  4. Очистіть проект.
  5. Перебудувати.

Це воно. Сподіваюся, це допомагає комусь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.