Недопустимый бинарный файл приложения для iPhone - PullRequest
77 голосов
/ 07 сентября 2008

Я пытаюсь загрузить приложение в iPhone App Store, но получаю сообщение об ошибке из iTunes Connect:

Загруженный вами двоичный файл недействителен. Подпись была недействительной или не была подписана сертификатом Apple.


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

Для получения общей информации о передаче приложений iPhone в App Store см. Шаги по загрузке приложения iPhone в AppStore .

Ответы [ 34 ]

34 голосов
/ 01 октября 2008

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

21 голосов
/ 13 октября 2009

Я просто хотел упомянуть, что у меня тоже была проблема с zip из команды линия также. Проблема заключается в том, как он обрабатывает символические ссылки по умолчанию. Использование:

zip -y -r myapp.zip myapp.app

Решил эту проблему.

10 голосов
/ 05 июня 2009

У меня была такая же проблема, и я решил ее следующим образом:

Сертификаты свойств были установлены на моей машине для разработки, и mobileprovision.embedded был включен в архив дистрибутива. Примерно через час поисков и поисков я обнаружил источник ошибки. Внутри XCode я скопировал конфигурацию выпуска и создал новую конфигурацию распространения, а затем изменил удостоверение подписи на свой сертификат распространения. Однако, несмотря на то, что он был обновлен в графическом интерфейсе, файл проекта не был обновлен правильно.

Если вы столкнулись с той же ошибкой, найдите в каталоге [ProjectName] .xcodeproj файл project.pbxproj и откройте его в своем любимом редакторе. Ищите раздел Распределение. Мой сломанный выглядел так:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Developer: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Developer: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
};
name = Distribution;
};

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

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Distribution: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “F00D3778-32B2-4550-9FCE-1A4090344400″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
};
name = Distribution;
};

направляющие изменены, чтобы защитить невинных

7 голосов
/ 23 марта 2010

У меня возникла та же проблема, и после попытки нескольких вещей - я удалил права .plist из Правил подписи кода (просто оставил это поле пустым), и он прекрасно сработал и загрузил ФИНАЛЬНО.

Удачи всем: -D

7 голосов
/ 09 октября 2009

Та же проблема, другое решение.

В моем случае я сжимал файл, используя zip -r myapp.zip myapp.app Оказывается, команда zip прикрутила связку. Сжатие из искателя заставило его работать.

5 голосов
/ 08 марта 2011

Еще одна точка данных: какое-то время мое приложение прошло. Теперь я добавил поддержку покупок в приложении, и внезапно происходит сбой с ошибкой «Недопустимая двоичная / недействительная подпись». Внимательно изучив, я обнаружил, что значение идентификатора приложения в plist-файле полномочий отключено.

Это, скорее всего, связано с тем фактом, что я заменил профиль обеспечения с шаблона с подстановочными знаками на профиль для приложения (необходим для покупок в приложении). В старом профиле указан неправильный идентификатор приложения. Он не совпадает с идентификатором приложения в info.plist, но, видимо, iTunes простил это.

Итак, резюмируем:

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.*

в порядке, а

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.foo

вызывает "Неверный двоичный файл".

5 голосов
/ 26 февраля 2010

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

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

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

4 голосов
/ 26 октября 2009

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

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

После установки трех сертификатов (на этот раз я заметил, что у дистрибутива были и закрытый, и открытый ключи) и двух профилей обеспечения (мой профиль распространения не был помечен как не имеющий действующего сертификата!), Все заработало. *

Как только я принял решение отозвать все и начать все сначала, создание нового материала и его повторная установка заняли всего около 5 минут.

4 голосов
/ 22 июля 2009

Вот проблема, с которой я столкнулся: я добавил двоичный файл в Subversion перед загрузкой. Сравнение / архивирование двоичного файла затем включало скрытые каталоги .svn, которые испортили подпись кода.

4 голосов
/ 16 сентября 2010

См. Ссылку для решения:

http://greghaygood.com/2010/09/04/invalid-binary-message-from-itunesconnect

Краткий ответ: «В конце концов я дважды проверил свой info.plist и обнаружил что-то. Я добавил CFBundleIconFiles в соответствии с новыми рекомендациями, но в списке массивов была пустая запись. Я удалил это и повторно отправил, и это было наконец принято! "

...