Неверный двоичный файл приложения iPhone

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

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


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

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

30 ответов


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


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

zip-y-r myapp.молния приложение.app

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


у меня была такая же проблема и решил ее таким образом:

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

Если вы столкнулись с той же ошибкой, посмотрите в своем [ProjectName].каталог xcodeproj для проекта.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;
};

guids изменены, чтобы защитить невинных


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

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


У меня была такая же проблема, и после нескольких попыток-я удалил.plist права из прав подписи кода (просто оставил его пустым), и он построил штраф и загрузил, наконец.

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


еще одна точка данных: на некоторое время мое приложение прошло. Теперь я добавил поддержку покупок в приложении, и внезапно он терпит неудачу с проблемой "недопустимая двоичная/недопустимая подпись". При внимательном просмотре я обнаружил, что значение application-identifier в файле entitlements plist отключено.

это, скорее всего, связано с тем, что Я заменил профиль подготовки с wildcarded на app-specific (требуется для покупок в приложении). Неправильный идентификатор приложения квалифицированный по старому профилю. Он не соответствует идентификатору приложения в информации.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

вызывает "недопустимый двоичный файл".


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

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

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


Ну, после повторения шагов несколько раз, я, наконец, успешно загрузил свое приложение.

Я не знаю точно, что это исправило, но до успешной попытки я закрыл Xcode и Firefox и перезапустил их. Думаю, в одном из этих приложений был плохой Джуджу.


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


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

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

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

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


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

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

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


У меня была аналогичная проблема, но в Monotouch. Я обнаружил, что мой профиль выпуска настроен на использование сертификатов разработчика. Это должно выглядеть так: enter image description here


кажется, эта проблема имеет много причин. Вот решение моего:

Это относится ко всем, кто принадлежит к нескольким командам разработчиков (например, ваши собственные приложения и ваши компании).

Если вы создаете сборку с одним набором учетных данных и повторно подписываете ее с другим (например, для распространения adhoc / appstore), вы должны убедитесь, что сборка была первоначально построена и подписана учетными данными, принадлежащими той же команде разработчиков iOS, что учетные данные распространения, которые вы повторно подписываете, принадлежат.

поэтому не создавайте с учетными данными "Indy Dev Inc", а затем попробуйте развернуть с учетными данными" Company Inc". Убедитесь, что вы настроили как "Company Inc" dev, так и учетные данные распространения и используете их.

Я опубликовал больше информации об этом в своем блоге: http://omegadelta.net/2011/06/09/fiendish-ios-code-signing-invalid-binary-issue/


У меня была та же проблема. Я был готов бросить полотенце на эту проблему, но я понял это, когда я пошел, чтобы проверить свой код с помощью Murky. Я всегда просматриваю различия в файлах, которые изменились, прежде чем регистрироваться. При этом на этот раз я заметил, что проект.pbxproj файл был изменен....и в разделе дистрибутива запись "PROVISIONING_PROFILE[sdk=iphoneos*]" была пустой.

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

Мне нужно пиво...


после попытки всех других исправлений, перечисленных здесь, мы зарегистрировали TSI с Apple. Выполнив все шаги в техническое Примечание TN2250 наша проблема была вызвана тем, что был закрытый ресурс отсутствует или недействителен. В нашем случае это было ._.DS_Store.

The ".."называется двойным файлом Apple и является результатом копирования папки проекта Xcode, * unzipped*, на и обратно из файловой системы, которая должным образом не поддерживает HFS+'s 'resource forks' (используется для кода подписывание.) Эти лишние ".."файлы приводят и вызывают сбой проверки подписи кода.

чтобы очистить проблемные двойные файлы Apple из папки проекта Xcode, выполните команду dot_clean в папке проекта Xcode, выполните чистую сборку, а затем повторно выполните архивацию и повторное подключение отправки.

dot_clean /the/path/to/xcode/project

Примечание: Вы можете просто перетащить папку проекта в терминал, чтобы автоматически заполнить путь

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


решил это, очистив myProject.xcodeproj файл (щелкните правой кнопкой мыши, открыть пакет), пакет содержал файлы от со-разработчика, после удаления этих проблема была решена


для меня решением было создание распределительной сертификации на: Портал Подготовки Разработчиков Apple.


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


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

Это последние. Мое последнее представление на прошлой неделе было в порядке. На этой неделе он возвращает недопустимый двоичный файл. К счастью, есть письмо, которое объясняет ошибки.


У меня была аналогичная проблема, но я не права.файл plist. Однако после дюжины неудачных загрузок я проверил свою информацию.плист и обнаружил что-то. Мой массив CFBundleIconFiles имел пустую запись. Я удалил это и повторно подал, и это было, наконец, принято!

серьезно, насколько сложно было бы Apple разоблачить такие ошибки проверки?

Edit: это не сразу apparant, где CFBundleIconFiles, потому что они используют другой имя. В представлении сведений о проекте Ctl нажмите и выберите "Показать необработанные ключи / значения", а затем вы увидите ссылки на CFBundleWhatever. В случае этого редактора он пытался использовать несуществующий icon=72-@2x.png файл.


мои две копейки:

загрузите последнюю версию загрузчика приложений. Я только что обновил и теперь получаю другое сообщение об ошибке.


Я только что прошел через эту проблему (снова), но на этот раз я обнаружил, что мой профиль распространения имеет статус "недействительный". Если вы считаете, что все остальное правильно, дважды проверьте статус на портале и обновите/повторно загрузите все, что не находится в активном состоянии.


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

  1. Перезапущен Macbook Pro
  2. переместил исходный код моего проекта с диска NTFS на диск HFS+ и перекомпилировал.

У меня была проблема с этим и 4.3 GM SDK. Одно из наших приложений не сделает его мимо полученной загрузки. Это оказалось проблемой профиля подготовки. Я восстановил профиль app store, и он работал нормально.


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


другое решение:

для меня просто установка сертификатов "Release" под "подписанием кода" исправила это. Первоначально они были настроены на "не кодовый знак".


для меня проблема была решена путем resaving PNG-изображения с опцией non-interlaced. В предыдущих версиях interlaced png были разрешены, но знайте, что эти изображения могут вызвать недопустимый двоичный файл.

мое сообщение apple: Поврежденный файл значка-файл значка iconGQ@2x.png похоже, она испорчена. Ваш значок не должен быть чересстрочным файлом PNG.

вы можете увидеть, если PNG переплетается с помощью команды "файл" в терминале: Eva-Madrazos-MacBook-Pro-2: GQ 7 интеграция объявления Eva$ file *.формат PNG По умолчанию.png: PNG данные изображения, 320 x 480, 8-бит/цвет RGB, не чересстрочный

удачи, Ева!--1-->


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

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

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


Я пробовал все другие предлагаемые решения, но ничего не помогло.

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

Я также могу порекомендовать яблоки технические примечания по подписанию кода для отладки/проверки.


uuid не допускается. Я исправил это, удалив все [[UIDevice currentDevice] uniqueIdentifier];