Я работаю с Xcode 4.1 build 4B110f, пытаясь подготовить приложение для iOS к загрузке. Он проходит этап Product | Archive без ошибок, дважды запрашивая разрешение на подпись чего-либо. Но когда я пытаюсь проверить архив в Организаторе, происходит сбой:
### Codesigning '/Users/uqrchern/Library/MobileDevice/Provisioning Profiles/70D2381D-3733-4F5D-88B2-4729572C2864.mobileprovision' with 'iPhone Distribution: Ron Chernich'
+ /usr/bin/codesign --force --preserve-metadata --sign iPhone Distribution: Ron Chernich --resource-rules=/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app/ResourceRules.plist --entitlements /var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/entitlements_plistrZ1Vwko6 /var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app
Program /usr/bin/codesign returned 1 : [/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app: replacing existing signature
/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app: object file format invalid or unsuitable
]
error: codesign failed with error 1
Я посмотрел на все подобные проблемы и решения (некоторые из которых не имеют никакого смысла или относятся к действительно старым версиям инструментов). Никто не имел малейшего значения.
Я также проверил 3 раза, что при проверке используется «производственный» сертификат, так же как и этап кодирования, который создает архив. Я даже превратил вышеприведенный вывод в скрипт-схему, чтобы я мог попробовать все сертификаты вручную: один и тот же результат каждый раз.
Может быть, подписанный файл .app действительно не подходит?
Кстати, у CodeSign нет флага версии, но справочная страница датирована 1 июня 2006 года. Двоичный файл имеет дату файла 20 ноября 2010 года.
ОБНОВЛЕНИЕ (на следующий день):
Дальнейшее изучение проблемы позволило найти неясную ссылку, в которой говорится, что для CodeSign требуется следующий набор переменных среды:
CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
Используя вывод неудачного прогона Validate, я создал сценарий оболочки, который экспортировал эту переменную незадолго до неудачного шага codeign --force и альта! Кодовый знак работает.
Но это не очень помогает мне подготовить мой код для загрузки. Есть ли способ включить это в скрипт, запускаемый кнопкой «Подтвердить организатором» ??
НЕМНОГО ПОЗЖЕ, РЕШЕНИЕ! :
Согласно теории, где-то есть сценарий, который генерирует все команды, выполняемые во время проверки Organizer ... run, я немного покопался с помощью grep и find. Сценарий действительно существует, и его имя:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
Это всего лишь Perl, и исправление заключается в добавлении требуемой переменной среды в ассоциативный массив% ENV в самом начале, скажем, в строке 72:
$ENV{CODESIGN_ALLOCATE} = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';
Это полностью решает проблему. Я понятия не имею, где все другие постеры в Интернете, которые думают, что исправили это с помощью комбинаций удаления сертификатов, создания чистоты, закрытия и перезапуска Xcode и т. д., и т. д. Я просто спокойно утверждаю, что это исправление поддерживает науку над суевериями и работает для меня в Xcode 4.1 Build 4B110f и связанном с ним скрипте PackageApplication, работающем под Snow Leopard 10.6.8 с Perl 5.10.0