В Xcode не распознает мой новый профиль подготовки

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

проблема в том, что пока организатор может видеть новый профиль и устанавливать его как обычно, IDE путается между старым и новым. Каждый раз, когда я пытаюсь создать приложение, оно немедленно терпит неудачу. Консоль ошибок сообщает мне, что Xcode не может найти старый профиль, потому что указанный GUID принадлежит старому. Это странно; я думал, что Xcode уже знал о новом профиле.

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

Как убедить Xcode, что я создал новый профиль подготовки для своего приложения для его использования?

9 ответов


tl; dr: оказывается, мне просто пришлось вручную редактировать файл проекта, чтобы сообщить Xcode нового профиля. Теперь я не знаю почему мне пришлось вручную обновить файл проекта. Возможно, я сделал что-то не так во время импорта нового профиля в Xcode, поэтому он не понял, что мой новый профиль вошел. Или файловая система задохнулась на полпути, и Xcode не смог обновить себя. Ну что ж.

теперь развлечения технические часть:

важно: как и все остальное, что включает в себя изменение файлов, которые вы не должны изменять:убедитесь, что резервное копирование .xcodeproj bundle и / или весь ваш проект Xcode, или убедитесь, что ваш проект Xcode хранится в надлежащем контроле версий. Вы не хотите испортить и заставить Xcode прекратить создание вашего проекта на вашем устройстве, без чего-либо, чтобы вернуться.

Я заглянул в содержимое моего приложения .xcodeproj bundle (Xcode не работает в это время). Чтобы просмотреть их, откройте папку проекта в Finder, а затем нажмите кнопку управления на .xcodeproj файл и выберите Показать Содержимое Пакета:

Breeze.xcodeproj/
  Daniel.mode1v3
  Daniel.pbxuser
  project.pbxproj
открыл project.pbxproj в текстовом редакторе (это текст, а не двоичный) и огляделся в поисках информации о конфигурации сборки.

там есть раздел /* Begin XCBuildConfiguration section */ (который вы можете найти с помощью функции поиска вашего редактора). Это список записей, каждая из которых представляет конфигурацию подписи кода для данного профиля в данной конфигурации сборки.

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

1D6058940D05DD3E006BFB54 /* Debug */ = {
    isa = XCBuildConfiguration;
    buildSettings = {
        ALWAYS_SEARCH_USER_PATHS = NO;
        "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Daniel Tan (XXXXXXXXXX)";
        COPY_PHASE_STRIP = NO;
        GCC_DYNAMIC_NO_PIC = NO;
        GCC_OPTIMIZATION_LEVEL = 0;
        GCC_PRECOMPILE_PREFIX_HEADER = YES;
        GCC_PREFIX_HEADER = Breeze_Prefix.pch;
        GCC_VERSION = com.apple.compilers.llvmgcc42;
        INFOPLIST_FILE = "Breeze-Info.plist";
        IPHONEOS_DEPLOYMENT_TARGET = 4.0;
        PRODUCT_NAME = "Breeze";
        "PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";
        SDKROOT = iphoneos;
    };
    name = Debug;
};

обратите внимание на эту строку:

"PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";

это идентификатор GUID, сообщенный ошибкой сборки; идентификатор моего старого, истекшего профиля подготовки.

все, что мне нужно было сделать, это заменить его GUID нового профиля:

"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E6E6369E-FD58-4886-9C3A-72C9DAE36501";

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


вот как я это сделал в Xcode 4:

  1. Выберите не кодовый знак из проекта > настройки сборки > подпись кода
  2. очистить создать
  3. построить его снова-должен показать ошибку, как "этот материал нуждается в подписи"
  4. выберите новый профиль из подписи кода
  5. восстановить

Я смог исправить эту ошибку, изменив ее на "не кодовый знак" в идентификаторе подписи кода. Постройте, и вы получите сообщение об ошибке " для типа продукта требуется подпись кода ...чепуха...". Затем вернитесь и выберите нужный профиль. Строй и все хорошо. Это случилось со мной, потому что мой сертификат истек, и я его обновил. В дополнение к вышесказанному мне пришлось удалить старый сертификат из моего брелка, и организатор.


  1. закрыть де xcode
  2. Эдит с texmate, youtproject.xcodeproj файл
  3. найти строку "PROVISIONING_PROFILE[sdk=iphoneos*]" = "E8DEEBA3-FE0A-419F-9F7E-258572D55807";
  4. стереть
  5. перезапустить Xcode build & archive для предприятия

добавить решение выше, вы можете использовать прекрасный xcodeproj файл gem, чтобы помочь с такими вещами. Обратите внимание, что он преобразует ваш OpenStep key = value; - стиль plist в XML. Примечание: Я обнаружил, что Xcode изменяет его обратно, если вы сделаете изменения файла проекта в Xcode позже. Любой стиль файла отлично строится либо в Xcode, либо из командной строки. Для примера того, как я его использую

project = Xcodeproj::Project.new('Foo.xcodeproj')
csi_key = 'CODE_SIGNING_IDEDNTITY'
project.targets.each do |target|
  target.build_configurations.each do |conf|
    conf.build_settings[csi_key] = 'iPhone Developer: Cool Dood (XYZ123)' unless conf.build_settings[csi_key] == nil
  end
end

вот суть того, как я его использую: https://gist.github.com/82times/5594887


мое решение этой проблемы было:

  1. загрузите новый профиль подготовки
  2. дважды щелкните профиль подготовки, чтобы установить его
  3. перейдите в следующий каталог на компьютере mac: /Users/<your.username>/Library/MobileDevice/Provisioning Profiles
  4. найдите старый профиль подготовки, который вам больше не нужен (но продолжает отображаться в Xcode). Это может пригодиться для этого шага:https://github.com/chockenberry/Provisioning
  5. удалить это
  6. полностью выйти из Xcode
  7. Открыть Xcode
  8. теперь вы сможете выбрать свой новый профиль подготовки

в моем случае, с XCode 5, когда истек срок действия моего сертификата разработчика, я столкнулся с этой проблемой. Я вручную загрузил новый сертификат и новый профиль подготовки. Я добавил сертификат в связку ключей и профиль подготовки к устройствам в organizer.

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

В конце концов, я использовал утилиту настройки iPhone, чтобы удалить старый профиль подготовки и добавить недавно загруженный профиль подготовки. После подписания кода работал, как ожидалось.


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

  1. открыть xCode
  2. перейти к продукту - > Назначение - > устройство iOS
  3. перейти к продукту - > архив

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

Для Xcode 8.3.2:

  1. Xcode - > Настройки - >Учетные Записи
  2. выберите Apple ID
  3. дважды щелкните команду
  4. нажмите раскрывающийся список " + "в левом нижнем углу, чтобы"создать сертификат"
  5. выберите iOS Development
  6. Нажмите Кнопку "Готово"

после этого я смог сказать, что Xcode использует последний профиль щелчок значка " i "рядом с" управляемым профилем Xcode "в разделе цели->общие->подписание и подтверждение того, что "созданная" дата отражает новую.