Недійсний двійковий файл програми iPhone


78

Я намагаюся завантажити програму в iPhone App Store, але я отримую таке повідомлення про помилку від iTunes Connect:

Завантажений вами двійковий файл був недійсним. Підпис був недійсним, або він не був підписаний сертифікатом подання Apple.


Примітка: Деталі оригінального запитання були видалені, оскільки ця сторінка перетворилася на сховище для всієї інформації про можливі причини цього конкретного повідомлення про помилку.

Загальну інформацію про надсилання програм iPhone у App Store див. У розділі Кроки для завантаження програми iPhone у AppStore .


зробив для цього підручник: stackoverflow.com/questions/21853083/…
BlackSheep

Відповіді:


35

За моїм досвідом, Xcode іноді плутається щодо того, який сертифікат підпису використовувати. У мене з’явилася звичка виходити і перезапускати Xcode після будь-яких змін у налаштуваннях підписання коду (і виконуючи чисту збірку), щоб обійти цю проблему.


1
Спробував це, все ще маючи проблеми. Я використовую Xcode's Build & Archive -> Upload to iTunes. Хтось інший повинен зробити ще один крок після цього?
quantumpotato

Ви можете отримати кращу діагностичну інформацію, якщо використовуєте автономну програму завантаження додатків.
Марк Бессі

22

Я просто хотів зазначити, що у мене теж була проблема з zip з командного рядка. Проблема полягає в тому, як він за замовчуванням обробляє символічні посилання. Використання:

zip -y -r myapp.zip myapp.app

Вирішив цю проблему.


11

У мене була та сама проблема, і я вирішив це таким чином:

Сертифікати власності були встановлені на моїй машині розробки, і mobileprovision.embedded було включено до архіву розповсюдження. Приблизно через годину гуглювання та копання я знайшов джерело помилки. Усередині Xcode я скопіював конфігурацію Release і створив нову конфігурацію розподілу, а потім змінив ідентифікатор підпису на мій сертифікат розповсюдження. Однак, незважаючи на те, що він був оновлений у графічному інтерфейсі, файл проекту був оновлений неправильно.

Якщо ви зіткнулися з тією ж помилкою, знайдіть у своєму каталозі [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

Та сама проблема, інше рішення.

У моєму випадку я стискав файл за допомогою програми « zip -r myapp.zip myapp.app Виходить», команда zip прикрутила пакет. Стискання його від шукача змусило це працювати.


Точно те саме сталося зі мною приблизно місяць тому. Озлоблення.
jbrennan

Щойно це саме рішення працювало. Я спробував рішення @ shirikodama нижче, і воно не спрацювало - ви знайшли спосіб стиснення в командному рядку?
Джессі Бедер

3
Неважливо, я робив a, cp -rа потім zip, і саме cpце зіпсувало символічні посилання в додатку. Це повинно бути cp -Rдля збереження символічних посилань.
Джессі Бедер

7

У мене була та сама проблема, і я спробував кілька речей - я видалив права .plist з прав підпису коду (просто залишив це поле пустим), і він склався чудово і завантажився КОНЕЦЬ.

Успіхів усім :-D


Я не можу повірити, що це виправило. Це особливо смішно, оскільки вони так чітко висловлюються щодо файлу прав у документації Порталу забезпечення.
devlord

6

Ще одна інформація: деякий час мій додаток пройшов. Тепер я додав підтримку покупок у програмі, і раптом це не вдається із проблемою "Недійсний двійковий / недійсний підпис". Уважно вивчивши, я виявив, що значення ідентифікатора програми у файлі 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

Див. Це посилання для рішення:

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

Коротка відповідь полягає в тому, що "Зрештою я ще раз перевірив свій список info.plist і щось виявив. Я додав CFBundleIconFiles відповідно до нових вказівок, але в списку масивів був порожній запис. Я видалив це і подав повторно, і нарешті прийнято! "


5

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

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

Це може бути помилкою noob. Зазвичай ви не можете будувати на пристрої, але коли ви робите це для розповсюдження, ви можете.


4

Що ж, кілька разів повторивши кроки, я нарешті успішно завантажив свою програму.

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


Я знайшов що завгодно, але Safari може бути причиною більшості проблем, отже, чому вони замінили його на App Uploader, я думаю. У мене часто виникає ця проблема із завантаженням сертифікатів / профілів з порталу забезпечення, коли я не використовую Safari
Anthony Main

4

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


4

Я пробував різні речі, прочитавши різні дописи, включаючи ті, що вказані вище. Що, нарешті, спрацювало для мене, починалося спочатку! Я видалив усі сертифікати та профіль підготовки, пов’язані з моїм додатком.

Я створив новий сертифікат розробки та новий сертифікат розповсюдження. Я знову завантажив проміжний сертифікат. Потім я відтворив і профіль розробки, і профіль розповсюдження.

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

Після того, як я прийняв рішення скасувати все і почати все спочатку, на створення нових матеріалів та перевстановлення пішло приблизно 5 хвилин.


4

У мене була подібна проблема, але в Monotouch. Я виявив, що для мого профілю випуску було встановлено сертифікати розробника. Це повинно виглядати так: введіть тут опис зображення


3

Здається, ця проблема має багато причин. Ось рішення для мого:

Це стосується тих, хто належить до кількох команд розробників (наприклад, ваших власних додатків та ваших компаній).

Якщо ви будуєте збірку з одним набором облікових даних і перепідписуєте її іншим (наприклад, для розповсюдження adhoc / appstore), ви повинні переконатися, що збірка була спочатку побудована та підписана обліковими даними тієї самої команди розробників iOS, що і облікові дані розподілу, до яких ви переписуєтесь .

Тож не будуйте з обліковими даними "Indy Dev Inc", тоді спробуйте розгорнути їх з обліковими даними "Company Inc". Переконайтеся, що ви налаштували розробник "Company Inc" та облікові дані розподілу та використовуєте їх.

Більше інформації про це я розмістив у своєму блозі: http://omegadelta.net/2011/06/09/fiendish-ios-code-signing-invalid-binary-issue/


Я підтвердив з інженерами Apple (на WWDC минулого тижня), що можна переписати двійковий файл, побудований зовсім іншим розробником, з іншим профілем забезпечення. На жаль, у мене також виникають проблеми з цим завданням ... :(
livingtech

2

У мене була та сама проблема. Я був готовий кинути рушник на цю проблему, але я зрозумів це, коли пішов перевіряти свій код за допомогою Murky. Я завжди обробляю різниці щодо файлів, які змінилися, перш ніж зареєструватися. Цього разу я помітив, що файл project.pbxproj змінився .... і в розділі Розповсюдження введено запис “PROVISIONING_PROFILE [sdk = iphoneos *] ”Було порожнім.

Запуск і перезапуск Xcode для мене не працювали. Натомість я перейшов як до свого проекту, так і до цільових налаштувань і змінив підпис коду, щоб безпосередньо вибрати мій профіль розповсюдження, а не покладатися на функцію автоматичного вибору. Це призвело до заповнення файлу project.pbxproj правильними значеннями, хоча функція автоматичного вибору нібито вибрала той самий профіль, який я вибрав вручну.

Мені потрібно пиво ...


2

Спробувавши всі інші перелічені тут виправлення, ми зареєстрували TSI з Apple. Виконавши всі кроки в Технічній примітці TN2250, наша проблема була спричинена тим, що герметичний ресурс відсутній або недійсний. У нашому випадку це було ._.DS_Store.

" ." називається файлом Apple Double і є результатом копіювання папки Xcode Project, * розпакованої *, у файлову систему, яка не підтримує належним чином HFS + 'forks' ресурсу (використовується для підписів коду). Ці зайві " ." файли призводять і викликають помилку перевірки підпису коду.

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

dot_clean /the/path/to/xcode/project

Примітка: Ви можете просто перетягнути папку проекту в термінал, щоб автоматично заповнити шлях

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


1

Вирішено це, очистивши файл myProject.xcodeproj (клацніть правою кнопкою миші, відкрийте пакет), пакет містив файли спільного розробника, після видалення цих проблем вирішено



1

Для чого це варто, я хочу додати, що саме це вирішило цю проблему для мене. Я маю ? (знак питання) у назві мого додатка, що спричинило помилку.


1

Я отримав недійсний двійковий файл, якщо додаток не використовує віддалене push-сповіщення, але я залишив код для реєстрації push та делегатів зворотного дзвінка для реєстрації / отримання віддаленого сповіщення без коментарів, навіть якщо код не використовується.

Це нещодавно. Моє останнє подання минулого тижня було нормальним. Цього тижня він повертає недійсний двійковий файл. На щастя, є електронний лист, який пояснює помилку.


1

У мене була подібна проблема, але я не використовую entitlements.plist. Однак після десятка невдалих завантажень я перевірив свій список info.plist і щось виявив. Мій масив CFBundleIconFiles мав порожній запис. Я вилучив це та подав повторно, і воно нарешті було прийнято!

Серйозно, як важко було б Apple викрити такі помилки перевірки?

Редагувати: де CFBundleIconFiles знаходяться не одразу, оскільки вони використовують іншу назву. В інформаційному вікні проекту натисніть клавішу Ctl і виберіть "Показати необроблені ключі / значення", і тоді ви побачите посилання на CFBundleWhatever. У цьому редакторі він намагався використати неіснуючий файл icon=72-@2x.png.


0

Мої два центи:

Завантажте останню версію Application Loader. Я щойно оновився і тепер отримую інше повідомлення про помилку.


0

Я щойно пережив цю клопот (знову), але цього разу виявив, що мій профіль розповсюдження мав статус "Недійсний". Якщо ви вважаєте, що все інше правильно, перевірте статус на порталі та поновіть / повторно завантажте все, що не в активному стані.


0

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

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

0

У мене була проблема з цим і 4.3 GM SDK. Один із наших додатків не отримав попереднього завантаження. Це виявилося проблемою профілю забезпечення. Я відновив профіль магазину додатків, і він працював нормально.


0

Моє рішення передбачало створення нового ідентифікатора програми. Я не впевнений, чому саме це виправлено, але я підозрюю, що він, можливо, не відповідав ідентифікаторам наборів - створення нового ідентифікатора програми змусило мене переконатися, що моя програма та iTunes очікували того самого.


0

Інше рішення:

Для мене це просто встановило сертифікати "Випуск" у розділі "Підпис коду". Спочатку їм було встановлено значення "Не кодувати знак".


0

Для мене проблема була вирішена шляхом збереження зображення PNG із непереплетеною опцією. У попередніх версіях дозволялося чергувати png, але знайте, що ці зображення можуть спричинити недійсний двійковий файл.

Моє яблучне повідомлення: Пошкоджений файл значків - Значок файлу значків GQ@2x.png видається пошкодженим. Ваша піктограма не повинна бути з чергуванням файлів PNG.

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

Удачі, Єва


0

Я хочу вказати на можливість надіслати Apple повідомлення електронною поштою та попросити їх перевірити свої журнали. Я зробив саме це, спробувавши спершу багато речей. Потрібно було нагадати їм майже через чотири тижні, але нарешті вони відповіли і вказали на точну точку проблеми.

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

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


0

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

У підсумку я створив новий проект Xcode і скопіював у нього весь свій код та ресурси. Це зробило трюк, і мій додаток потрапив до черги огляду.

Я також можу порекомендувати технічні примітки Apple щодо підписання коду для налагодження / перевірки.


0

uuid не дозволяється. Я виправив це, видаливши всі [[UIDevice currentDevice] uniqueIdentifier];

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.