Xcode не распознает мой новый профиль обеспечения
Срок действия профиля подготовки моего приложения истек пару недель назад, поэтому я зашел на портал обеспечения, чтобы получить новый новый. Получив его, я посетил Xcode Organizer, удалил профиль с истекшим сроком годности со своих устройств, а также с моего Mac, а затем импортировал новый профиль. XCode немедленно устанавливает профиль на мои устройства, и мое приложение снова запускается на устройствах.
Проблема в том, что, хотя Организатор может видеть новый профиль и устанавливать его в обычном режиме, среда IDE путается между старым и новым. Каждый раз, когда я пытаюсь создать приложение, оно сразу выходит из строя. Консоль ошибок сообщает мне, что XCode не может найти старый профиль, потому что указанный GUID принадлежит старому. Это странно; Я думал, что XCode уже знал бы о новом профиле.
Я попытался удалить новый профиль с моих устройств и моего Mac, а затем переустановить профиль. Не работает, Xcode все еще пытается найти старый. Я также попытался выбрать другой профиль, чтобы заставить Xcode забыть старый, а затем выбрать новый. Я даже пытался вручную ввести GUID нового в другом варианте. И все же Xcode все еще настаивает на поиске старого профиля, который к настоящему времени уже исчез с моего Mac.
Как мне убедить XCode, что я сгенерировал новый профиль обеспечения для своего приложения для его использования?
9 ответов
Оказывается, мне просто пришлось вручную отредактировать файл проекта, чтобы сообщить Xcode о новом профиле. Теперь я не знаю,почему мне пришлось обновить файл проекта вручную. Возможно, я сделал что-то не так в процессе импорта нового профиля в XCode, поэтому он не осознавал, что мой новый профиль вошел. Или файловая система задохнулась на полпути, и XCode не смог обновить себя. Ну что ж.
Теперь длявеселье техническая часть:
ВАЖНО: Как и во всем, что связано с изменением файлов, вам не следует изменять:обязательно сделайте резервную копию вашего
.xcodeproj
связать и / или весь ваш проект Xcode, или убедиться, что ваш проект Xcode находится под надлежащим контролем версий. Вы не хотите портить и заставлять XCode перестать строить ваш проект на вашем устройстве, без чего-либо отступать.
Я заглянул в содержимое моего приложения .xcodeproj
связка (XCode не работает в это время). Чтобы просмотреть их, откройте папку вашего проекта в Finder, затем нажмите Control-щелкните на вашем .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:
- Выберите "Не подписывать код" в "Проект"> "Настройки сборки"> "Подписание кода"
- Очистить сборку
- Создайте его снова - должно появиться сообщение об ошибке типа "этот материал требует подписи"
- Выберите новый профиль из подписи кода
- перестраивать
Мне удалось исправить эту ошибку, изменив ее на "Не подписывать код" в идентификаторе подписи кода. Постройте, и вы получите сообщение об ошибке "Требуется подпись кода для типа продукта... бла...". Затем вернитесь и выберите правильный профиль. Сборка и все хорошо. Это случилось со мной, потому что срок действия моего сертификата истек, и я продлил его. В дополнение к вышесказанному мне также пришлось удалить старый сертификат из цепочки для ключей и органайзера.
- Закрыть де XCode
- Эдит с texmate, youtproject.xcodeproj
- Найти эту строку
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E8DEEBA3-FE0A-419F-9F7E-258572D55807";
- стирать
- Перезапустите сборку и архив xcode для предприятия
Большинство ответов не работает для меня, как они, кажется, для более старых версий.
Для Xcode 8.3.2:
- Xcode-> Настройки-> Учетные записи
- Выберите Apple ID
- Дважды щелкните свою команду
- Нажмите "+" внизу слева, чтобы "Создать сертификат"
- Выберите iOS разработки
- Нажмите "Готово"
После этого я смог сказать, что XCode использует последний профиль, щелкнув значок информации "i" рядом с "Управляемым профилем XCode" в разделе "Цели" -> "Общие" -> "Подписание" и подтвердив, что дата "Создано" отражает новый.
Чтобы добавить решение выше, вы можете использовать прекрасный 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
Мое решение этой проблемы было:
- Загрузите новый профиль обеспечения
- Дважды щелкните профиль обеспечения, чтобы установить его
- Перейдите в следующий каталог на вашем Mac:
/Users/<your.username>/Library/MobileDevice/Provisioning Profiles
- Найдите старый профиль обеспечения, который вам больше не нужен (но продолжает появляться в XCode). Это может пригодиться для этого шага: https://github.com/chockenberry/Provisioning
- Удали это
- Полностью выйти из Xcode
- Открыть Xcode
- Теперь вы сможете выбрать новый профиль обеспечения
В моем случае, когда в XCode 5 истек срок действия моего сертификата разработчика, я столкнулся с этой проблемой. Я вручную загрузил новый сертификат и новый профиль обеспечения. Я добавил сертификат в связку ключей и профиль обеспечения для устройств в органайзере.
Тем не менее, XCode продолжал жаловаться, что я не могу подписать приложение. Я понял, что в настройках XCode 5 он по-прежнему отображал старый профиль обеспечения и не обновлялся до нового, несмотря на многочисленные перезагрузки, которые я делал там.
В конце концов, я использовал утилиту конфигурации iPhone, чтобы удалить старый профиль обеспечения и добавить недавно загруженный профиль обеспечения. После подписи кода работает как положено.
Я думал, что двойной щелчок по загруженному профилю инициализации поместит его в архив xCode Organizer, но это не сработает для меня. Следующие шаги, наконец, сработали для меня.
- Открыть xCode
- Перейти к продукту -> пункт назначения -> устройство iOS
- Перейти к продукту -> Архив