Ошибка кода: идентификатор сертификата появляется дважды

103

Ошибка CodeSign: идентификатор сертификата «iPhone Developer: XXXX (12345678)» появляется в цепочке для ключей более одного раза. Инструмент кодового оформления требует, чтобы был только один.

Я захожу в свою связку ключей и удаляю ее. Но я получаю эту ошибку каждый раз, когда перезапускаю Xcode 4, и какое-то приложение добавляет устаревший старый сертификат обратно в цепочку для ключей. Есть идеи, почему и какое приложение?

Mugunth
источник

Ответы:

99

У меня была такая же проблема. Это было исправлено. Это произошло после того, как я отправил приложение и установил несколько сертификатов для подписи приложения.

Быстрое исправление: откройте ДОСТУП К КЛЮЧЕВОЙ ЦЕПИ> щелкните МОИ СЕРТИФИКАТЫ> там вы, вероятно, увидите iPhone Developer:. Вы, вероятно, увидите это ДВАЖДЫ! Выберите тот, у которого самый ранний срок годности, щелкните правой кнопкой мыши и выберите УДАЛИТЬ.

Если вы этого не сделали, перезапустите Xcode. Работает сейчас. :)

Удачного кодирования.

Луи
источник
27
Еще один шаг! Вам необходимо открыть Организатор в XCode и обновить профили подготовки после удаления дубликата сертификата.
Meekohi
@Meekohi, что вы подразумеваете под «обновлением» моих профилей подготовки? Спасибо!
abw333,
7
Повторный запуск Xcode решил для меня ту же проблему после того, как я удалил старый сертификат.
Максим Михеев
В Xcode 4 (у меня 4.4.1) мне пришлось удалить ВСЕ профили обеспечения, связанные со старым сертификатом. Затем я перезапустил Xcode, и старый сертификат перестал (волшебным образом) появляться в связке ключей.
Роберто
3
У меня сработало с одним дополнением (я использую Xcode 4.6.3). Я удалил просроченные (или скоро истекающие) сертификаты, затем перезапустил Xcode, и у меня все еще была проблема - старые сертификаты каким-то образом снова появились в KeyChain Access. Итак, я перезапустил Xcode, но прежде, чем я выбрал свой проект для открытия, я вернулся в KeyChain Access, и старый сертификат снова был там, поэтому я удалил его. Затем я открыл свой проект (в уже работающем Xcode), и все было хорошо - я снова смог построить.
Эд Синек
71

Думаю, я разобрался, почему не работает простое удаление. Поскольку сертификат разработчика все еще хранится в профиле обеспечения, когда я закрываю / повторно открываю Xcode после удаления сертификата в Связке ключей, я увидел, что старый сертификат вернулся. Так что снова удаляю. Это сработало.

Решение простого удаления профиля у меня не сработало.

Решение, которое сработало в моем случае:

  1. Выйти из Xcode
  2. Если доступ к Связке ключей открыт, оставьте его открытым.
  3. Запустите Xcode сейчас.
  4. Обратите внимание, что сертификат, на который жаловался Xcode, будет повторно добавлен в цепочку ключей при запуске из его кеша.
  5. Удалите его.
  6. Скомпилируйте и счастливого кодирования.
Mobilewits
источник
3
Я попробовал все вышеперечисленные решения, и это помогло. Кажется, есть несколько причин / решений.
Натан Ханген
+1: Я могу подтвердить, что XCode действительно хранит «кеш» сертификатов и добавляет их при запуске - ужасно, что так работает! Это вызывает столько проблем! Позор вам, Apple, это привело к потере времени из-за борьбы с этим!
JRG-Developer
10

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

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

  • Переместите связанный закрытый ключ в цепочку ключей для входа
  • Перезапустил Xcode и заметил, что закрытый ключ теперь отображается как связанный (подтверждает, для чего он был)
  • Удалить сертификат и закрытый ключ
  • Перезапустите Xcode и пуф! Он перестал добавлять мой старый сертификат

Интересным наблюдением является то, что когда вы удаляете сертификат, он не удаляет связанный с ним закрытый ключ. Визуально он показывает закрытый ключ под сертификатом. Не дайте себя обмануть.

Удачи!

Шон Эйткен
источник
удаление закрытого ключа тоже сработало для меня - последнее обновление xcode, октябрь 2012 г., Mountain lion
ina,
4

Хорошо, нашел ответ на другой «Связанный» вопрос. Проблема с сертификатом с истекшим сроком действия Xcode Известная проблема с Xcode 4 http://openradar.appspot.com/9173280

Mugunth
источник
1
У меня такая же проблема. Однако я не вижу ответа ни здесь, ни в других темах. Вам удалось это исправить?
Клифф
4

Если вы являетесь участником программ iOS Developer и Enterprise iOS Developer и ввели название своей компании одинаково для обоих приложений, вы получите два действительных сертификата распространения с тем же именем.

Я считаю, что этот вопрос решает эту ситуацию: конфликты CodeSign между Developer и Enterprise Distribution

Джош Меткалф
источник
3

У меня такая же проблема с xcode45-DP1. это работает для меня:

  1. удалите все сертификаты, связанные с вашей учетной записью, из связки ключей. ВЫЙТИ брелок

  2. удалите все профили обеспечения, связанные с вашей учетной записью, из xcode: организатор: устройство: Библиотека: профили обеспечения. ВЫЙТИ xcode

  3. отозвать свой сертификат, восстановить его и загрузить на свой компьютер сборки

  4. перед загрузкой профиля подготовки нажмите « Изменить» рядом с кнопкой загрузки, чтобы убедиться, что выбрано ваше имя.

  5. Затем загрузите профиль обеспечения

  6. дважды щелкните сертификат, чтобы установить его на связку ключей

  7. перетащите профиль обеспечения в xcode: организатор: устройство: Библиотека: профили обеспечения

  8. не нажимайте кнопку обновления в xcode.

  9. сделать сборку.

ccs
источник
3

Ответ здесь

удалите все мои старые профили обеспечения, используя старый сертификат с помощью Organizer, затем выйдите из XCode, удалите старый сертификат из Keychain и перезапустите XCode.

похоже, что xcode будет хранить сертификаты, когда у вас есть ссылки на в профилях подготовки

даdixon
источник
1

У меня возникли проблемы с повторным заполнением сертификатов зомби в моей связке ключей, и идентификатор сертификата появлялся дважды. Простое удаление дубликата сертификата не помогло.

В Xcode, когда я смотрел на свою подпись кода в цели, я вспомнил, что у меня был другой профиль распространения в сборках «Ad Hoc», чем в сборках «Release».

Когда я создал новый сертификат, я загрузил новый профиль только для сборок Ad Hoc, но не для сборок Release.

Xcode зависал на сертификате для обоих этих профилей, и поэтому Xcode вызывал повторяющиеся сертификаты ... потому что я забыл правильно обновить свои профили.

Обязательно обновите ВСЕ свои профили обеспечения до нового сертификата и измените ВСЕ профили одновременно в Xcode.

Обязательно обновите все свои профили обеспечения новым сертификатом, иначе Xcode попытается поместить сертификат для ОБЕИХ профилей в связку ключей ... что приведет к дублированию ошибки!

karlbecker_com
источник
1

У меня была эта проблема, и я прочитал всю информацию о ней, наконец, я нашел решение самостоятельно. Что люди не упомянули, так это то, что ПЕРЕД очисткой сертификатов в органайзере Xcode и ПЕРЕД очисткой ключей с истекшим сроком действия в вашей цепочке для ключей необходимо убедиться, что у вас нет просроченных сертификатов на портале Provisioning Portal . Если у вас будет хотя бы один сертификат с истекшим сроком действия для старого приложения, которое использовало старый сертификат разработчика, Xcode перенесет его в свой органайзер с первой сборкой, а оттуда он перейдет в вашу связку ключей и вызовет дубликат.

Сегев
источник
1

В моем случае «кеш», на который смотрел Xcode, был подключенным устройством iOS. Чтобы определить, является ли это проблемой для вас:

  1. Отключите все устройства iOS
  2. Удалите проблемный сертификат и закрытый ключ из Связки ключей
  3. Перезапустить Xcode
  4. Проверьте доступ к связке ключей: в моем случае дубликат НЕ был воссоздан на этом этапе
  5. Повторно подключите устройство iOS
  6. Снова перезапустите Xcode
  7. Проверьте доступ к связке ключей: в моем случае дубликат был воссоздан на этом этапе

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

Саймон Уитакер
источник
0

Простое удаление избыточного сертификата у меня не сработало. Кажется, что каждый раз, когда вызывается xcodebuild, он «воссоздает» сертификат в цепочке ключей из кеша где-то ... та же проблема, что и avi. Я создал для него хак / исправление, попытался найти, где файл был кэширован и очистить его, но не повезло. В конце концов, что сработало для меня (немного взлома, но что еще вы можете сделать), так это выяснить, какой номер сертификата, и вручную удалить его из связки ключей вскоре после вызова xcodebuild. Сначала перейдите в каталог / usr / bin / (или в любой другой каталог, в котором находится ваш файл xcodebuild, попробуйте which xcodebuild) и выполните следующую команду:

sudo mv xcodebuild xcodebuild_actual

Затем создайте файл с помощью вашего любимого редактора (не забудьте sudo) со следующим кодом:

xcodebuild_actual $* &
echo "xcodebuild started, waiting to wipe certificate, 10 seconds"
sleep 2
echo "Wiping Certificate..."
sudo security -v delete-certificate -t -Z 407629F811D52C0BB7AD31BBB18DCB496354B05E

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

Замените шестнадцатеричный идентификатор после -Z выше на шестнадцатеричный идентификатор сертификата зомби-нарушителя. Наконец, убедитесь, что файл xcodebuild исполняемый:

sudo chmod 755 xcodebuild 

Теперь вы можете открыть свою связку ключей и запустить команду сборки и посмотреть, как зомби-сертификат-злоумышленник воскрешается, а затем быстро уничтожается до того, как это станет проблемой для кодовой подписи. Надеюсь, Apple найдет для этого реальное решение.

BadPirate
источник
0

В моем случае удаление сертификатов не помогло. XCode 4, кажется, кеширует или восстанавливает их. Уловка, которая наконец-то сработала для меня, заключалась в том, чтобы запустить связку ключей и xcode. Затем в связке ключей перетащите 2 моих сертификата (dev + dist) из «логина» в «систему». Затем дубликаты волшебным образом появились снова, и я смог их удалить, а затем перетащил сертификаты обратно в `` вход ''

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

Это очень просто, экспортируйте правильный сертификат на свой рабочий стол. Удалите этот сертификат в связке ключей. Попробуйте создать источник с сообщением об ошибке (нет сертификата ..) Затем снова импортируйте сертификат. => Успех!

Giang
источник
0

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

Даже если сертификат повторно применяется, закрытый ключ больше не появляется. Теперь проверьте наличие действительных сертификатов, и появится только один сертификат, а другие сертификаты, закрытый ключ которых удален, больше не будут отображаться среди действительных сертификатов.

Думаю, это самый простой способ решить эту проблему.

Swathy Valluri
источник
0

Однажды я столкнулся с той же проблемой. И я решил это, удалив неиспользуемый профиль обеспечения со вкладки «Организатор» в xcode. Фактически Keychain получит этот сертификат из этого профиля обеспечения, который является либо устаревшим сертификатом, либо сборкой по отозванному сертификату.

Так что вам просто нужно удалить этот профиль обеспечения со вкладки «Организатор». Организатор находится на правой верхней боковой кнопке xcode. Откройте его, а затем в Организаторе удалите профили подготовки, которые вы не используете.

Вот скриншот,

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

И не забудьте удалить лишний сертификат из связки ключей, но после этого сертификат больше не появится.

Дилип
источник