Ошибка Codesign: профиль обеспечения не может быть найден после удаления просроченного профиля


500

Пытался восстановить приложение, которое работало только вчера. Получил сообщение об истечении срока действия профиля, поэтому я удалил его из iPod и из iTunes. Когда я выбрал новый профиль (один с * в идентификаторе), я теперь получаю сообщение об ошибке:

Ошибка знака кода: не удается найти профиль обеспечения (длинная строка).

Что мне не хватает? Я просмотрел связанные вопросы и не видел этот сценарий уже.

Ответы:


856

Иногда ваш файл проекта xcode портится, особенно если у вас есть старый проект и вы сначала создали его со старой версией xcode / iphone sdk. Что вам нужно сделать, это открыть файл проекта в текстовом редакторе, найти «длинную строку» из вашей ошибки и вручную стереть эту строку. На самом деле, вы должны просто удалить любую строку, которая указывает на любые профили обеспечения. Затем заново откройте проект в xcode, зайдите в настройки и заново выберите свой новый профиль. Это устраняет подобные проблемы в большинстве случаев. Строки, которые указывают на профили обеспечения, будут выглядеть следующим образом:

PROVISIONING_PROFILE = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";

210
Файл .xcodeproj на самом деле является каталогом, похожим на пакет приложений. Если вы щелкнете по нему правой кнопкой мыши в Finder, вы можете выбрать Показать содержимое пакета, а затем вы увидите несколько файлов внутри (или в терминале просто перейдите в него). Фактический файл проекта - это файл с расширением .pbxproj. После того, как вы откроете его в текстовом редакторе, искомые строки должны начинаться с 'PROVISIONING_PROFILE = или' '' PROVISIONING_PROFILE [sdk = iphoneos *] "= '. Удалите все это, и тогда у вас все получится.
Брэд App Guy

2
Я обнаружил, что в дополнение к вышесказанному мне пришлось удалить все свои профили, повторно загрузить их с портала обеспечения и снова импортировать их в XCode. Затем в настройках сборки / подписи кода выберите подходящий профиль для всех конфигураций сборки.
Джей Имерман

11
Все еще ценный совет с XCode4 в 2012 году. Спасибо!
Алексей Русаков

6
... ааааа и еще ценный совет с Xcode6 в 2014 году! Огромное спасибо!
Том ван Цуммерен

4
Единственное, что у меня сработало: Настройки -> Аккаунты -> Просмотр подробностей -> Обновить. Это перезагрузило все профили обеспечения с портала dev. Надеюсь, это кому-то поможет
blackhawk4152

129

Вот более простое решение, которое сработало для меня и не требует ручного редактирования файла проекта:

В XCode на панели «Группы и файлы» разверните «Цели» и дважды щелкните по цели вашего приложения. Это вызывает информационную панель для цели. В разделе «Сборка» проверьте раздел «Подписывание кода» на наличие старых профилей и замените их на правильные.

Обратите внимание, что это отличается от двойного щелчка по значку вашего проекта и изменения профиля оттуда. Довольно удивительно :)

Ori


1
Спасибо! Я попробую это в следующий раз, когда это произойдет :)
Quantumpotato

6
и убедитесь, что сначала выбрали правильную конфигурацию сборки :)
Johnus

1
Это не всегда работает. Иногда вам все равно придется войти и изменить его вручную, как показано в первом ответе.
SpaceTrucker

Еще одно замечание в поддержку SpaceTrucker: этот метод не всегда работает. Принятый ответ гарантирует, что Xcode перестанет искать этот фантомный профиль.
Симона Манганелли

Я обнаружил, что в дополнение к вышесказанному мне пришлось удалить все свои профили, повторно загрузить их с портала обеспечения и снова импортировать их в XCode. Затем в настройках сборки / подписи кода выберите подходящий профиль для всех конфигураций сборки.
Джей Имерман

76
  1. Свойства проекта и целей -> «Не кодировать» -> ОК -> cmd + S (или cmd + B);
  2. Свойства проекта и целей -> «Ваш профиль обеспечения» -> ОК

  3. Все снова работает!


4
Это единственное решение, которое сработало для меня (с использованием XCode4). Создание приложения с выбранным параметром «Не кодировать» было для меня обязательным шагом.
Chazbot

Это кажется лучшим решением, чем решение с более чем 200 голосами, потому что Xcode может изменить способ записи файла своего проекта в будущем.
Данял Айтекин

1
Это правильное решение, которое работало для меня в Xcode 4.2
Selvin

10

Я согласен с ответом Брэда, что вы можете решить эту проблему, отредактировав вашу цель / проект вручную, удалив любые строки, подобные этой:

PROVISIONING_PROFILE = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";

Однако в Xcode 4.2 и позже, есть намного более легкий способ получить доступ к этому тексту и выбрать и удалить его. В Навигаторе проектов слева выберите свой проект (самая верхняя строка Навигатора проектов). Теперь просто выберите «Просмотр»> «Редактор версий»> «Показать редактор версий». Это отображает ваш проект в виде текста, и вы можете выполнить поиск PROVISIONING и удалить проблемную строку прямо на панели редактора Xcode.


После этого вам не нужно закрывать и открывать проект. Лучше подход :)
вирусный

6

Только что увидел вариант в этом вопросе: я вошел в файл project.pbxproj согласно примечаниям Брэда Смита выше, за исключением того, что в этом случае все строки PROVISIONING_PROFILE казались правильными, без появления «плохой» строки профиля, которую XCode не мог не найти.

Однако исправление было таким же: удаление ВСЕХ строк PROVISIONING_PROFILE в project.pbxproj, даже если они выглядели «хорошо» в теории, а затем повторное открытие проекта в XCode.


4

Чтобы достичь решения Брэда полностью в Терминале, используйте эти команды

  1. cd [Xcode project parent]
  2. vi [Xcode project name].xcodeproj/project.pbxproj
  3. /[offending provisioning profile] [Enter]
  4. dd - удалить всю строку
  5. Нажимайте n, пока больше не найдете
  6. Ctrl + x, чтобы сохранить и закрыть

3

В моем случае проблема была решена путем открытия Window -> Organizer, выбора моего устройства и удаления старого профиля Provisioning Profile в панели «Provisioning» справа. Старый уже был отмечен красным символом «х», но iPhone все еще использовал его.

Помимо этого профиля, также появлялся новый (с тем же именем), и после простого перезапуска приложения оно работало без сбоев.


+1, иногда мне не удается установить, потому что просроченный профиль - даже с тем же идентификатором! - был на моем устройстве.
Quantumpotato

Этот работал для меня, но мне также пришлось перезапустить XCode, чтобы он заработал.
Мэтт

3

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

Я сделал это, используя следующее: 10.7.3, Xcode 4.3.2, iOS 5.1, кстати.

1) Щелкните правой кнопкой мыши myapp.xcodeprojи выберите содержимое пакета

2) открыть project.pbxprojс помощью текстового редактора (не рекомендуется textedit, поскольку это может испортить форматирование)

3) Прокрутите весь путь вниз, пока не найдете /* Begin XCBuildConfiguration section */

4) Обратите внимание, что у вас есть разделы отладки и выпуска

5) В разделе релиза взгляните на CODE_SIGN_IDENTITY& "CODE_SIGN_IDENTITY[sdk=iphoneos*]"это должно выглядеть примерно так:

CODE_SIGN_IDENTITY = "iPhone Distribution: MyCompany LLC";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: MyCompany LLC";

6) Взгляните, PROVISIONING_PROFILEи "PROVISIONING_PROFILE[sdk=iphoneos*]"они должны выглядеть так:

PROVISIONING_PROFILE = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";

Это должно соответствовать вашему профилю обеспечения в XCode. Чтобы увидеть, совпадают ли они, откройте Xcode> Window> Organizer> Devices> Provisioning Profiles> Щелкните правой кнопкой мыши профиль> Reveal in Finder> Имя файла .mobileprovision - это идентификатор вашего профиля.

7) Прокрутите вниз project.pbxprojи найдите второй экземпляр раздела релиза. Второй экземпляр раздела релиза должен заканчиваться комментарием/* End XCBuildConfiguration section */

8) убедитесь, что второй раздел совпадает с первым разделом CODE_SIGN_IDENTITY, "CODE_SIGN_IDENTITY[sdk=iphoneos*], и PROVISIONING_PROFILEвсе они заполнены.


2

Одно предложение, которое я сделаю, так как еще никто не сказал этого: ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, сделайте резервную копию всего вашего файла .xcodeproj ДО того, как вы начнете изменять его содержимое. Завинчивание файла проекта и отсутствие резервной копии приведет к очень и очень неприятному опыту.

Возможность отказаться от редактирования может быть находкой.


Да, именно поэтому боги SCM установили контроль над источниками.
Br.Bill

1

Я только что столкнулся с этой проблемой в моем XCode4. Чтобы исправить это, вам нужно поместить все правильные положения в конфигурацию Debug и Release.

Я пытался отправить (архивируя) свое приложение. Поэтому я просто изменяю условия отладки на «Не подписывать код», а положение «Релиз» на положение моего магазина приложений.

Это исправляет и позволяет мне архивировать в обычном режиме. Надеюсь, это поможет.


1

Выберите строки в коде подписи, которые являются пустыми под Any iOS SDK и выберите правильный сертификат.


1

Решение Брэда Смита сработало для меня, но мне также пришлось удалить поле CODE_SIGN_IDENTITY, чтобы оно заработало.


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

0

К сожалению, этот подход не сработал для меня. Но вот исправление, которое сработало для меня (чтобы заставить это работать, вам нужен рабочий файл проекта на Subversion или около того):

Я сделал откат до рабочей версии файла моего проекта. Поскольку невозможно выполнить возврат с помощью Xcode ( где опция «Восстановить» в исходном контроле Xcode 4? ) - я использовал Tortoise, мой компьютер с Windows и это руководство ( http://tortoisesvn.net/docs/nightly/TortoiseSVN_en /tsvn-howto-rollback.html ) для отката к старому файлу проекта.

Поскольку учебник для меня не сработал, я просто использовал Tortoise, чтобы сохранить рабочую версию файла моего проекта на флешку, чтобы перенести его на мой Mac. После этого я заменил новый испорченный файл проекта старым рабочим, почистил, и он работал как шарм!


0

У меня были проблемы, потому что я обновил свой профиль обеспечения AdHoc некоторыми новыми устройствами для использования в TestFlight. Предположительно это происходит потому, что xcode имеет старую ссылку на ваш профиль обеспечения в настройках компоновки кода для проекта или целей. Способ, которым я исправил свой, был следующим:

  1. Перейдите к настройкам целевой сборки и настройкам сборки проекта. В разделе «Подписание кода» измените все профили обеспечения на что-то другое.
  2. Перейдите к устройствам / профилям обеспечения в органайзере, удалите оскорбительные профили, затем нажмите кнопку обновления в правом нижнем углу.
  3. Вернитесь к цели и настройкам сборки проекта и установите для своих профилей обеспечения соответствующие (надеюсь) недавно обновленные профили обеспечения.

0

По крайней мере, в Xcode 5 это то, что решило проблему для меня:

В разделе «Профиль обеспечения» выберите неправильный профиль обеспечения, а затем выберите действительный профиль обеспечения в раскрывающемся меню.

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.