Ошибка загрузки образа при загрузке IPA с помощью Application Loader ERROR ITMS-90094

Я пытаюсь загрузить файл.ipa с помощью утилиты Apple Application Loader на моем Mac. Когда я это делаю, я получаю эту ошибку:

ОШИБКА ITMS-90094: "Недопустимое загрузочное изображение - ваше приложение содержит стартовое изображение с модификатором размера, которое поддерживается только для приложений, созданных с помощью iOS 6.0 SDK или более поздней версии".

Приложение построено с использованием iOS 8.2 SDK в Embarcadero RAD Studio XE7 / C++ Builder. Я создал действующее мобильное предложение Adhoc Distribution, которое находится на моем Mac и используется PAServer 15.0 и Xcode 6.2 для компиляции приложения. Я правильно определил, что в свойствах моего проекта | Подготовка к распространению Adhoc на платформе iOS. Я перешел в режим выпуска и в разделе "Конфигурация" выбираю Adhoc через менеджера проекта. Сначала я очищаю приложение, затем создаю его, а затем развертываю. Когда я закончу, я получу действительный файл.ipa, который отлично работает на моих тестовых устройствах.

Согласно Apple, эта проблема возникает, когда вы создаете свое приложение с помощью iOS SDK 5.1 или более ранней версии, но включаете образ Default-568h@2x.png (для поддержки 4-дюймового дисплея сетчатки iPhone 5). В ней говорится, что для решения этой проблемы создайте приложение под iOS 6.0 SDK или более поздней версии. Но, как я уже сказал, я использую iOS 8.2 SDK. Я также попробовал 8.1, и это единственные 2 версии iOS SDK, которые я даже установил в своей системе.

В нем говорится, что если вы не собираетесь создавать свое приложение на основе iOS 6 SDK, удалите Default-568h@2x.png из своего проекта. Я попытался удалить этот файл, и ошибка исчезла, но затем появилась другая ошибка: "Требование оптимизации iPhone 5 - Ваш бинарный файл не оптимизирован для iPhone 5".

Он должен каким-то образом обнаруживать неправильную версию из файла IPA (что я могу только предположить, что это является какой-то проблемой на стороне уравнения RAD Studio, в отличие от Xcode или множества других людей, имеющих эту проблему). В других публикациях используются такие термины, как "Deployment Target", "Base SDK" и "Target SDK".

Я полагаю, что все это правильно настроил, но как я могу это исправить, чтобы IPA, сгенерированный XE7, правильно определялся Application Loader как созданный с более поздним SDK, чем iOS 6.0?

Резолюции, которые я пробовал (без успеха):

Большинство результатов поиска говорят, что они созданы с более новой версией Xcode (по крайней мере, 5 или более поздней), но я использую последнюю версию Xcode 6.2. Примечание. Везде, где написано 6.0, я также пробовал 7.0. Параметры проекта относятся к Target: All configurations - платформе устройства iOS.

  1. http://207.211.86.211/index.php/answers/my-discussion/upload-to-itunesconnect
    У этого парня была та же проблема, и он говорит проверить все параметры проекта | Изображения приложений имеют правильные размеры. Я подтвердил, что мои. Он также рекомендует убедиться, что вы работаете с выпусками Apple SDK для iOS. Через инструменты | Варианты | Параметры среды | SDK Manager, выберите iPhoneOS 8.x и нажмите "Обновить локальный файловый кэш". Это тоже не помогло.

  2. https://pjstrnad.com/submitting-application-apple-store-delphi/
    Сначала он рекомендует вам создать собственный файл Info.plist в Project | Развертывание. Затем, чтобы исправить проблему с недействительным образом, он говорит, что вам нужно добавить ключ MinimumOSVersion и установить его 6.0.

    Добавить в Custom.info.plist:

    <Ключ>MinimumOSVersion
    <Строка>6,0

  3. Так как я могу опубликовать только 2 ссылки, эту следующую вам придется искать на community.embarcadero.com в разделе "Ответы на" Проблемы с развертыванием для iOS 8.1"для исходного сообщения".

    Здесь они рекомендуют установить исправление 30036 "Исправление для отправки приложений iOS в Apple AppStore", что я и сделал. Они также предложили варианты проекта | Delphi Compiler | Компиляция, добавление "--ios-version-min:6.0" в Дополнительные параметры для передачи компилятору. Не уверен, что это повлияет на меня, так как я использую BCB, но я тоже попробовал.

  4. В статье о stackru описано, как использовать otool и grep в файле.IPA для определения информации о версии. Поэтому я распаковал свой ipa-файл, запустил otool w/ grep, который вернул следующий вывод:

    cmd = LC_VERSION_MIN_IPHONEOS
    cmdsize = 16
    версия = 7.0
    SDK = 7,1

    Хотя он не говорит 8.1 или 8.2, как я ожидал, обе версии 7+. Это определенно новее, чем 6.0, поэтому должно быть где-то еще, откуда Application Loader получает версию.

  5. Измененные параметры проекта | C++ Linker: Advanced: минимальная поддерживаемая версия iOS до 6.0.

  6. Измененные параметры проекта | Delphi Compiler | Linking: минимальная версия iOS поддерживается до 6.0.

  7. Попытка создать совершенно новое пустое приложение для нескольких устройств, подготовить его и загрузить через Application Loader. Это терпит неудачу с той же точной ошибкой.

1 ответ

Ответ:

Между поддержкой Embarcadero и сообщениями об ошибках / документами от Apple я наконец выяснил, в чем проблема. Оказывается, Apple позволит вам попытаться отправить специальное приложение в iTunes Connect, хотя это должно быть мобильное приложение App Store. Несмотря на то, что вы еще не распространяете информацию в общедоступном App Store, а развертываете частную бета-версию для выбранной группы пользователей, вы все равно отправляете ее в качестве обеспечения App Store. Разница в том, что у него есть бета-версия.

Я использовал Ad hoc для обозначения того, что оно собирается на определенное количество устройств за пределами App Store через TestFlight - но это не так (по крайней мере, с TestFlight в любом случае). Проблема связана с тем, что сообщение об ошибке Apple было совершенно бесполезным. В сообщении об ошибке должно было быть сказано что-то вроде "Вы должны использовать положение App Store, а не Ad hoc или Development" вместо "Вы включаете недопустимый образ запуска для 6.0 SDK".

Что еще хуже, когда TestFlight был сторонним сервисом, инструкции должны были представить его как Ad hoc. Таким образом, наша команда запуталась, поскольку это изменилось, когда Apple купила ее (но это не было сделано очевидным или, по крайней мере, ясным в любых документах Embarcadero).

Также терминология является еще одним вопросом. Термины СЕРТИФИКАТ и ПРЕДОСТАВЛЕНИЕ иногда, кажется, используются взаимозаменяемо или случайно от одного или другого - и различие весьма важно.

Таким образом, решение состоит в том, чтобы использовать мобильное обеспечение App Store (подписанное сертификатом распространения) вместо специального. Приложение было успешно отправлено в iTunes Connect.

Другие вопросы по тегам